diff --git a/packages/tutanota-utils/lib/ArrayUtils.ts b/packages/tutanota-utils/lib/ArrayUtils.ts index 59a7029c1535..e2d8b0ad3244 100644 --- a/packages/tutanota-utils/lib/ArrayUtils.ts +++ b/packages/tutanota-utils/lib/ArrayUtils.ts @@ -560,3 +560,26 @@ export function zeroOut(...arrays: (Uint8Array | Int8Array)[]) { a.fill(0) } } + +/** + * @return 1 if first is bigger than second, -1 if second is bigger than first and 0 otherwise + */ +export function compare(first: Uint8Array, second: Uint8Array): number { + if (first.length > second.length) { + return 1 + } else if (first.length < second.length) { + return -1 + } + + for (let i = 0; i < first.length; i++) { + const a = first[i] + const b = second[i] + if (a > b) { + return 1 + } else if (a < b) { + return -1 + } + } + + return 0 +} diff --git a/packages/tutanota-utils/lib/index.ts b/packages/tutanota-utils/lib/index.ts index f8ab44c71557..9842c961fad2 100644 --- a/packages/tutanota-utils/lib/index.ts +++ b/packages/tutanota-utils/lib/index.ts @@ -42,6 +42,7 @@ export { arrayOf, count, zeroOut, + compare, } from "./ArrayUtils.js" export { AsyncResult } from "./AsyncResult.js" export { intersection, trisectingDiff, setAddAll, max, maxBy, findBy, min, minBy, mapWith, mapWithout, setEquals, setMap } from "./CollectionUtils.js" diff --git a/packages/tutanota-utils/test/ArrayUtilsTest.ts b/packages/tutanota-utils/test/ArrayUtilsTest.ts index 4a6e16dc9c1f..0f6b3fa97e1e 100644 --- a/packages/tutanota-utils/test/ArrayUtilsTest.ts +++ b/packages/tutanota-utils/test/ArrayUtilsTest.ts @@ -18,6 +18,7 @@ import { splitInChunks, symmetricDifference, } from "../lib/index.js" +import { compare } from "../lib/ArrayUtils.js" type ObjectWithId = { v: number @@ -875,4 +876,18 @@ o.spec("array utils", function () { o(arrayOf(2, (idx) => idx + 1 + " one thousand")).deepEquals(["1 one thousand", "2 one thousand"]) }) + + o("customId comparision", function () { + o(compare(new Uint8Array([]), new Uint8Array([]))).equals(0) + + o(compare(new Uint8Array([1]), new Uint8Array([]))).equals(1) + + o(compare(new Uint8Array([]), new Uint8Array([1]))).equals(-1) + + o(compare(new Uint8Array([1, 1]), new Uint8Array([1, 1]))).equals(0) + + o(compare(new Uint8Array([1, 1, 3]), new Uint8Array([1, 1, 2]))).equals(1) + + o(compare(new Uint8Array([1, 1, 2]), new Uint8Array([1, 1, 3]))).equals(-1) + }) }) diff --git a/schemas/sys.json b/schemas/sys.json index f93b266183b9..47a83509cfa3 100644 --- a/schemas/sys.json +++ b/schemas/sys.json @@ -380,6 +380,16 @@ "info": "AddAssociation GroupKeyRotationData/groupMembershipUpdateData/AGGREGATION/2432." } ] + }, + { + "version": 108, + "changes": [ + { + "name": "RenameAttribute", + "sourceType": "WebsocketCounterValue", + "info": "RenameAttribute WebsocketCounterValue: mailListId -> counterId." + } + ] } ] } diff --git a/schemas/tutanota.json b/schemas/tutanota.json index 554896ce1d01..e234eb69fcb9 100644 --- a/schemas/tutanota.json +++ b/schemas/tutanota.json @@ -450,6 +450,51 @@ "info": "RemoveValue Contact/autoTransmitPassword/78." } ] + }, + { + "version": 74, + "changes": [ + { + "name": "AddAssociation", + "sourceType": "GroupSettings", + "info": "AddAssociation GroupSettings/defaultAlarmsList/AGGREGATION/1446." + } + ] + }, + { + "version": 75, + "changes": [ + { + "name": "AddValue", + "sourceType": "MailFolder", + "info": "AddValue MailFolder/isLabel/1454." + }, + { + "name": "AddValue", + "sourceType": "MailFolder", + "info": "AddValue MailFolder/isMailSet/1455." + }, + { + "name": "AddAssociation", + "sourceType": "MailFolder", + "info": "AddAssociation MailFolder/entries/LIST_ASSOCIATION/1456." + }, + { + "name": "AddAssociation", + "sourceType": "MailBox", + "info": "AddAssociation MailBox/archivedMailBags/AGGREGATION/1460." + }, + { + "name": "AddAssociation", + "sourceType": "MailBox", + "info": "AddAssociation MailBox/currentMailBag/AGGREGATION/1461." + }, + { + "name": "AddAssociation", + "sourceType": "Mail", + "info": "AddAssociation Mail/sets/LIST_ELEMENT_ASSOCIATION/1462." + } + ] } ] } diff --git a/src/calendar-app/calendar/model/CalendarModel.ts b/src/calendar-app/calendar/model/CalendarModel.ts index 7182fb544a19..8cbf44bfff9e 100644 --- a/src/calendar-app/calendar/model/CalendarModel.ts +++ b/src/calendar-app/calendar/model/CalendarModel.ts @@ -220,6 +220,7 @@ export class CalendarModel { group: group._id, color: color, name: null, + defaultAlarmsList: [], }) userSettingsGroupRoot.groupSettings.push(newGroupSettings) await this.entityClient.update(userSettingsGroupRoot) diff --git a/src/calendar-app/calendar/search/model/CalendarSearchModel.ts b/src/calendar-app/calendar/search/model/CalendarSearchModel.ts index cf61af7300b1..d06fe7552840 100644 --- a/src/calendar-app/calendar/search/model/CalendarSearchModel.ts +++ b/src/calendar-app/calendar/search/model/CalendarSearchModel.ts @@ -133,7 +133,7 @@ export class CalendarSearchModel { continue } - if (restriction.listIds.length > 0 && !restriction.listIds.includes(listIdPart(event._id))) { + if (restriction.folderIds.length > 0 && !restriction.folderIds.includes(listIdPart(event._id))) { // check that the event is in the searched calendar. continue } @@ -221,7 +221,7 @@ export function isSameSearchRestriction(a: SearchRestriction, b: SearchRestricti a.end === b.end && isSameAttributeIds && (a.eventSeries === b.eventSeries || (a.eventSeries === null && b.eventSeries === true) || (a.eventSeries === true && b.eventSeries === null)) && - arrayEquals(a.listIds, b.listIds) + arrayEquals(a.folderIds, b.folderIds) ) } diff --git a/src/calendar-app/calendar/search/model/SearchUtils.ts b/src/calendar-app/calendar/search/model/SearchUtils.ts index bbdd7673f97e..33c884e6621a 100644 --- a/src/calendar-app/calendar/search/model/SearchUtils.ts +++ b/src/calendar-app/calendar/search/model/SearchUtils.ts @@ -50,8 +50,8 @@ export function getSearchUrl( if (restriction.end) { params.end = restriction.end } - if (restriction.listIds.length > 0) { - params.list = restriction.listIds + if (restriction.folderIds.length > 0) { + params.folder = restriction.folderIds } if (restriction.eventSeries != null) { @@ -67,14 +67,14 @@ export function getSearchUrl( /** * Adjusts the restriction according to the account type if necessary */ -export function createRestriction(start: number | null, end: number | null, listIds: Array, eventSeries: boolean): SearchRestriction { +export function createRestriction(start: number | null, end: number | null, folderIds: Array, eventSeries: boolean): SearchRestriction { return { type: CalendarEventTypeRef, start: start, end: end, field: null, attributeIds: null, - listIds, + folderIds, eventSeries, } } @@ -85,7 +85,7 @@ export function createRestriction(start: number | null, end: number | null, list export function getRestriction(route: string): SearchRestriction { let start: number | null = null let end: number | null = null - let listIds: Array = [] + let folderIds: Array = [] let eventSeries: boolean = true if (route.startsWith("/calendar") || route.startsWith("/search/calendar")) { @@ -104,9 +104,9 @@ export function getRestriction(route: string): SearchRestriction { end = filterInt(params["end"]) } - const list = params["list"] - if (Array.isArray(list)) { - listIds = list + const folder = params["folder"] + if (Array.isArray(folder)) { + folderIds = folder } } catch (e) { console.log("invalid query: " + route, e) @@ -127,7 +127,7 @@ export function getRestriction(route: string): SearchRestriction { throw new Error("invalid type " + route) } - return createRestriction(start, end, listIds, eventSeries) + return createRestriction(start, end, folderIds, eventSeries) } export function decodeCalendarSearchKey(searchKey: string): { id: Id; start: number } { diff --git a/src/calendar-app/calendar/search/view/CalendarSearchViewModel.ts b/src/calendar-app/calendar/search/view/CalendarSearchViewModel.ts index b963ee1e5da8..6b85934e88f6 100644 --- a/src/calendar-app/calendar/search/view/CalendarSearchViewModel.ts +++ b/src/calendar-app/calendar/search/view/CalendarSearchViewModel.ts @@ -21,7 +21,7 @@ import { ofClass, TypeRef, } from "@tutao/tutanota-utils" -import { areResultsForTheSameQuery, hasMoreResults, isSameSearchRestriction, CalendarSearchModel } from "../model/CalendarSearchModel.js" +import { areResultsForTheSameQuery, CalendarSearchModel, hasMoreResults, isSameSearchRestriction } from "../model/CalendarSearchModel.js" import { NotFoundError } from "../../../../common/api/common/error/RestError.js" import { createRestriction, decodeCalendarSearchKey, encodeCalendarSearchKey, getRestriction } from "../model/SearchUtils.js" import Stream from "mithril/stream" @@ -159,7 +159,7 @@ export class CalendarSearchViewModel { } private listIdMatchesRestriction(listId: string, restriction: SearchRestriction): boolean { - return restriction.listIds.length === 0 || restriction.listIds.includes(listId) + return restriction.folderIds.length === 0 || restriction.folderIds.includes(listId) } onNewUrl(args: Record, requestedPath: string) { @@ -217,7 +217,7 @@ export class CalendarSearchViewModel { this.startDate = restriction.start ? new Date(restriction.start) : null this.endDate = restriction.end ? new Date(restriction.end) : null - this.selectedCalendar = this.extractCalendarListIds(restriction.listIds) + this.selectedCalendar = this.extractCalendarListIds(restriction.folderIds) this.includeRepeatingEvents = restriction.eventSeries ?? true this.lazyCalendarInfos.load() this.latestCalendarRestriction = restriction @@ -415,12 +415,12 @@ export class CalendarSearchViewModel { return { items: entries, complete } }, - loadSingle: async (elementId: Id) => { + loadSingle: async (_listId: Id, elementId: Id) => { const lastResult = this._searchResult if (!lastResult) { return null } - const id = lastResult.results.find((r) => r[1] === elementId) + const id = lastResult.results.find((resultId) => elementIdPart(resultId) === elementId) if (id) { return this.entityClient .load(lastResult.restriction.type, id) @@ -446,7 +446,7 @@ export class CalendarSearchViewModel { if (result && isSameTypeRef(typeRef, result.restriction.type)) { // The list id must be null/empty, otherwise the user is filtering by list, and it shouldn't be ignored - const ignoreList = isSameTypeRef(typeRef, MailTypeRef) && result.restriction.listIds.length === 0 + const ignoreList = isSameTypeRef(typeRef, MailTypeRef) && result.restriction.folderIds.length === 0 return result.results.some((r) => this.compareItemId(r, id, ignoreList)) } diff --git a/src/calendar-app/calendar/view/CalendarView.ts b/src/calendar-app/calendar/view/CalendarView.ts index ab29d62ada18..96d161911d92 100644 --- a/src/calendar-app/calendar/view/CalendarView.ts +++ b/src/calendar-app/calendar/view/CalendarView.ts @@ -802,6 +802,7 @@ export class CalendarView extends BaseTopLevelView implements TopLevelView = new Map([ export const SYSTEM_GROUP_MAIL_ADDRESS = "system@tutanota.de" -export const getMailFolderType = (folder: MailFolder): MailFolderType => downcast(folder.folderType) +export const getMailFolderType = (folder: MailFolder): MailSetKind => downcast(folder.folderType) type ObjectPropertyKey = string | number | symbol export const reverse = (objectMap: Record): Record => @@ -84,7 +84,7 @@ export const enum BucketPermissionType { External = "3", } -export enum MailFolderType { +export enum MailSetKind { CUSTOM = "0", INBOX = "1", SENT = "2", @@ -92,6 +92,7 @@ export enum MailFolderType { ARCHIVE = "4", SPAM = "5", DRAFT = "6", + ALL = "7", } export const enum ReplyType { diff --git a/src/common/api/common/mail/FolderSystem.ts b/src/common/api/common/mail/FolderSystem.ts index e589b95af7c5..fe5a25e60b2d 100644 --- a/src/common/api/common/mail/FolderSystem.ts +++ b/src/common/api/common/mail/FolderSystem.ts @@ -1,7 +1,7 @@ -import { groupBy, partition } from "@tutao/tutanota-utils" -import { MailFolder } from "../../entities/tutanota/TypeRefs.js" -import { MailFolderType } from "../TutanotaConstants.js" -import { elementIdPart, getElementId, isSameId } from "../utils/EntityUtils.js" +import { groupBy, isNotEmpty, partition } from "@tutao/tutanota-utils" +import { Mail, MailFolder } from "../../entities/tutanota/TypeRefs.js" +import { MailSetKind } from "../TutanotaConstants.js" +import { elementIdPart, getElementId, getListId, isSameId } from "../utils/EntityUtils.js" export interface IndentedFolder { level: number @@ -17,7 +17,7 @@ export class FolderSystem { const folderByParent = groupBy(folders, (folder) => (folder.parentFolder ? elementIdPart(folder.parentFolder) : null)) const topLevelFolders = folders.filter((f) => f.parentFolder == null) - const [systemFolders, customFolders] = partition(topLevelFolders, (f) => f.folderType !== MailFolderType.CUSTOM) + const [systemFolders, customFolders] = partition(topLevelFolders, (f) => f.folderType !== MailSetKind.CUSTOM) this.systemSubtrees = systemFolders.sort(compareSystem).map((f) => this.makeSubtree(folderByParent, f, compareCustom)) this.customSubtrees = customFolders.sort(compareCustom).map((f) => this.makeSubtree(folderByParent, f, compareCustom)) @@ -28,16 +28,25 @@ export class FolderSystem { } /** Search for a specific folder type. Some mailboxes might not have some system folders! */ - getSystemFolderByType(type: Omit): MailFolder | null { + getSystemFolderByType(type: Omit): MailFolder | null { return this.systemSubtrees.find((f) => f.folder.folderType === type)?.folder ?? null } - getFolderById(folderId: IdTuple): MailFolder | null { + getFolderById(folderId: Id): MailFolder | null { const subtree = this.getFolderByIdInSubtrees(this.systemSubtrees, folderId) ?? this.getFolderByIdInSubtrees(this.customSubtrees, folderId) return subtree?.folder ?? null } - getFolderByMailListId(mailListId: Id): MailFolder | null { + getFolderByMail(mail: Mail): MailFolder | null { + const sets = mail.sets + if (isNotEmpty(sets)) { + return this.getFolderById(elementIdPart(sets[0])) + } else { + return this.getFolderByMailListIdLegacy(getListId(mail)) + } + } + + private getFolderByMailListIdLegacy(mailListId: Id): MailFolder | null { const subtree = this.getFolderByMailListIdInSubtrees(this.systemSubtrees, mailListId) ?? this.getFolderByMailListIdInSubtrees(this.customSubtrees, mailListId) return subtree?.folder ?? null @@ -49,7 +58,7 @@ export class FolderSystem { */ getCustomFoldersOfParent(parent: IdTuple | null): MailFolder[] { if (parent) { - const parentFolder = this.getFolderByIdInSubtrees([...this.customSubtrees, ...this.systemSubtrees], parent) + const parentFolder = this.getFolderByIdInSubtrees([...this.customSubtrees, ...this.systemSubtrees], elementIdPart(parent)) return parentFolder ? parentFolder.children.map((child) => child.folder) : [] } else { return this.customSubtrees.map((subtree) => subtree.folder) @@ -57,7 +66,7 @@ export class FolderSystem { } getDescendantFoldersOfParent(parent: IdTuple): IndentedFolder[] { - const parentFolder = this.getFolderByIdInSubtrees([...this.customSubtrees, ...this.systemSubtrees], parent) + const parentFolder = this.getFolderByIdInSubtrees([...this.customSubtrees, ...this.systemSubtrees], elementIdPart(parent)) if (parentFolder) { return this.getIndentedFolderList([parentFolder]).slice(1) } else { @@ -78,7 +87,7 @@ export class FolderSystem { } else if (isSameId(currentFolderPointer.parentFolder, potentialAncestorId)) { return true } - currentFolderPointer = this.getFolderById(currentFolderPointer.parentFolder) + currentFolderPointer = this.getFolderById(elementIdPart(currentFolderPointer.parentFolder)) } } @@ -99,8 +108,8 @@ export class FolderSystem { }) } - private getFolderByIdInSubtrees(systems: ReadonlyArray, folderId: IdTuple): FolderSubtree | null { - return this.getFolderBy(systems, (system) => isSameId(system.folder._id, folderId)) + private getFolderByIdInSubtrees(systems: ReadonlyArray, folderId: Id): FolderSubtree | null { + return this.getFolderBy(systems, (system) => isSameId(getElementId(system.folder), folderId)) } private getFolderByMailListIdInSubtrees(systems: ReadonlyArray, mailListId: Id): FolderSubtree | null { @@ -155,15 +164,16 @@ function compareCustom(folder1: MailFolder, folder2: MailFolder): number { return folder1.name.localeCompare(folder2.name) } -type SystemMailFolderTypes = Exclude +type SystemMailFolderTypes = Exclude const folderTypeToOrder: Record = { - [MailFolderType.INBOX]: 0, - [MailFolderType.DRAFT]: 1, - [MailFolderType.SENT]: 2, - [MailFolderType.TRASH]: 4, - [MailFolderType.ARCHIVE]: 5, - [MailFolderType.SPAM]: 6, + [MailSetKind.INBOX]: 0, + [MailSetKind.DRAFT]: 1, + [MailSetKind.SENT]: 2, + [MailSetKind.TRASH]: 4, + [MailSetKind.ARCHIVE]: 5, + [MailSetKind.SPAM]: 6, + [MailSetKind.ALL]: 7, } function compareSystem(folder1: MailFolder, folder2: MailFolder): number { diff --git a/src/common/api/common/utils/EntityUtils.ts b/src/common/api/common/utils/EntityUtils.ts index a3aa9aaf0cb9..c6ae146a8c2a 100644 --- a/src/common/api/common/utils/EntityUtils.ts +++ b/src/common/api/common/utils/EntityUtils.ts @@ -6,6 +6,7 @@ import { base64ToUint8Array, base64UrlToBase64, clone, + compare, hexToBase64, isSameTypeRef, pad, @@ -108,7 +109,7 @@ export type StrippedEntity = */ export function firstBiggerThanSecond(firstId: Id, secondId: Id, typeModel?: TypeModel): boolean { if (typeModel?.values._id.type === ValueType.CustomId) { - return firstBiggerThanSecond(customIdToString(firstId), customIdToString(secondId)) + return firstBiggerThanSecondCustomId(firstId, secondId) } else { // if the number of digits is bigger, then the id is bigger, otherwise we can use the lexicographical comparison if (firstId.length > secondId.length) { @@ -121,6 +122,17 @@ export function firstBiggerThanSecond(firstId: Id, secondId: Id, typeModel?: Typ } } +export function firstBiggerThanSecondCustomId(firstId: Id, secondId: Id): boolean { + return compare(customIdToUint8array(firstId), customIdToUint8array(secondId)) === 1 +} + +function customIdToUint8array(id: Id): Uint8Array { + if (id === "") { + return new Uint8Array() + } + return base64ToUint8Array(base64UrlToBase64(id)) +} + export function compareNewestFirst(id1: Id | IdTuple, id2: Id | IdTuple): number { let firstId = id1 instanceof Array ? id1[1] : id1 let secondId = id2 instanceof Array ? id2[1] : id2 diff --git a/src/common/api/entities/sys/ModelInfo.ts b/src/common/api/entities/sys/ModelInfo.ts index f4653fc0c24b..18bb61bbd788 100644 --- a/src/common/api/entities/sys/ModelInfo.ts +++ b/src/common/api/entities/sys/ModelInfo.ts @@ -1,6 +1,6 @@ const modelInfo = { - version: 106, - compatibleSince: 106, + version: 108, + compatibleSince: 108, } export default modelInfo \ No newline at end of file diff --git a/src/common/api/entities/sys/TypeModels.js b/src/common/api/entities/sys/TypeModels.js index e74fee1fdf7d..d65aa8307246 100644 --- a/src/common/api/entities/sys/TypeModels.js +++ b/src/common/api/entities/sys/TypeModels.js @@ -219,7 +219,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AdminGroupKeyRotationPostIn": { "name": "AdminGroupKeyRotationPostIn", @@ -263,7 +263,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AdministratedGroupsRef": { "name": "AdministratedGroupsRef", @@ -297,7 +297,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmInfo": { "name": "AlarmInfo", @@ -349,7 +349,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmNotification": { "name": "AlarmNotification", @@ -449,7 +449,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmServicePost": { "name": "AlarmServicePost", @@ -483,7 +483,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ArchiveRef": { "name": "ArchiveRef", @@ -515,7 +515,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ArchiveType": { "name": "ArchiveType", @@ -569,7 +569,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AuditLogEntry": { "name": "AuditLogEntry", @@ -703,7 +703,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AuditLogRef": { "name": "AuditLogRef", @@ -737,7 +737,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AuthenticatedDevice": { "name": "AuthenticatedDevice", @@ -787,7 +787,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Authentication": { "name": "Authentication", @@ -848,7 +848,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataDelete": { "name": "AutoLoginDataDelete", @@ -880,7 +880,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataGet": { "name": "AutoLoginDataGet", @@ -923,7 +923,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataReturn": { "name": "AutoLoginDataReturn", @@ -955,7 +955,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginPostReturn": { "name": "AutoLoginPostReturn", @@ -987,7 +987,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Blob": { "name": "Blob", @@ -1037,7 +1037,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BlobReferenceTokenWrapper": { "name": "BlobReferenceTokenWrapper", @@ -1069,7 +1069,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Booking": { "name": "Booking", @@ -1193,7 +1193,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "BookingItem": { "name": "BookingItem", @@ -1279,7 +1279,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BookingsRef": { "name": "BookingsRef", @@ -1313,7 +1313,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "BootstrapFeature": { "name": "BootstrapFeature", @@ -1345,7 +1345,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Braintree3ds2Request": { "name": "Braintree3ds2Request", @@ -1395,7 +1395,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Braintree3ds2Response": { "name": "Braintree3ds2Response", @@ -1436,7 +1436,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainData": { "name": "BrandingDomainData", @@ -1513,7 +1513,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainDeleteData": { "name": "BrandingDomainDeleteData", @@ -1545,7 +1545,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainGetReturn": { "name": "BrandingDomainGetReturn", @@ -1579,7 +1579,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Bucket": { "name": "Bucket", @@ -1613,7 +1613,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "BucketKey": { "name": "BucketKey", @@ -1702,7 +1702,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "BucketPermission": { "name": "BucketPermission", @@ -1844,7 +1844,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CalendarEventRef": { "name": "CalendarEventRef", @@ -1885,7 +1885,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CertificateInfo": { "name": "CertificateInfo", @@ -1946,7 +1946,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Challenge": { "name": "Challenge", @@ -1999,7 +1999,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ChangeKdfPostIn": { "name": "ChangeKdfPostIn", @@ -2076,7 +2076,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ChangePasswordPostIn": { "name": "ChangePasswordPostIn", @@ -2171,7 +2171,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Chat": { "name": "Chat", @@ -2221,7 +2221,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CloseSessionServicePost": { "name": "CloseSessionServicePost", @@ -2264,7 +2264,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateCustomerServerPropertiesData": { "name": "CreateCustomerServerPropertiesData", @@ -2305,7 +2305,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CreateCustomerServerPropertiesReturn": { "name": "CreateCustomerServerPropertiesReturn", @@ -2339,7 +2339,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateSessionData": { "name": "CreateSessionData", @@ -2427,7 +2427,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateSessionReturn": { "name": "CreateSessionReturn", @@ -2480,7 +2480,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CreditCard": { "name": "CreditCard", @@ -2548,7 +2548,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainCheckGetIn": { "name": "CustomDomainCheckGetIn", @@ -2591,7 +2591,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainCheckGetOut": { "name": "CustomDomainCheckGetOut", @@ -2654,7 +2654,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainData": { "name": "CustomDomainData", @@ -2697,7 +2697,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainReturn": { "name": "CustomDomainReturn", @@ -2740,7 +2740,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Customer": { "name": "Customer", @@ -2997,7 +2997,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationPostIn": { "name": "CustomerAccountTerminationPostIn", @@ -3040,7 +3040,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationPostOut": { "name": "CustomerAccountTerminationPostOut", @@ -3074,7 +3074,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationRequest": { "name": "CustomerAccountTerminationRequest", @@ -3153,7 +3153,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerInfo": { "name": "CustomerInfo", @@ -3466,7 +3466,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerProperties": { "name": "CustomerProperties", @@ -3574,7 +3574,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerServerProperties": { "name": "CustomerServerProperties", @@ -3700,7 +3700,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "DateWrapper": { "name": "DateWrapper", @@ -3732,7 +3732,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DebitServicePutData": { "name": "DebitServicePutData", @@ -3766,7 +3766,39 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" + }, + "DefaultAlarmInfo": { + "name": "DefaultAlarmInfo", + "since": 107, + "type": "AGGREGATED_TYPE", + "id": 2433, + "rootId": "A3N5cwAJgQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2434, + "since": 107, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "trigger": { + "final": true, + "name": "trigger", + "id": 2435, + "since": 107, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "108" }, "DeleteCustomerData": { "name": "DeleteCustomerData", @@ -3846,7 +3878,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "DnsRecord": { "name": "DnsRecord", @@ -3896,7 +3928,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainInfo": { "name": "DomainInfo", @@ -3958,7 +3990,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "DomainMailAddressAvailabilityData": { "name": "DomainMailAddressAvailabilityData", @@ -3990,7 +4022,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainMailAddressAvailabilityReturn": { "name": "DomainMailAddressAvailabilityReturn", @@ -4022,7 +4054,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainsRef": { "name": "DomainsRef", @@ -4056,7 +4088,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "EmailSenderListElement": { "name": "EmailSenderListElement", @@ -4115,7 +4147,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "EntityEventBatch": { "name": "EntityEventBatch", @@ -4176,7 +4208,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "EntityUpdate": { "name": "EntityUpdate", @@ -4244,7 +4276,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Exception": { "name": "Exception", @@ -4285,7 +4317,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ExternalPropertiesReturn": { "name": "ExternalPropertiesReturn", @@ -4347,7 +4379,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ExternalUserReference": { "name": "ExternalUserReference", @@ -4418,7 +4450,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Feature": { "name": "Feature", @@ -4450,7 +4482,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "File": { "name": "File", @@ -4500,7 +4532,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GeneratedIdWrapper": { "name": "GeneratedIdWrapper", @@ -4532,7 +4564,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCard": { "name": "GiftCard", @@ -4645,7 +4677,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardCreateData": { "name": "GiftCardCreateData", @@ -4713,7 +4745,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardCreateReturn": { "name": "GiftCardCreateReturn", @@ -4747,7 +4779,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardDeleteData": { "name": "GiftCardDeleteData", @@ -4781,7 +4813,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardGetReturn": { "name": "GiftCardGetReturn", @@ -4833,7 +4865,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardOption": { "name": "GiftCardOption", @@ -4865,7 +4897,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardRedeemData": { "name": "GiftCardRedeemData", @@ -4917,7 +4949,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardRedeemGetReturn": { "name": "GiftCardRedeemGetReturn", @@ -4969,7 +5001,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardsRef": { "name": "GiftCardsRef", @@ -5003,7 +5035,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Group": { "name": "Group", @@ -5227,7 +5259,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupInfo": { "name": "GroupInfo", @@ -5380,7 +5412,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKey": { "name": "GroupKey", @@ -5486,7 +5518,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationData": { "name": "GroupKeyRotationData", @@ -5586,7 +5618,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationInfoGetOut": { "name": "GroupKeyRotationInfoGetOut", @@ -5629,7 +5661,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationPostIn": { "name": "GroupKeyRotationPostIn", @@ -5663,7 +5695,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdate": { "name": "GroupKeyUpdate", @@ -5760,7 +5792,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdateData": { "name": "GroupKeyUpdateData", @@ -5821,7 +5853,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdatesRef": { "name": "GroupKeyUpdatesRef", @@ -5855,7 +5887,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeysRef": { "name": "GroupKeysRef", @@ -5889,7 +5921,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMember": { "name": "GroupMember", @@ -5979,7 +6011,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembership": { "name": "GroupMembership", @@ -6087,7 +6119,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembershipKeyData": { "name": "GroupMembershipKeyData", @@ -6148,7 +6180,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembershipUpdateData": { "name": "GroupMembershipUpdateData", @@ -6200,7 +6232,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupRoot": { "name": "GroupRoot", @@ -6281,7 +6313,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "IdTupleWrapper": { "name": "IdTupleWrapper", @@ -6322,7 +6354,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InstanceSessionKey": { "name": "InstanceSessionKey", @@ -6401,7 +6433,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Invoice": { "name": "Invoice", @@ -6617,7 +6649,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataGetIn": { "name": "InvoiceDataGetIn", @@ -6649,7 +6681,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataGetOut": { "name": "InvoiceDataGetOut", @@ -6791,7 +6823,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataItem": { "name": "InvoiceDataItem", @@ -6868,7 +6900,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceInfo": { "name": "InvoiceInfo", @@ -7047,7 +7079,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceItem": { "name": "InvoiceItem", @@ -7133,7 +7165,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyPair": { "name": "KeyPair", @@ -7210,7 +7242,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyRotation": { "name": "KeyRotation", @@ -7278,7 +7310,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyRotationsRef": { "name": "KeyRotationsRef", @@ -7312,7 +7344,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "LocationServiceGetReturn": { "name": "LocationServiceGetReturn", @@ -7344,7 +7376,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Login": { "name": "Login", @@ -7403,7 +7435,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAlias": { "name": "MailAddressAlias", @@ -7444,7 +7476,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasGetIn": { "name": "MailAddressAliasGetIn", @@ -7478,7 +7510,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceData": { "name": "MailAddressAliasServiceData", @@ -7521,7 +7553,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceDataDelete": { "name": "MailAddressAliasServiceDataDelete", @@ -7573,7 +7605,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceReturn": { "name": "MailAddressAliasServiceReturn", @@ -7632,7 +7664,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAvailability": { "name": "MailAddressAvailability", @@ -7673,7 +7705,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressToGroup": { "name": "MailAddressToGroup", @@ -7734,7 +7766,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipAddData": { "name": "MembershipAddData", @@ -7805,7 +7837,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipPutIn": { "name": "MembershipPutIn", @@ -7839,7 +7871,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipRemoveData": { "name": "MembershipRemoveData", @@ -7883,7 +7915,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MissedNotification": { "name": "MissedNotification", @@ -7999,7 +8031,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MultipleMailAddressAvailabilityData": { "name": "MultipleMailAddressAvailabilityData", @@ -8033,7 +8065,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "MultipleMailAddressAvailabilityReturn": { "name": "MultipleMailAddressAvailabilityReturn", @@ -8067,7 +8099,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "NotificationInfo": { "name": "NotificationInfo", @@ -8119,7 +8151,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "NotificationMailTemplate": { "name": "NotificationMailTemplate", @@ -8169,7 +8201,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "NotificationSessionKey": { "name": "NotificationSessionKey", @@ -8212,7 +8244,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "OrderProcessingAgreement": { "name": "OrderProcessingAgreement", @@ -8328,7 +8360,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "OtpChallenge": { "name": "OtpChallenge", @@ -8362,7 +8394,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServiceGetData": { "name": "PaymentDataServiceGetData", @@ -8394,7 +8426,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServiceGetReturn": { "name": "PaymentDataServiceGetReturn", @@ -8426,7 +8458,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePostData": { "name": "PaymentDataServicePostData", @@ -8460,7 +8492,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePutData": { "name": "PaymentDataServicePutData", @@ -8575,7 +8607,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePutReturn": { "name": "PaymentDataServicePutReturn", @@ -8618,7 +8650,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentErrorInfo": { "name": "PaymentErrorInfo", @@ -8668,7 +8700,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Permission": { "name": "Permission", @@ -8820,7 +8852,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PlanConfiguration": { "name": "PlanConfiguration", @@ -8933,7 +8965,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PlanPrices": { "name": "PlanPrices", @@ -9075,7 +9107,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PlanServiceGetOut": { "name": "PlanServiceGetOut", @@ -9109,7 +9141,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceData": { "name": "PriceData", @@ -9170,7 +9202,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceItemData": { "name": "PriceItemData", @@ -9229,7 +9261,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PriceRequestData": { "name": "PriceRequestData", @@ -9306,7 +9338,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PriceServiceData": { "name": "PriceServiceData", @@ -9349,7 +9381,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceServiceReturn": { "name": "PriceServiceReturn", @@ -9421,7 +9453,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PubEncKeyData": { "name": "PubEncKeyData", @@ -9489,7 +9521,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyGetIn": { "name": "PublicKeyGetIn", @@ -9530,7 +9562,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyGetOut": { "name": "PublicKeyGetOut", @@ -9589,7 +9621,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyPutIn": { "name": "PublicKeyPutIn", @@ -9641,7 +9673,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "PushIdentifier": { "name": "PushIdentifier", @@ -9799,7 +9831,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PushIdentifierList": { "name": "PushIdentifierList", @@ -9833,7 +9865,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ReceivedGroupInvitation": { "name": "ReceivedGroupInvitation", @@ -9994,7 +10026,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "RecoverCode": { "name": "RecoverCode", @@ -10080,7 +10112,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RecoverCodeData": { "name": "RecoverCodeData", @@ -10139,7 +10171,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodeGetIn": { "name": "ReferralCodeGetIn", @@ -10173,7 +10205,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodePostIn": { "name": "ReferralCodePostIn", @@ -10196,7 +10228,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodePostOut": { "name": "ReferralCodePostOut", @@ -10230,7 +10262,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceData": { "name": "RegistrationCaptchaServiceData", @@ -10271,7 +10303,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceGetData": { "name": "RegistrationCaptchaServiceGetData", @@ -10339,7 +10371,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceReturn": { "name": "RegistrationCaptchaServiceReturn", @@ -10380,7 +10412,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationReturn": { "name": "RegistrationReturn", @@ -10412,7 +10444,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationServiceData": { "name": "RegistrationServiceData", @@ -10462,7 +10494,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RejectedSender": { "name": "RejectedSender", @@ -10557,7 +10589,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RejectedSendersRef": { "name": "RejectedSendersRef", @@ -10591,7 +10623,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "RepeatRule": { "name": "RepeatRule", @@ -10670,7 +10702,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "ResetFactorsDeleteData": { "name": "ResetFactorsDeleteData", @@ -10720,7 +10752,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ResetPasswordPostIn": { "name": "ResetPasswordPostIn", @@ -10799,7 +10831,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "RootInstance": { "name": "RootInstance", @@ -10858,7 +10890,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SaltData": { "name": "SaltData", @@ -10890,7 +10922,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SaltReturn": { "name": "SaltReturn", @@ -10931,7 +10963,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactor": { "name": "SecondFactor", @@ -11019,7 +11051,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthAllowedReturn": { "name": "SecondFactorAuthAllowedReturn", @@ -11051,7 +11083,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthData": { "name": "SecondFactorAuthData", @@ -11123,7 +11155,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthDeleteData": { "name": "SecondFactorAuthDeleteData", @@ -11157,7 +11189,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthGetData": { "name": "SecondFactorAuthGetData", @@ -11189,7 +11221,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthGetReturn": { "name": "SecondFactorAuthGetReturn", @@ -11221,7 +11253,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthentication": { "name": "SecondFactorAuthentication", @@ -11307,7 +11339,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SendRegistrationCodeData": { "name": "SendRegistrationCodeData", @@ -11366,7 +11398,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SendRegistrationCodeReturn": { "name": "SendRegistrationCodeReturn", @@ -11398,7 +11430,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SentGroupInvitation": { "name": "SentGroupInvitation", @@ -11487,7 +11519,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "Session": { "name": "Session", @@ -11630,7 +11662,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "SignOrderProcessingAgreementData": { "name": "SignOrderProcessingAgreementData", @@ -11671,7 +11703,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SseConnectData": { "name": "SseConnectData", @@ -11714,7 +11746,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "StringConfigValue": { "name": "StringConfigValue", @@ -11755,7 +11787,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "StringWrapper": { "name": "StringWrapper", @@ -11787,7 +11819,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SurveyData": { "name": "SurveyData", @@ -11846,7 +11878,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SwitchAccountTypePostIn": { "name": "SwitchAccountTypePostIn", @@ -11935,7 +11967,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "SystemKeysReturn": { "name": "SystemKeysReturn", @@ -12051,7 +12083,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "TakeOverDeletedAddressData": { "name": "TakeOverDeletedAddressData", @@ -12110,7 +12142,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "TypeInfo": { "name": "TypeInfo", @@ -12151,7 +12183,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "U2fChallenge": { "name": "U2fChallenge", @@ -12194,7 +12226,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "U2fKey": { "name": "U2fKey", @@ -12246,7 +12278,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "U2fRegisteredDevice": { "name": "U2fRegisteredDevice", @@ -12314,7 +12346,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "U2fResponseData": { "name": "U2fResponseData", @@ -12364,7 +12396,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "UpdatePermissionKeyData": { "name": "UpdatePermissionKeyData", @@ -12426,7 +12458,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UpdateSessionKeysPostIn": { "name": "UpdateSessionKeysPostIn", @@ -12460,7 +12492,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UpgradePriceServiceData": { "name": "UpgradePriceServiceData", @@ -12512,7 +12544,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UpgradePriceServiceReturn": { "name": "UpgradePriceServiceReturn", @@ -12683,7 +12715,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "User": { "name": "User", @@ -12898,7 +12930,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAlarmInfo": { "name": "UserAlarmInfo", @@ -12977,7 +13009,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAlarmInfoListType": { "name": "UserAlarmInfoListType", @@ -13011,7 +13043,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAreaGroups": { "name": "UserAreaGroups", @@ -13045,7 +13077,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAuthentication": { "name": "UserAuthentication", @@ -13099,7 +13131,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserDataDelete": { "name": "UserDataDelete", @@ -13151,7 +13183,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserExternalAuthInfo": { "name": "UserExternalAuthInfo", @@ -13221,7 +13253,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupKeyDistribution": { "name": "UserGroupKeyDistribution", @@ -13289,7 +13321,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupKeyRotationData": { "name": "UserGroupKeyRotationData", @@ -13406,7 +13438,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupRoot": { "name": "UserGroupRoot", @@ -13487,7 +13519,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "VariableExternalAuthInfo": { "name": "VariableExternalAuthInfo", @@ -13591,7 +13623,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "VerifyRegistrationCodeData": { "name": "VerifyRegistrationCodeData", @@ -13632,7 +13664,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Version": { "name": "Version", @@ -13703,7 +13735,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "VersionData": { "name": "VersionData", @@ -13762,7 +13794,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "VersionInfo": { "name": "VersionInfo", @@ -13887,7 +13919,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "VersionReturn": { "name": "VersionReturn", @@ -13921,7 +13953,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WebauthnResponseData": { "name": "WebauthnResponseData", @@ -13980,7 +14012,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketCounterData": { "name": "WebsocketCounterData", @@ -14023,7 +14055,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketCounterValue": { "name": "WebsocketCounterValue", @@ -14052,9 +14084,9 @@ export const typeModels = { "cardinality": "One", "encrypted": false }, - "mailListId": { + "counterId": { "final": false, - "name": "mailListId", + "name": "counterId", "id": 1490, "since": 41, "type": "GeneratedId", @@ -14064,7 +14096,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketEntityData": { "name": "WebsocketEntityData", @@ -14116,7 +14148,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketLeaderStatus": { "name": "WebsocketLeaderStatus", @@ -14148,7 +14180,7 @@ export const typeModels = { }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelChild": { "name": "WhitelabelChild", @@ -14263,7 +14295,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelChildrenRef": { "name": "WhitelabelChildrenRef", @@ -14297,7 +14329,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelConfig": { "name": "WhitelabelConfig", @@ -14432,7 +14464,7 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelParent": { "name": "WhitelabelParent", @@ -14476,6 +14508,6 @@ export const typeModels = { } }, "app": "sys", - "version": "106" + "version": "108" } } \ No newline at end of file diff --git a/src/common/api/entities/sys/TypeRefs.ts b/src/common/api/entities/sys/TypeRefs.ts index e9c76129043b..b36e8d3a192f 100644 --- a/src/common/api/entities/sys/TypeRefs.ts +++ b/src/common/api/entities/sys/TypeRefs.ts @@ -912,6 +912,18 @@ export type DebitServicePutData = { invoice: null | IdTuple; } +export const DefaultAlarmInfoTypeRef: TypeRef = new TypeRef("sys", "DefaultAlarmInfo") + +export function createDefaultAlarmInfo(values: StrippedEntity): DefaultAlarmInfo { + return Object.assign(create(typeModels.DefaultAlarmInfo, DefaultAlarmInfoTypeRef), values) +} + +export type DefaultAlarmInfo = { + _type: TypeRef; + + _id: Id; + trigger: string; +} export const DeleteCustomerDataTypeRef: TypeRef = new TypeRef("sys", "DeleteCustomerData") export function createDeleteCustomerData(values: StrippedEntity): DeleteCustomerData { @@ -3455,7 +3467,7 @@ export type WebsocketCounterValue = { _id: Id; count: NumberString; - mailListId: Id; + counterId: Id; } export const WebsocketEntityDataTypeRef: TypeRef = new TypeRef("sys", "WebsocketEntityData") diff --git a/src/common/api/entities/tutanota/ModelInfo.ts b/src/common/api/entities/tutanota/ModelInfo.ts index 5f3ff28ab6c3..5ffa0f600496 100644 --- a/src/common/api/entities/tutanota/ModelInfo.ts +++ b/src/common/api/entities/tutanota/ModelInfo.ts @@ -1,6 +1,6 @@ const modelInfo = { - version: 73, - compatibleSince: 73, + version: 75, + compatibleSince: 75, } export default modelInfo \ No newline at end of file diff --git a/src/common/api/entities/tutanota/TypeModels.js b/src/common/api/entities/tutanota/TypeModels.js index fbcccfc4542b..e3f64b0273fa 100644 --- a/src/common/api/entities/tutanota/TypeModels.js +++ b/src/common/api/entities/tutanota/TypeModels.js @@ -56,7 +56,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Birthday": { "name": "Birthday", @@ -106,7 +106,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "Body": { "name": "Body", @@ -147,7 +147,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarDeleteData": { "name": "CalendarDeleteData", @@ -181,7 +181,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEvent": { "name": "CalendarEvent", @@ -380,7 +380,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventAttendee": { "name": "CalendarEventAttendee", @@ -423,7 +423,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventIndexRef": { "name": "CalendarEventIndexRef", @@ -457,7 +457,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUidIndex": { "name": "CalendarEventUidIndex", @@ -528,7 +528,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUpdate": { "name": "CalendarEventUpdate", @@ -616,7 +616,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUpdateList": { "name": "CalendarEventUpdateList", @@ -650,7 +650,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarGroupRoot": { "name": "CalendarGroupRoot", @@ -749,7 +749,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarRepeatRule": { "name": "CalendarRepeatRule", @@ -828,7 +828,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Contact": { "name": "Contact", @@ -1151,7 +1151,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactAddress": { "name": "ContactAddress", @@ -1201,7 +1201,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactCustomDate": { "name": "ContactCustomDate", @@ -1251,7 +1251,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactList": { "name": "ContactList", @@ -1340,7 +1340,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactListEntry": { "name": "ContactListEntry", @@ -1417,7 +1417,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactListGroupRoot": { "name": "ContactListGroupRoot", @@ -1496,7 +1496,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactMailAddress": { "name": "ContactMailAddress", @@ -1546,7 +1546,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactMessengerHandle": { "name": "ContactMessengerHandle", @@ -1596,7 +1596,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactPhoneNumber": { "name": "ContactPhoneNumber", @@ -1646,7 +1646,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactPronouns": { "name": "ContactPronouns", @@ -1687,7 +1687,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactRelationship": { "name": "ContactRelationship", @@ -1737,7 +1737,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactSocialId": { "name": "ContactSocialId", @@ -1787,7 +1787,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactWebsite": { "name": "ContactWebsite", @@ -1837,7 +1837,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ConversationEntry": { "name": "ConversationEntry", @@ -1926,7 +1926,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateExternalUserGroupData": { "name": "CreateExternalUserGroupData", @@ -1985,7 +1985,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateGroupPostReturn": { "name": "CreateGroupPostReturn", @@ -2019,7 +2019,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailFolderData": { "name": "CreateMailFolderData", @@ -2089,7 +2089,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailFolderReturn": { "name": "CreateMailFolderReturn", @@ -2123,7 +2123,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailGroupData": { "name": "CreateMailGroupData", @@ -2184,7 +2184,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CustomerAccountCreateData": { "name": "CustomerAccountCreateData", @@ -2356,7 +2356,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteGroupData": { "name": "DeleteGroupData", @@ -2399,7 +2399,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteMailData": { "name": "DeleteMailData", @@ -2443,7 +2443,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteMailFolderData": { "name": "DeleteMailFolderData", @@ -2477,7 +2477,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftAttachment": { "name": "DraftAttachment", @@ -2539,7 +2539,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftCreateData": { "name": "DraftCreateData", @@ -2609,7 +2609,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftCreateReturn": { "name": "DraftCreateReturn", @@ -2643,7 +2643,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftData": { "name": "DraftData", @@ -2790,7 +2790,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftRecipient": { "name": "DraftRecipient", @@ -2831,7 +2831,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftUpdateData": { "name": "DraftUpdateData", @@ -2875,7 +2875,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftUpdateReturn": { "name": "DraftUpdateReturn", @@ -2909,7 +2909,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EmailTemplate": { "name": "EmailTemplate", @@ -3006,7 +3006,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EmailTemplateContent": { "name": "EmailTemplateContent", @@ -3047,7 +3047,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "EncryptTutanotaPropertiesData": { "name": "EncryptTutanotaPropertiesData", @@ -3099,7 +3099,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EncryptedMailAddress": { "name": "EncryptedMailAddress", @@ -3140,7 +3140,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "EntropyData": { "name": "EntropyData", @@ -3181,7 +3181,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ExternalUserData": { "name": "ExternalUserData", @@ -3314,7 +3314,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "File": { "name": "File", @@ -3449,7 +3449,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "FileSystem": { "name": "FileSystem", @@ -3528,7 +3528,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationDeleteData": { "name": "GroupInvitationDeleteData", @@ -3562,7 +3562,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPostData": { "name": "GroupInvitationPostData", @@ -3606,7 +3606,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPostReturn": { "name": "GroupInvitationPostReturn", @@ -3660,7 +3660,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPutData": { "name": "GroupInvitationPutData", @@ -3730,7 +3730,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupSettings": { "name": "GroupSettings", @@ -3770,6 +3770,16 @@ export const typeModels = { } }, "associations": { + "defaultAlarmsList": { + "final": false, + "name": "defaultAlarmsList", + "id": 1446, + "since": 74, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DefaultAlarmInfo", + "dependency": "sys" + }, "group": { "final": true, "name": "group", @@ -3782,7 +3792,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Header": { "name": "Header", @@ -3823,7 +3833,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapFolder": { "name": "ImapFolder", @@ -3884,7 +3894,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapSyncConfiguration": { "name": "ImapSyncConfiguration", @@ -3954,7 +3964,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapSyncState": { "name": "ImapSyncState", @@ -4015,7 +4025,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InboxRule": { "name": "InboxRule", @@ -4067,7 +4077,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InternalGroupData": { "name": "InternalGroupData", @@ -4191,7 +4201,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InternalRecipientKeyData": { "name": "InternalRecipientKeyData", @@ -4259,7 +4269,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "KnowledgeBaseEntry": { "name": "KnowledgeBaseEntry", @@ -4356,7 +4366,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "KnowledgeBaseEntryKeyword": { "name": "KnowledgeBaseEntryKeyword", @@ -4388,7 +4398,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ListUnsubscribeData": { "name": "ListUnsubscribeData", @@ -4440,7 +4450,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Mail": { "name": "Mail", @@ -4702,10 +4712,20 @@ export const typeModels = { "cardinality": "One", "refType": "MailAddress", "dependency": null + }, + "sets": { + "final": false, + "name": "sets", + "id": 1462, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "MailFolder", + "dependency": null } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailAddress": { "name": "MailAddress", @@ -4757,7 +4777,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailAddressProperties": { "name": "MailAddressProperties", @@ -4798,7 +4818,41 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" + }, + "MailBag": { + "name": "MailBag", + "since": 75, + "type": "AGGREGATED_TYPE", + "id": 1457, + "rootId": "CHR1dGFub3RhAAWx", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1458, + "since": 75, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mails": { + "final": true, + "name": "mails", + "id": 1459, + "since": 75, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "75" }, "MailBox": { "name": "MailBox", @@ -4874,6 +4928,26 @@ export const typeModels = { } }, "associations": { + "archivedMailBags": { + "final": false, + "name": "archivedMailBags", + "id": 1460, + "since": 75, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailBag", + "dependency": null + }, + "currentMailBag": { + "final": false, + "name": "currentMailBag", + "id": 1461, + "since": 75, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailBag", + "dependency": null + }, "folders": { "final": true, "name": "folders", @@ -4926,7 +5000,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetails": { "name": "MailDetails", @@ -5008,7 +5082,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsBlob": { "name": "MailDetailsBlob", @@ -5087,7 +5161,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsDraft": { "name": "MailDetailsDraft", @@ -5166,7 +5240,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsDraftsRef": { "name": "MailDetailsDraftsRef", @@ -5200,7 +5274,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailFolder": { "name": "MailFolder", @@ -5274,6 +5348,24 @@ export const typeModels = { "cardinality": "One", "encrypted": false }, + "isLabel": { + "final": false, + "name": "isLabel", + "id": 1454, + "since": 75, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "isMailSet": { + "final": false, + "name": "isMailSet", + "id": 1455, + "since": 75, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, "name": { "final": false, "name": "name", @@ -5285,6 +5377,16 @@ export const typeModels = { } }, "associations": { + "entries": { + "final": false, + "name": "entries", + "id": 1456, + "since": 75, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "MailSetEntry", + "dependency": null + }, "mails": { "final": true, "name": "mails", @@ -5307,7 +5409,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailFolderRef": { "name": "MailFolderRef", @@ -5341,7 +5443,68 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" + }, + "MailSetEntry": { + "name": "MailSetEntry", + "since": 75, + "type": "LIST_ELEMENT_TYPE", + "id": 1447, + "rootId": "CHR1dGFub3RhAAWn", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1451, + "since": 75, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1449, + "since": 75, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1452, + "since": 75, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1450, + "since": 75, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mail": { + "final": true, + "name": "mail", + "id": 1453, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "75" }, "MailboxGroupRoot": { "name": "MailboxGroupRoot", @@ -5462,7 +5625,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailboxProperties": { "name": "MailboxProperties", @@ -5550,7 +5713,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailboxServerProperties": { "name": "MailboxServerProperties", @@ -5609,7 +5772,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "MoveMailData": { "name": "MoveMailData", @@ -5641,6 +5804,16 @@ export const typeModels = { "refType": "Mail", "dependency": null }, + "sourceFolder": { + "final": false, + "name": "sourceFolder", + "id": 1463, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + }, "targetFolder": { "final": false, "name": "targetFolder", @@ -5653,7 +5826,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NewDraftAttachment": { "name": "NewDraftAttachment", @@ -5714,7 +5887,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsId": { "name": "NewsId", @@ -5755,7 +5928,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsIn": { "name": "NewsIn", @@ -5787,7 +5960,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsOut": { "name": "NewsOut", @@ -5821,7 +5994,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NotificationMail": { "name": "NotificationMail", @@ -5889,7 +6062,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotification": { "name": "OutOfOfficeNotification", @@ -5977,7 +6150,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotificationMessage": { "name": "OutOfOfficeNotificationMessage", @@ -6027,7 +6200,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotificationRecipientList": { "name": "OutOfOfficeNotificationRecipientList", @@ -6061,7 +6234,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "PhishingMarkerWebsocketData": { "name": "PhishingMarkerWebsocketData", @@ -6104,7 +6277,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "PhotosRef": { "name": "PhotosRef", @@ -6138,7 +6311,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReceiveInfoServiceData": { "name": "ReceiveInfoServiceData", @@ -6170,7 +6343,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "Recipients": { "name": "Recipients", @@ -6224,7 +6397,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "RemoteImapSyncInfo": { "name": "RemoteImapSyncInfo", @@ -6294,7 +6467,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReportMailPostData": { "name": "ReportMailPostData", @@ -6346,7 +6519,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReportedMailFieldMarker": { "name": "ReportedMailFieldMarker", @@ -6387,7 +6560,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SecureExternalRecipientKeyData": { "name": "SecureExternalRecipientKeyData", @@ -6491,7 +6664,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SendDraftData": { "name": "SendDraftData", @@ -6628,7 +6801,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SendDraftReturn": { "name": "SendDraftReturn", @@ -6690,7 +6863,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SharedGroupData": { "name": "SharedGroupData", @@ -6794,7 +6967,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SpamResults": { "name": "SpamResults", @@ -6828,7 +7001,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Subfiles": { "name": "Subfiles", @@ -6862,7 +7035,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SymEncInternalRecipientKeyData": { "name": "SymEncInternalRecipientKeyData", @@ -6923,7 +7096,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "TemplateGroupRoot": { "name": "TemplateGroupRoot", @@ -7012,7 +7185,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "TranslationGetIn": { "name": "TranslationGetIn", @@ -7044,7 +7217,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "TranslationGetOut": { "name": "TranslationGetOut", @@ -7085,7 +7258,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "TutanotaProperties": { "name": "TutanotaProperties", @@ -7274,7 +7447,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UpdateMailFolderData": { "name": "UpdateMailFolderData", @@ -7318,7 +7491,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAccountCreateData": { "name": "UserAccountCreateData", @@ -7371,7 +7544,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAccountUserData": { "name": "UserAccountUserData", @@ -7592,7 +7765,7 @@ export const typeModels = { }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupData": { "name": "UserAreaGroupData", @@ -7698,7 +7871,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupDeleteData": { "name": "UserAreaGroupDeleteData", @@ -7732,7 +7905,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupPostData": { "name": "UserAreaGroupPostData", @@ -7766,7 +7939,7 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserSettingsGroupRoot": { "name": "UserSettingsGroupRoot", @@ -7872,6 +8045,6 @@ export const typeModels = { } }, "app": "tutanota", - "version": "73" + "version": "75" } } \ No newline at end of file diff --git a/src/common/api/entities/tutanota/TypeRefs.ts b/src/common/api/entities/tutanota/TypeRefs.ts index 2d15371511e0..f122347205b8 100644 --- a/src/common/api/entities/tutanota/TypeRefs.ts +++ b/src/common/api/entities/tutanota/TypeRefs.ts @@ -3,6 +3,7 @@ import {TypeRef} from "@tutao/tutanota-utils" import {typeModels} from "./TypeModels.js" import {DateWrapper} from '../sys/TypeRefs.js' import {Blob} from '../sys/TypeRefs.js' +import {DefaultAlarmInfo} from '../sys/TypeRefs.js' import {BucketKey} from '../sys/TypeRefs.js' import {BlobReferenceTokenWrapper} from '../sys/TypeRefs.js' @@ -931,6 +932,7 @@ export type GroupSettings = { color: string; name: null | string; + defaultAlarmsList: DefaultAlarmInfo[]; group: Id; } export const HeaderTypeRef: TypeRef
= new TypeRef("tutanota", "Header") @@ -1135,6 +1137,7 @@ export type Mail = { mailDetails: null | IdTuple; mailDetailsDraft: null | IdTuple; sender: MailAddress; + sets: IdTuple[]; } export const MailAddressTypeRef: TypeRef = new TypeRef("tutanota", "MailAddress") @@ -1164,6 +1167,19 @@ export type MailAddressProperties = { mailAddress: string; senderName: string; } +export const MailBagTypeRef: TypeRef = new TypeRef("tutanota", "MailBag") + +export function createMailBag(values: StrippedEntity): MailBag { + return Object.assign(create(typeModels.MailBag, MailBagTypeRef), values) +} + +export type MailBag = { + _type: TypeRef; + + _id: Id; + + mails: Id; +} export const MailBoxTypeRef: TypeRef = new TypeRef("tutanota", "MailBox") export function createMailBox(values: StrippedEntity): MailBox { @@ -1182,6 +1198,8 @@ export type MailBox = { _permissions: Id; lastInfoDate: Date; + archivedMailBags: MailBag[]; + currentMailBag: null | MailBag; folders: null | MailFolderRef; mailDetailsDrafts: null | MailDetailsDraftsRef; receivedAttachments: Id; @@ -1274,8 +1292,11 @@ export type MailFolder = { _ownerKeyVersion: null | NumberString; _permissions: Id; folderType: NumberString; + isLabel: boolean; + isMailSet: boolean; name: string; + entries: Id; mails: Id; parentFolder: null | IdTuple; } @@ -1292,6 +1313,22 @@ export type MailFolderRef = { folders: Id; } +export const MailSetEntryTypeRef: TypeRef = new TypeRef("tutanota", "MailSetEntry") + +export function createMailSetEntry(values: StrippedEntity): MailSetEntry { + return Object.assign(create(typeModels.MailSetEntry, MailSetEntryTypeRef), values) +} + +export type MailSetEntry = { + _type: TypeRef; + + _format: NumberString; + _id: IdTuple; + _ownerGroup: null | Id; + _permissions: Id; + + mail: IdTuple; +} export const MailboxGroupRootTypeRef: TypeRef = new TypeRef("tutanota", "MailboxGroupRoot") export function createMailboxGroupRoot(values: StrippedEntity): MailboxGroupRoot { @@ -1361,6 +1398,7 @@ export type MoveMailData = { _format: NumberString; mails: IdTuple[]; + sourceFolder: null | IdTuple; targetFolder: IdTuple; } export const NewDraftAttachmentTypeRef: TypeRef = new TypeRef("tutanota", "NewDraftAttachment") diff --git a/src/common/api/worker/facades/lazy/MailFacade.ts b/src/common/api/worker/facades/lazy/MailFacade.ts index 535418a460cc..5420b65c2025 100644 --- a/src/common/api/worker/facades/lazy/MailFacade.ts +++ b/src/common/api/worker/facades/lazy/MailFacade.ts @@ -101,7 +101,7 @@ import { BlobFacade } from "./BlobFacade.js" import { assertWorkerOrNode, isApp, isDesktop } from "../../../common/Env.js" import { EntityClient } from "../../../common/EntityClient.js" import { getEnabledMailAddressesForGroupInfo, getUserGroupMemberships } from "../../../common/utils/GroupUtils.js" -import { containsId, elementIdPart, getLetId, isSameId, listIdPart, stringToCustomId } from "../../../common/utils/EntityUtils.js" +import { containsId, elementIdPart, getElementId, getLetId, isSameId, listIdPart, stringToCustomId } from "../../../common/utils/EntityUtils.js" import { htmlToText } from "../../search/IndexUtils.js" import { MailBodyTooLargeError } from "../../../common/error/MailBodyTooLargeError.js" import { UNCOMPRESSED_MAX_SIZE } from "../../Compression.js" @@ -349,8 +349,8 @@ export class MailFacade { return deferredUpdatePromiseWrapper.promise } - async moveMails(mails: IdTuple[], targetFolder: IdTuple): Promise { - await this.serviceExecutor.post(MoveMailService, createMoveMailData({ mails, targetFolder })) + async moveMails(mails: IdTuple[], sourceFolder: IdTuple, targetFolder: IdTuple): Promise { + await this.serviceExecutor.post(MoveMailService, createMoveMailData({ mails, sourceFolder, targetFolder })) } async reportMail(mail: Mail, reportType: MailReportType): Promise { @@ -644,11 +644,12 @@ export class MailFacade { await this.serviceExecutor.delete(MailFolderService, deleteMailFolderData, { sessionKey: "dummy" as any }) } - async fixupCounterForMailList(groupId: Id, listId: Id, unreadMails: number): Promise { + async fixupCounterForFolder(groupId: Id, folder: MailFolder, unreadMails: number): Promise { + const counterId = folder.isMailSet ? getElementId(folder) : folder.mails const data = createWriteCounterData({ counterType: CounterType.UnreadMails, row: groupId, - column: listId, + column: counterId, value: String(unreadMails), }) await this.serviceExecutor.post(CounterService, data) diff --git a/src/common/api/worker/offline/OfflineStorage.ts b/src/common/api/worker/offline/OfflineStorage.ts index 6315b54290fe..afbf7562573a 100644 --- a/src/common/api/worker/offline/OfflineStorage.ts +++ b/src/common/api/worker/offline/OfflineStorage.ts @@ -30,6 +30,7 @@ import { TokenOrNestedTokens } from "cborg/interface" import { CalendarEventTypeRef, FileTypeRef, + MailBoxTypeRef, MailDetailsBlobTypeRef, MailDetailsDraftTypeRef, MailFolderTypeRef, @@ -248,6 +249,20 @@ export class OfflineStorage implements CacheStorage, ExposedCacheStorage { return result?.entity ? this.deserialize(typeRef, result.entity.value as Uint8Array) : null } + async provideMultiple(typeRef: TypeRef, listId: Id, elementIds: Id[]): Promise> { + if (elementIds.length === 0) return [] + const type = getTypeId(typeRef) + const serializedList: ReadonlyArray> = await this.allChunked( + MAX_SAFE_SQL_VARS - 2, + elementIds, + (c) => sql`SELECT entity FROM list_entities WHERE type = ${type} AND listId = ${listId} AND elementId IN ${paramList(c)}`, + ) + return this.deserializeList( + typeRef, + serializedList.map((r) => r.entity.value as Uint8Array), + ) + } + async getIdsInRange(typeRef: TypeRef, listId: Id): Promise> { const type = getTypeId(typeRef) const range = await this.getRange(type, listId) @@ -487,14 +502,25 @@ AND NOT(${firstIdBigger("elementId", upper)})` // lead to an overflow in our 42 bit timestamp in the id. const cutoffTimestamp = now - timeRangeMillisSafe const cutoffId = timestampToGeneratedId(cutoffTimestamp) - const folders = await this.getListElementsOfType(MailFolderTypeRef) - const folderSystem = new FolderSystem(folders) - - for (const folder of folders) { - if (isSpamOrTrashFolder(folderSystem, folder)) { - await this.deleteMailList(folder.mails, GENERATED_MAX_ID) + const mailBoxes = await this.getElementsOfType(MailBoxTypeRef) + for (const mailBox of mailBoxes) { + const isMailsetMigrated = mailBox.currentMailBag != null + if (isMailsetMigrated) { + var mailListIds = [mailBox.currentMailBag!, ...mailBox.archivedMailBags].map((mailbag) => mailbag.mails) + for (const mailListId of mailListIds) { + await this.deleteMailList(mailListId, cutoffId) + } } else { - await this.deleteMailList(folder.mails, cutoffId) + const folders = await this.getWholeList(MailFolderTypeRef, mailBox.folders!.folders) + + const folderSystem = new FolderSystem(folders) + for (const folder of folders) { + if (isSpamOrTrashFolder(folderSystem, folder)) { + await this.deleteMailList(folder.mails, GENERATED_MAX_ID) + } else { + await this.deleteMailList(folder.mails, cutoffId) + } + } } } } @@ -684,6 +710,23 @@ AND NOT(${firstIdBigger("elementId", upper)})` await this.sqlCipherFacade.run(formattedQuery.query, formattedQuery.params) } } + + /** + * convenience method to execute a potentially too large query over several chunks. + * chunkSize must be chosen such that the total number of SQL variables in the final query does not exceed MAX_SAFE_SQL_VARS + * */ + private async allChunked( + chunkSize: number, + originalList: SqlValue[], + formatter: (chunk: SqlValue[]) => FormattedQuery, + ): Promise>> { + const result: Array> = [] + for (const chunk of splitInChunks(chunkSize, originalList)) { + const formattedQuery = formatter(chunk) + result.push(...(await this.sqlCipherFacade.all(formattedQuery.query, formattedQuery.params))) + } + return result + } } /* diff --git a/src/common/api/worker/offline/OfflineStorageMigrator.ts b/src/common/api/worker/offline/OfflineStorageMigrator.ts index c415277d3bf0..ddb077380047 100644 --- a/src/common/api/worker/offline/OfflineStorageMigrator.ts +++ b/src/common/api/worker/offline/OfflineStorageMigrator.ts @@ -25,6 +25,8 @@ import { tutanota73 } from "./migrations/tutanota-v73.js" import { sys104 } from "./migrations/sys-v104.js" import { sys105 } from "./migrations/sys-v105.js" import { sys106 } from "./migrations/sys-v106.js" +import { tutanota74 } from "./migrations/tutanota-v74.js" +import { sys107 } from "./migrations/sys-v107.js" export interface OfflineMigration { readonly app: VersionMetadataBaseKey @@ -61,6 +63,8 @@ export const OFFLINE_STORAGE_MIGRATIONS: ReadonlyArray = [ sys104, sys105, sys106, + tutanota74, + sys107, ] const CURRENT_OFFLINE_VERSION = 1 diff --git a/src/common/api/worker/offline/migrations/sys-v107.ts b/src/common/api/worker/offline/migrations/sys-v107.ts new file mode 100644 index 000000000000..64022489c526 --- /dev/null +++ b/src/common/api/worker/offline/migrations/sys-v107.ts @@ -0,0 +1,10 @@ +import { OfflineMigration } from "../OfflineStorageMigrator.js" +import { OfflineStorage } from "../OfflineStorage.js" + +export const sys107: OfflineMigration = { + app: "sys", + version: 107, + async migrate(storage: OfflineStorage) { + // only changes data transfer type + }, +} diff --git a/src/common/api/worker/offline/migrations/tutanota-v74.ts b/src/common/api/worker/offline/migrations/tutanota-v74.ts new file mode 100644 index 000000000000..7566b822d23a --- /dev/null +++ b/src/common/api/worker/offline/migrations/tutanota-v74.ts @@ -0,0 +1,16 @@ +import { OfflineMigration } from "../OfflineStorageMigrator.js" +import { OfflineStorage } from "../OfflineStorage.js" +import { addValue, migrateAllElements, migrateAllListElements } from "../StandardMigrations.js" +import { createMail, createMailBox, MailBoxTypeRef, MailFolderTypeRef, MailTypeRef } from "../../../entities/tutanota/TypeRefs.js" +import { GENERATED_MIN_ID } from "../../../common/utils/EntityUtils.js" + +export const tutanota74: OfflineMigration = { + app: "tutanota", + version: 74, + async migrate(storage: OfflineStorage) { + // the TutanotaModelV75 introduces MailSets to support import and labels + await migrateAllListElements(MailFolderTypeRef, storage, [addValue("isLabel", "0"), addValue("isMailSet", "0"), addValue("entries", GENERATED_MIN_ID)]) + await migrateAllElements(MailBoxTypeRef, storage, [createMailBox]) // initialize mailbags + await migrateAllListElements(MailTypeRef, storage, [createMail]) // initialize sets + }, +} diff --git a/src/common/api/worker/rest/CacheStorageProxy.ts b/src/common/api/worker/rest/CacheStorageProxy.ts index 64a7759bb03c..e59dce173686 100644 --- a/src/common/api/worker/rest/CacheStorageProxy.ts +++ b/src/common/api/worker/rest/CacheStorageProxy.ts @@ -133,6 +133,10 @@ export class LateInitializedCacheStorageImpl implements CacheStorageLateInitiali return this.inner.provideFromRange(typeRef, listId, start, count, reverse) } + provideMultiple(typeRef: TypeRef, listId: string, elementIds: string[]): Promise { + return this.inner.provideMultiple(typeRef, listId, elementIds) + } + getWholeList(typeRef: TypeRef, listId: Id): Promise> { return this.inner.getWholeList(typeRef, listId) } diff --git a/src/common/api/worker/rest/DefaultEntityRestCache.ts b/src/common/api/worker/rest/DefaultEntityRestCache.ts index bf1861ba711f..8902d95854a0 100644 --- a/src/common/api/worker/rest/DefaultEntityRestCache.ts +++ b/src/common/api/worker/rest/DefaultEntityRestCache.ts @@ -115,6 +115,11 @@ export interface ExposedCacheStorage { */ provideFromRange(typeRef: TypeRef, listId: Id, start: Id, count: number, reverse: boolean): Promise + /** + * Load a set of list element entities by id. Missing elements are not returned, no error is thrown. + */ + provideMultiple(typeRef: TypeRef, listId: Id, elementIds: Id[]): Promise> + /** * retrieve all list elements that are in the cache * @param typeRef diff --git a/src/common/api/worker/rest/EphemeralCacheStorage.ts b/src/common/api/worker/rest/EphemeralCacheStorage.ts index 2c42b62ce580..3a511ba999fa 100644 --- a/src/common/api/worker/rest/EphemeralCacheStorage.ts +++ b/src/common/api/worker/rest/EphemeralCacheStorage.ts @@ -222,6 +222,19 @@ export class EphemeralCacheStorage implements CacheStorage { return result } + async provideMultiple(typeRef: TypeRef, listId: Id, elementIds: Id[]): Promise> { + const listCache = this.lists.get(typeRefToPath(typeRef))?.get(listId) + + if (listCache == null) { + return [] + } + let result: T[] = [] + for (let a = 0; a < elementIds.length; a++) { + result.push(clone(listCache.elements.get(elementIds[a]) as T)) + } + return result + } + async getRangeForList(typeRef: TypeRef, listId: Id): Promise<{ lower: Id; upper: Id } | null> { const listCache = this.lists.get(typeRefToPath(typeRef))?.get(listId) diff --git a/src/common/api/worker/search/Indexer.ts b/src/common/api/worker/search/Indexer.ts index 7263838b4fb3..3524a1d784c2 100644 --- a/src/common/api/worker/search/Indexer.ts +++ b/src/common/api/worker/search/Indexer.ts @@ -323,7 +323,6 @@ export class Indexer { const transaction = await this.db.dbFacade.createTransaction(false, [MetaDataOS, GroupDataOS]) await transaction.put(MetaDataOS, Metadata.userEncDbKey, userEncDbKey.key) await transaction.put(MetaDataOS, Metadata.mailIndexingEnabled, this._mail.mailIndexingEnabled) - await transaction.put(MetaDataOS, Metadata.excludedListIds, this._mail._excludedListIds) await transaction.put(MetaDataOS, Metadata.encDbIv, aes256EncryptSearchIndexEntry(this.db.key, this.db.iv)) await transaction.put(MetaDataOS, Metadata.userGroupKeyVersion, userEncDbKey.encryptingKeyVersion) await transaction.put(MetaDataOS, Metadata.lastEventIndexTimeMs, this._entityRestClient.getRestClient().getServerTimestampMs()) @@ -336,7 +335,6 @@ export class Indexer { this.db.key = decryptKey(userGroupKey, metaData.userEncDbKey) this.db.iv = unauthenticatedAesDecrypt(this.db.key, neverNull(metaData.encDbIv), true) this._mail.mailIndexingEnabled = metaData.mailIndexingEnabled - this._mail._excludedListIds = metaData.excludedListIds const groupDiff = await this._loadGroupDiff(user) await this._updateGroups(user, groupDiff) await this._mail.updateCurrentIndexTimestamp(user) diff --git a/src/common/api/worker/search/MailIndexer.ts b/src/common/api/worker/search/MailIndexer.ts index 421d71a9acaa..a1897f0e75cd 100644 --- a/src/common/api/worker/search/MailIndexer.ts +++ b/src/common/api/worker/search/MailIndexer.ts @@ -1,4 +1,4 @@ -import { FULL_INDEXED_TIMESTAMP, MailFolderType, MailState, NOTHING_INDEXED_TIMESTAMP, OperationType } from "../../common/TutanotaConstants" +import { FULL_INDEXED_TIMESTAMP, MailSetKind, MailState, NOTHING_INDEXED_TIMESTAMP, OperationType } from "../../common/TutanotaConstants" import type { File as TutanotaFile, Mail, MailBox, MailDetails, MailFolder } from "../../entities/tutanota/TypeRefs.js" import { FileTypeRef, @@ -55,7 +55,6 @@ export class MailIndexer { mailboxIndexingPromise: Promise isIndexing: boolean = false _indexingCancelled: boolean - _excludedListIds: Id[] _core: IndexerCore _db: Db _entityRestClient: EntityRestClient @@ -82,7 +81,6 @@ export class MailIndexer { this.mailIndexingEnabled = false this.mailboxIndexingPromise = Promise.resolve() this._indexingCancelled = false - this._excludedListIds = [] this._entityRestClient = entityRestClient this._dateProvider = dateProvider } @@ -146,10 +144,6 @@ export class MailIndexer { mail: Mail keyToIndexEntries: Map } | null> { - if (this._isExcluded(event)) { - return Promise.resolve(null) - } - return this._defaultCachingEntity .load(MailTypeRef, [event.instanceListId, event.instanceId]) .then(async (mail) => { @@ -213,14 +207,10 @@ export class MailIndexer { return this._db.dbFacade.createTransaction(true, [ElementDataOS]).then((transaction) => { return transaction.get(ElementDataOS, encInstanceId).then((elementData) => { if (elementData) { - if (this._isExcluded(event)) { - return this._core._processDeleted(event, indexUpdate) // move to spam folder - } else { - indexUpdate.move.push({ - encInstanceId, - newListId: event.instanceListId, - }) - } + indexUpdate.move.push({ + encInstanceId, + newListId: event.instanceListId, + }) } else { // instance is moved but not yet indexed: handle as new for example moving a mail from non indexed folder like spam to indexed folder return this.processNewMail(event).then((result) => { @@ -233,42 +223,34 @@ export class MailIndexer { }) } - enableMailIndexing(user: User): Promise { - return this._db.dbFacade.createTransaction(true, [MetaDataOS]).then((t) => { - return t.get(MetaDataOS, Metadata.mailIndexingEnabled).then((enabled) => { - if (!enabled) { - return promiseMap(filterMailMemberships(user), (mailGroupMembership) => this._getSpamFolder(mailGroupMembership)).then((spamFolders) => { - this._excludedListIds = spamFolders.map((folder) => folder.mails) - this.mailIndexingEnabled = true - return this._db.dbFacade.createTransaction(false, [MetaDataOS]).then((t2) => { - t2.put(MetaDataOS, Metadata.mailIndexingEnabled, true) - t2.put(MetaDataOS, Metadata.excludedListIds, this._excludedListIds) - - // create index in background, termination is handled in Indexer.enableMailIndexing - const oldestTimestamp = this._dateProvider.getStartOfDayShiftedBy(-INITIAL_MAIL_INDEX_INTERVAL_DAYS).getTime() - - this.indexMailboxes(user, oldestTimestamp).catch( - ofClass(CancelledError, (e) => { - console.log("cancelled initial indexing", e) - }), - ) - return t2.wait() - }) - }) - } else { - return t.get(MetaDataOS, Metadata.excludedListIds).then((excludedListIds) => { - this.mailIndexingEnabled = true - this._excludedListIds = excludedListIds || [] - }) - } + async enableMailIndexing(user: User): Promise { + const t = await this._db.dbFacade.createTransaction(true, [MetaDataOS]) + const enabled = await t.get(MetaDataOS, Metadata.mailIndexingEnabled) + if (!enabled) { + this.mailIndexingEnabled = true + const t2 = await this._db.dbFacade.createTransaction(false, [MetaDataOS]) + t2.put(MetaDataOS, Metadata.mailIndexingEnabled, true) + t2.put(MetaDataOS, Metadata.excludedListIds, []) + + // create index in background, termination is handled in Indexer.enableMailIndexing + const oldestTimestamp = this._dateProvider.getStartOfDayShiftedBy(-INITIAL_MAIL_INDEX_INTERVAL_DAYS).getTime() + + this.indexMailboxes(user, oldestTimestamp).catch( + ofClass(CancelledError, (e) => { + console.log("cancelled initial indexing", e) + }), + ) + return t2.wait() + } else { + return t.get(MetaDataOS, Metadata.excludedListIds).then((excludedListIds) => { + this.mailIndexingEnabled = true }) - }) + } } disableMailIndexing(userId: Id): Promise { this.mailIndexingEnabled = false this._indexingCancelled = true - this._excludedListIds = [] return this._db.dbFacade.deleteDatabase(b64UserIdHash(userId)) } @@ -580,24 +562,17 @@ export class MailIndexer { }) } - _isExcluded(event: EntityUpdate): boolean { - return this._excludedListIds.indexOf(event.instanceListId) !== -1 - } - /** - * Provides all non-excluded mail list ids of the given mailbox + * Provides all mail list ids of the given mailbox */ async _loadMailListIds(mailbox: MailBox): Promise { - const folders = await this._defaultCachingEntity.loadAll(MailFolderTypeRef, neverNull(mailbox.folders).folders) - const mailListIds: Id[] = [] - - for (const folder of folders) { - if (!this._excludedListIds.includes(folder.mails)) { - mailListIds.push(folder.mails) - } + const isMailsetMigrated = mailbox.currentMailBag != null + if (isMailsetMigrated) { + return [mailbox.currentMailBag!, ...mailbox.archivedMailBags].map((mailbag) => mailbag.mails) + } else { + const folders = await this._defaultCachingEntity.loadAll(MailFolderTypeRef, neverNull(mailbox.folders).folders) + return folders.map((f) => f.mails) } - - return mailListIds } _getSpamFolder(mailGroup: GroupMembership): Promise { @@ -607,7 +582,7 @@ export class MailIndexer { .then((mbox) => { return this._defaultCachingEntity .loadAll(MailFolderTypeRef, neverNull(mbox.folders).folders) - .then((folders) => neverNull(folders.find((folder) => folder.folderType === MailFolderType.SPAM))) + .then((folders) => neverNull(folders.find((folder) => folder.folderType === MailSetKind.SPAM))) }) } diff --git a/src/common/api/worker/search/SearchFacade.ts b/src/common/api/worker/search/SearchFacade.ts index f489943a6de3..a551d019bc97 100644 --- a/src/common/api/worker/search/SearchFacade.ts +++ b/src/common/api/worker/search/SearchFacade.ts @@ -1,7 +1,6 @@ import { MailTypeRef } from "../../entities/tutanota/TypeRefs.js" import { DbTransaction } from "./DbFacade" import { resolveTypeReference } from "../../common/EntityFunctions" -import type { PromiseMapFn } from "@tutao/tutanota-utils" import { arrayHash, asyncFind, @@ -9,11 +8,13 @@ import { downcast, getDayShifted, getStartOfDay, + isNotEmpty, isNotNull, isSameTypeRef, neverNull, promiseMap, promiseMapCompat, + PromiseMapFn, tokenize, TypeRef, uint8ArrayToBase64, @@ -47,7 +48,7 @@ import { typeRefToTypeInfo, } from "./IndexUtils" import { FULL_INDEXED_TIMESTAMP, NOTHING_INDEXED_TIMESTAMP } from "../../common/TutanotaConstants" -import { compareNewestFirst, firstBiggerThanSecond, timestampToGeneratedId } from "../../common/utils/EntityUtils" +import { compareNewestFirst, elementIdPart, firstBiggerThanSecond, getListId, timestampToGeneratedId } from "../../common/utils/EntityUtils" import { INITIAL_MAIL_INDEX_INTERVAL_DAYS, MailIndexer } from "./MailIndexer" import { SuggestionFacade } from "./SuggestionFacade" import { AssociationType, Cardinality, ValueType } from "../../common/EntityConstants.js" @@ -490,7 +491,6 @@ export class SearchFacade { * Reduces the search result by filtering out all mailIds that don't match all search tokens */ _filterByEncryptedId(results: KeyToEncryptedIndexEntries[]): KeyToEncryptedIndexEntries[] { - // let matchingEncIds = null let matchingEncIds: Set | null = null for (const keyToEncryptedIndexEntry of results) { if (matchingEncIds == null) { @@ -626,37 +626,62 @@ export class SearchFacade { // Use separate array to only sort new results and not all of them. return this._db.dbFacade .createTransaction(true, [ElementDataOS]) - .then( - ( - transaction, // As an attempt to optimize search we look for items in parallel. Promise.map iterates in arbitrary order! - ) => - // BUT! we have to look at all of them! Otherwise we may return them in the wrong order. We cannot return elements 10, 15, 20 if we didn't - // return element 5 first, no one will ask for it later. - // The best thing performance-wise would be to split into chunks of certain length and process them in parallel and stop after certain chunk. - promiseMap( - indexEntries.slice(0, maxResults || indexEntries.length + 1), - (entry, index) => { - return transaction.get(ElementDataOS, uint8ArrayToBase64(entry.encId)).then((elementData: ElementDataDbRow | null) => { - // mark result index id as processed to not query result in next load more operation - entriesCopy[index] = null - - if ( - elementData && - (!(searchResult.restriction.listIds.length > 0) || searchResult.restriction.listIds.includes(elementData[0])) - ) { - return [elementData[0], entry.id] as IdTuple - } - + .then((transaction) => + // As an attempt to optimize search we look for items in parallel. Promise.map iterates in arbitrary order! + // BUT! we have to look at all of them! Otherwise, we may return them in the wrong order. + // We cannot return elements 10, 15, 20 if we didn't return element 5 first, no one will ask for it later. + // The best thing performance-wise would be to split into chunks of certain length and process them in parallel and stop after certain chunk. + promiseMap( + indexEntries.slice(0, maxResults || indexEntries.length + 1), + async (entry, index) => { + return transaction.get(ElementDataOS, uint8ArrayToBase64(entry.encId)).then((elementData: ElementDataDbRow | null) => { + // mark result index id as processed to not query result in next load more operation + entriesCopy[index] = null + + if (elementData) { + return [elementData[0], entry.id] as IdTuple + } else { return null - }) - }, - { - concurrency: 5, - }, - ), + } + }) + }, + { + concurrency: 5, + }, + ), ) + .then((intermediateResults) => intermediateResults.filter(isNotNull)) + .then(async (intermediateResults) => { + // apply folder restrictions to intermediateResults + + if (!(searchResult.restriction.folderIds.length > 0)) { + // no folder restrictions (ALL) + return intermediateResults + } else { + // some folder restrictions (e.g. INBOX) + + // With the new mailSet architecture (static mail lists) we need to load every mail + // in order to check in which mailSet (folder) a mail is included in. + const mails = await Promise.all( + intermediateResults.map((intermediateResultId) => this._entityClient.load(MailTypeRef, intermediateResultId)), + ) + return mails + .filter((mail) => { + let folderIds: Array + if (isNotEmpty(mail.sets)) { + // new mailSet folders + folderIds = mail.sets.map((setId) => elementIdPart(setId)) + } else { + // legacy mail folder (mail list) + folderIds = [getListId(mail)] + } + return folderIds.some((folderId) => searchResult.restriction.folderIds.includes(folderId)) + }) + .map((mail) => mail._id) + } + }) .then((newResults) => { - searchResult.results.push(...(newResults.filter(isNotNull) as IdTuple[])) + searchResult.results.push(...(newResults as IdTuple[])) searchResult.moreResults = entriesCopy.filter(isNotNull) }) } diff --git a/src/common/api/worker/search/SearchTypes.ts b/src/common/api/worker/search/SearchTypes.ts index fea75a404972..3e48c4ad2591 100644 --- a/src/common/api/worker/search/SearchTypes.ts +++ b/src/common/api/worker/search/SearchTypes.ts @@ -129,8 +129,8 @@ export type SearchRestriction = { field: string | null // must be kept in sync with attributeIds attributeIds: number[] | null - // if empty, match anything. otherwise it's an OR-match. - listIds: Array + // list of locations (calendars, folders, labels to search). if empty, match anything. otherwise it's an OR-match. + folderIds: Array // if true, include repeating events in the search eventSeries: boolean | null } diff --git a/src/common/mailFunctionality/MailModel.ts b/src/common/mailFunctionality/MailModel.ts index b531b19b03c1..112de81cc80b 100644 --- a/src/common/mailFunctionality/MailModel.ts +++ b/src/common/mailFunctionality/MailModel.ts @@ -10,6 +10,7 @@ import { MailBoxTypeRef, MailFolder, MailFolderTypeRef, + MailSetEntryTypeRef, MailTypeRef, } from "../api/entities/tutanota/TypeRefs.js" import { Group, GroupInfo, GroupInfoTypeRef, GroupMembership, GroupTypeRef, WebsocketCounterData } from "../api/entities/sys/TypeRefs.js" @@ -23,18 +24,18 @@ import { EntityClient } from "../api/common/EntityClient.js" import { LoginController } from "../api/main/LoginController.js" import { WebsocketConnectivityModel } from "../misc/WebsocketConnectivityModel.js" import { InboxRuleHandler } from "../../mail-app/mail/model/InboxRuleHandler.js" -import { assertNotNull, groupBy, lazyMemoized, neverNull, noOp, ofClass, promiseMap, splitInChunks } from "@tutao/tutanota-utils" +import { assertNotNull, first, groupBy, isNotEmpty, lazyMemoized, neverNull, noOp, ofClass, promiseMap, splitInChunks } from "@tutao/tutanota-utils" import { FeatureType, - MailFolderType, MailReportType, + MailSetKind, MAX_NBR_MOVE_DELETE_MAIL_SERVICE, OperationType, ReportMovedMailsType, } from "../api/common/TutanotaConstants.js" import { assertSystemFolderOfType, getEnabledMailAddressesWithUser } from "./SharedMailUtils.js" import { LockedError, NotFoundError, PreconditionFailedError } from "../api/common/error/RestError.js" -import { elementIdPart, GENERATED_MAX_ID, getElementId, getListId, isSameId, listIdPart } from "../api/common/utils/EntityUtils.js" +import { CUSTOM_MIN_ID, elementIdPart, GENERATED_MAX_ID, getElementId, getListId, isSameId } from "../api/common/utils/EntityUtils.js" import { containsEventOfType, EntityUpdateData, isUpdateForTypeRef } from "../api/common/utils/EntityUpdateUtils.js" import m from "mithril" import { lang } from "../misc/LanguageViewModel.js" @@ -130,12 +131,10 @@ export class MailModel { return this.entityClient.loadAll(MailFolderTypeRef, folderListId).then((folders) => { return folders.filter((f) => { // We do not show spam or archive for external users - if (!this.logins.isInternalUserLoggedIn() && (f.folderType === MailFolderType.SPAM || f.folderType === MailFolderType.ARCHIVE)) { - return false - } else if (this.logins.isEnabled(FeatureType.InternalCommunication) && f.folderType === MailFolderType.SPAM) { + if (!this.logins.isInternalUserLoggedIn() && (f.folderType === MailSetKind.SPAM || f.folderType === MailSetKind.ARCHIVE)) { return false } else { - return true + return !(this.logins.isEnabled(FeatureType.InternalCommunication) && f.folderType === MailSetKind.SPAM) } }) }) @@ -163,15 +162,20 @@ export class MailModel { } } - getMailboxDetailsForMail(mail: Mail): Promise { - return this.getMailboxDetailsForMailListId(mail._id[0]) + async getMailboxDetailsForMail(mail: Mail): Promise { + const mailboxDetails = await this.getMailboxDetails() + const detail = mailboxDetails.find((md) => md.folders.getFolderByMail(mail)) ?? null + if (detail == null) { + console.warn("Mailbox detail for mail does not exist", mail) + } + return detail } - async getMailboxDetailsForMailListId(mailListId: Id): Promise { + async getMailboxDetailsForMailFolder(mailFolder: MailFolder): Promise { const mailboxDetails = await this.getMailboxDetails() - const detail = mailboxDetails.find((md) => md.folders.getFolderByMailListId(mailListId)) ?? null + const detail = mailboxDetails.find((md) => md.folders.getFolderById(getElementId(mailFolder))) ?? null if (detail == null) { - console.warn("Mailbox detail for mail list does not exist", mailListId) + console.warn("Mailbox detail for mail folder does not exist", mailFolder) } return detail } @@ -180,30 +184,36 @@ export class MailModel { const mailboxDetails = await this.getMailboxDetails() return assertNotNull( mailboxDetails.find((md) => mailGroupId === md.mailGroup._id), - "No mailbox details for mail group", + "Mailbox detail for mail group does not exist", ) } async getUserMailboxDetails(): Promise { const userMailGroupMembership = this.logins.getUserController().getUserMailGroupMembership() const mailboxDetails = await this.getMailboxDetails() - return assertNotNull(mailboxDetails.find((md) => md.mailGroup._id === userMailGroupMembership.group)) + return assertNotNull( + mailboxDetails.find((md) => md.mailGroup._id === userMailGroupMembership.group), + "Mailbox detail for user does not exist", + ) } - getMailboxFolders(mail: Mail): Promise { + async getMailboxFolders(mail: Mail): Promise { return this.getMailboxDetailsForMail(mail).then((md) => md && md.folders) } - getMailFolder(mailListId: Id): MailFolder | null { + getMailFolderForMail(mail: Mail): MailFolder | null { const mailboxDetails = this.mailboxDetails() || [] + let foundFolder: MailFolder | null = null for (let detail of mailboxDetails) { - const f = detail.folders.getFolderByMailListId(mailListId) - if (f) { - return f + if (isNotEmpty(mail.sets)) { + foundFolder = detail.folders.getFolderById(elementIdPart(mail.sets[0])) + } else { + foundFolder = detail.folders.getFolderByMail(mail) } - } + if (foundFolder != null) return foundFolder + } return null } @@ -211,14 +221,14 @@ export class MailModel { * Sends the given folder and all its descendants to the spam folder, reporting mails (if applicable) and removes any empty folders */ async sendFolderToSpam(folder: MailFolder): Promise { - const mailboxDetail = await this.getMailboxDetailsForMailListId(folder.mails) + const mailboxDetail = await this.getMailboxDetailsForMailFolder(folder) if (mailboxDetail == null) { return } let deletedFolder = await this.removeAllEmpty(mailboxDetail, folder) if (!deletedFolder) { - return this.mailFacade.updateMailFolderParent(folder, assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.SPAM)._id) + return this.mailFacade.updateMailFolderParent(folder, assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.SPAM)._id) } } @@ -229,13 +239,14 @@ export class MailModel { } /** - * Finally deletes all given mails. Caller must ensure that mails are only from one folder + * Finally move all given mails. Caller must ensure that mails are only from + * * one folder (because we send one source folder) + * * from one list (for locking it on the server) */ async _moveMails(mails: Mail[], targetMailFolder: MailFolder): Promise { - let moveMails = mails.filter((m) => m._id[0] !== targetMailFolder.mails && targetMailFolder._ownerGroup === m._ownerGroup) // prevent moving mails between mail boxes. - // Do not move if target is the same as the current mailFolder - const sourceMailFolder = this.getMailFolder(getListId(mails[0])) + const sourceMailFolder = this.getMailFolderForMail(mails[0]) + let moveMails = mails.filter((m) => sourceMailFolder !== targetMailFolder && targetMailFolder._ownerGroup === m._ownerGroup) // prevent moving mails between mail boxes. if (moveMails.length > 0 && sourceMailFolder && !isSameId(targetMailFolder._id, sourceMailFolder._id)) { const mailChunks = splitInChunks( @@ -244,7 +255,7 @@ export class MailModel { ) for (const mailChunk of mailChunks) { - await this.mailFacade.moveMails(mailChunk, targetMailFolder._id) + await this.mailFacade.moveMails(mailChunk, sourceMailFolder._id, targetMailFolder._id) } } } @@ -255,16 +266,20 @@ export class MailModel { */ async moveMails(mails: ReadonlyArray, targetMailFolder: MailFolder): Promise { const mailsPerFolder = groupBy(mails, (mail) => { - return getListId(mail) + return isNotEmpty(mail.sets) ? elementIdPart(mail.sets[0]) : getListId(mail) }) - for (const [listId, mails] of mailsPerFolder) { - const sourceMailFolder = this.getMailFolder(listId) + for (const [folderId, mailsInFolder] of mailsPerFolder) { + const sourceMailFolder = this.getMailFolderForMail(mailsInFolder[0]) if (sourceMailFolder) { - await this._moveMails(mails, targetMailFolder) + // group another time because mails in the same Set can be from different mail bags. + const mailsPerList = groupBy(mailsInFolder, (mail) => getListId(mail)) + for (const [listId, mailsInList] of mailsPerList) { + await this._moveMails(mailsInList, targetMailFolder) + } } else { - console.log("Move mail: no mail folder for list id", listId) + console.log("Move mail: no mail folder for folder id", folderId) } } } @@ -296,30 +311,34 @@ export class MailModel { * A deletion confirmation must have been show before. */ async deleteMails(mails: ReadonlyArray): Promise { - const mailsPerFolder = groupBy(mails, (mail) => { - return getListId(mail) - }) - if (mails.length === 0) { return } + + const mailsPerFolder = groupBy(mails, (mail) => { + return isNotEmpty(mail.sets) ? elementIdPart(mail.sets[0]) : getListId(mail) + }) + const folders = await this.getMailboxFolders(mails[0]) if (folders == null) { return } - const trashFolder = assertNotNull(folders.getSystemFolderByType(MailFolderType.TRASH)) - - for (const [listId, mails] of mailsPerFolder) { - const sourceMailFolder = this.getMailFolder(listId) - - if (sourceMailFolder) { - if (isSpamOrTrashFolder(folders, sourceMailFolder)) { - await this._finallyDeleteMails(mails) + const trashFolder = assertNotNull(folders.getSystemFolderByType(MailSetKind.TRASH)) + + for (const [folder, mailsInFolder] of mailsPerFolder) { + const sourceMailFolder = this.getMailFolderForMail(mailsInFolder[0]) + + const mailsPerList = groupBy(mailsInFolder, (mail) => getListId(mail)) + for (const [listId, mailsInList] of mailsPerList) { + if (sourceMailFolder) { + if (isSpamOrTrashFolder(folders, sourceMailFolder)) { + await this._finallyDeleteMails(mailsInList) + } else { + await this._moveMails(mailsInList, trashFolder) + } } else { - await this._moveMails(mails, trashFolder) + console.log("Delete mail: no mail folder for list id", folder) } - } else { - console.log("Delete mail: no mail folder for list id", listId) } } } @@ -329,7 +348,7 @@ export class MailModel { */ async _finallyDeleteMails(mails: Mail[]): Promise { if (!mails.length) return Promise.resolve() - const mailFolder = neverNull(this.getMailFolder(getListId(mails[0]))) + const mailFolder = neverNull(this.getMailFolderForMail(mails[0])) const mailIds = mails.map((m) => m._id) const mailChunks = splitInChunks(MAX_NBR_MOVE_DELETE_MAIL_SERVICE, mailIds) @@ -356,16 +375,20 @@ export class MailModel { await this._init() m.redraw() } - } else if (isUpdateForTypeRef(MailTypeRef, update) && update.operation === OperationType.CREATE) { + } else if ( + isUpdateForTypeRef(MailTypeRef, update) && + update.operation === OperationType.CREATE && + !containsEventOfType(updates, OperationType.DELETE, update.instanceId) + ) { if (this.inboxRuleHandler && this.connectivityModel) { - const folder = this.getMailFolder(update.instanceListId) + const mailId: IdTuple = [update.instanceListId, update.instanceId] + const mail = await this.entityClient.load(MailTypeRef, mailId) + const folder = this.getMailFolderForMail(mail) - if (folder && folder.folderType === MailFolderType.INBOX && !containsEventOfType(updates, OperationType.DELETE, update.instanceId)) { + if (folder && folder.folderType === MailSetKind.INBOX) { // If we don't find another delete operation on this email in the batch, then it should be a create operation, // otherwise it's a move - const mailId: IdTuple = [update.instanceListId, update.instanceId] - const mail = await this.entityClient.load(MailTypeRef, mailId) - await this.getMailboxDetailsForMailListId(update.instanceListId) + await this.getMailboxDetailsForMail(mail) .then((mailboxDetail) => { // We only apply rules on server if we are the leader in case of incoming messages return ( @@ -377,7 +400,13 @@ export class MailModel { ) ) }) - .then((newId) => this._showNotification(newId || mailId)) + .then((newFolderAndMail) => { + if (newFolderAndMail) { + this._showNotification(newFolderAndMail.folder, newFolderAndMail.mail) + } else { + this._showNotification(folder, mail) + } + }) .catch(noOp) } } @@ -389,13 +418,13 @@ export class MailModel { const normalized = this.mailboxCounters() || {} const group = normalized[counters.mailGroup] || {} for (const value of counters.counterValues) { - group[value.mailListId] = Number(value.count) || 0 + group[value.counterId] = Number(value.count) || 0 } normalized[counters.mailGroup] = group this.mailboxCounters(normalized) } - _showNotification(mailId: IdTuple) { + _showNotification(folder: MailFolder, mail: Mail) { this.notifications.showNotification( NotificationType.Mail, lang.get("newMails_msg"), @@ -403,21 +432,25 @@ export class MailModel { actions: [], }, (_) => { - m.route.set(`/mail/${listIdPart(mailId)}/${elementIdPart(mailId)}`) + m.route.set(`/mail/${getElementId(folder)}/${getElementId(mail)}`) window.focus() }, ) } - getCounterValue(listId: Id): Promise { - return this.getMailboxDetailsForMailListId(listId) + getCounterValue(folder: MailFolder): Promise { + return this.getMailboxDetailsForMailFolder(folder) .then((mailboxDetails) => { if (mailboxDetails == null) { return null } else { - const counters = this.mailboxCounters() - const mailGroupCounter = counters[mailboxDetails.mailGroup._id] - return mailGroupCounter && mailGroupCounter[listId] + const mailGroupCounter = this.mailboxCounters()[mailboxDetails.mailGroup._id] + if (mailGroupCounter) { + const counterId = folder.isMailSet ? getElementId(folder) : folder.mails + return mailGroupCounter[counterId] + } else { + return null + } } }) .catch(() => null) @@ -437,13 +470,13 @@ export class MailModel { * Sends the given folder and all its descendants to the trash folder, removes any empty folders */ async trashFolderAndSubfolders(folder: MailFolder): Promise { - const mailboxDetail = await this.getMailboxDetailsForMailListId(folder.mails) + const mailboxDetail = await this.getMailboxDetailsForMailFolder(folder) if (mailboxDetail == null) { return } let deletedFolder = await this.removeAllEmpty(mailboxDetail, folder) if (!deletedFolder) { - const trash = assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.TRASH) + const trash = assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.TRASH) return this.mailFacade.updateMailFolderParent(folder, trash._id) } } @@ -460,9 +493,8 @@ export class MailModel { // we don't update folder system quickly enough so we keep track of deleted folders here and consider them "empty" when all their children are here const deleted = new Set() for (const descendant of descendants) { - // Only load one mail, if there is even one we won't remove if ( - (await this.entityClient.loadRange(MailTypeRef, descendant.folder.mails, GENERATED_MAX_ID, 1, true)).length === 0 && + (await this.isEmptyFolder(descendant.folder)) && mailboxDetail.folders.getCustomFoldersOfParent(descendant.folder._id).every((f) => deleted.has(getElementId(f))) ) { deleted.add(getElementId(descendant.folder)) @@ -471,9 +503,8 @@ export class MailModel { someNonEmpty = true } } - // Only load one mail, if there is even one we won't remove if ( - (await this.entityClient.loadRange(MailTypeRef, folder.mails, GENERATED_MAX_ID, 1, true)).length === 0 && + (await this.isEmptyFolder(folder)) && mailboxDetail.folders.getCustomFoldersOfParent(folder._id).every((f) => deleted.has(getElementId(f))) && !someNonEmpty ) { @@ -484,8 +515,17 @@ export class MailModel { } } + // Only load one mail, if there is even one we won't remove + private async isEmptyFolder(descendant: MailFolder) { + if (descendant.isMailSet) { + return (await this.entityClient.loadRange(MailSetEntryTypeRef, descendant.entries, CUSTOM_MIN_ID, 1, false)).length === 0 + } else { + return (await this.entityClient.loadRange(MailTypeRef, descendant.mails, GENERATED_MAX_ID, 1, true)).length === 0 + } + } + public async finallyDeleteCustomMailFolder(folder: MailFolder): Promise { - if (folder.folderType !== MailFolderType.CUSTOM) { + if (folder.folderType !== MailSetKind.CUSTOM) { throw new ProgrammingError("Cannot delete non-custom folder: " + String(folder._id)) } @@ -499,9 +539,11 @@ export class MailModel { ) } - async fixupCounterForMailList(listId: Id, unreadMails: number) { - const mailboxDetails = await this.getMailboxDetailsForMailListId(listId) - mailboxDetails && (await this.mailFacade.fixupCounterForMailList(mailboxDetails.mailGroup._id, listId, unreadMails)) + async fixupCounterForFolder(folder: MailFolder, unreadMails: number) { + const mailboxDetails = await this.getMailboxDetailsForMailFolder(folder) + if (mailboxDetails) { + await this.mailFacade.fixupCounterForFolder(mailboxDetails.mailGroup._id, folder, unreadMails) + } } async clearFolder(folder: MailFolder): Promise { diff --git a/src/common/mailFunctionality/SendMailModel.ts b/src/common/mailFunctionality/SendMailModel.ts index e96936601800..26af1c6b4946 100644 --- a/src/common/mailFunctionality/SendMailModel.ts +++ b/src/common/mailFunctionality/SendMailModel.ts @@ -11,7 +11,7 @@ import { MailDetails, MailTypeRef, } from "../api/entities/tutanota/TypeRefs.js" -import { ApprovalStatus, ConversationType, MailFolderType, MailMethod, MAX_ATTACHMENT_SIZE, OperationType, ReplyType } from "../api/common/TutanotaConstants.js" +import { ApprovalStatus, ConversationType, MailSetKind, MailMethod, MAX_ATTACHMENT_SIZE, OperationType, ReplyType } from "../api/common/TutanotaConstants.js" import { PartialRecipient, Recipient, RecipientList, Recipients, RecipientType } from "../api/common/recipients/Recipient.js" import { assertNotNull, @@ -917,8 +917,8 @@ export class SendMailModel { private async isMailInTrashOrSpam(draft: Mail): Promise { const folders = await this.mailModel.getMailboxFolders(draft) - const mailFolder = folders?.getFolderByMailListId(getListId(draft)) - return !!mailFolder && (mailFolder.folderType === MailFolderType.TRASH || mailFolder.folderType === MailFolderType.SPAM) + const mailFolder = folders?.getFolderByMail(draft) + return !!mailFolder && (mailFolder.folderType === MailSetKind.TRASH || mailFolder.folderType === MailSetKind.SPAM) } private sendApprovalMail(body: string): Promise { diff --git a/src/common/mailFunctionality/SharedMailUtils.ts b/src/common/mailFunctionality/SharedMailUtils.ts index 038f20fb9ae5..10ed90de7a97 100644 --- a/src/common/mailFunctionality/SharedMailUtils.ts +++ b/src/common/mailFunctionality/SharedMailUtils.ts @@ -14,14 +14,14 @@ import { TutanotaProperties, } from "../api/entities/tutanota/TypeRefs.js" import { fullNameToFirstAndLastName, mailAddressToFirstAndLastName } from "../misc/parsing/MailAddressParser.js" -import { assertNotNull, contains, endsWith, first, neverNull } from "@tutao/tutanota-utils" +import { assertNotNull, contains, endsWith, first, isNotEmpty, neverNull } from "@tutao/tutanota-utils" import { ContactAddressType, ConversationType, EncryptionAuthStatus, getMailFolderType, GroupType, - MailFolderType, + MailSetKind, MailState, MAX_ATTACHMENT_SIZE, ReplyType, @@ -36,7 +36,7 @@ import { Icons } from "../gui/base/icons/Icons.js" import { MailboxDetail, MailModel } from "./MailModel.js" import { LoginController } from "../api/main/LoginController.js" import { EntityClient } from "../api/common/EntityClient.js" -import { getListId } from "../api/common/utils/EntityUtils.js" +import { getListId, isSameId } from "../api/common/utils/EntityUtils.js" import type { FolderSystem, IndentedFolder } from "../api/common/mail/FolderSystem.js" import { MailFacade } from "../api/worker/facades/lazy/MailFacade.js" import { ListFilter } from "../misc/ListModel.js" @@ -170,27 +170,27 @@ export function getFolderName(folder: MailFolder): string { } } -export function getFolderIconByType(folderType: MailFolderType): AllIcons { +export function getFolderIconByType(folderType: MailSetKind): AllIcons { switch (folderType) { - case MailFolderType.CUSTOM: + case MailSetKind.CUSTOM: return Icons.Folder - case MailFolderType.INBOX: + case MailSetKind.INBOX: return Icons.Inbox - case MailFolderType.SENT: + case MailSetKind.SENT: return Icons.Send - case MailFolderType.TRASH: + case MailSetKind.TRASH: return Icons.TrashBin - case MailFolderType.ARCHIVE: + case MailSetKind.ARCHIVE: return Icons.Archive - case MailFolderType.SPAM: + case MailSetKind.SPAM: return Icons.Spam - case MailFolderType.DRAFT: + case MailSetKind.DRAFT: return Icons.Draft default: @@ -368,7 +368,15 @@ export async function getMoveTargetFolderSystems(model: MailModel, mails: readon return [] } const folderSystem = mailboxDetails.folders - return folderSystem.getIndentedList().filter((f: IndentedFolder) => f.folder.mails !== getListId(firstMail)) + + return folderSystem.getIndentedList().filter((f: IndentedFolder) => { + if (f.folder.isMailSet && isNotEmpty(firstMail.sets)) { + const folderId = firstMail.sets[0] + return !isSameId(f.folder._id, folderId) + } else { + return f.folder.mails !== getListId(firstMail) + } + }) } export const MAX_FOLDER_INDENT_LEVEL = 10 @@ -459,11 +467,11 @@ export function isTutanotaMailAddress(mailAddress: string): boolean { * * Use with caution. */ -export function assertSystemFolderOfType(system: FolderSystem, type: Omit): MailFolder { +export function assertSystemFolderOfType(system: FolderSystem, type: Omit): MailFolder { return assertNotNull(system.getSystemFolderByType(type), "System folder of type does not exist!") } -export function isOfTypeOrSubfolderOf(system: FolderSystem, folder: MailFolder, type: MailFolderType): boolean { +export function isOfTypeOrSubfolderOf(system: FolderSystem, folder: MailFolder, type: MailSetKind): boolean { return folder.folderType === type || isSubfolderOfType(system, folder, type) } diff --git a/src/common/misc/ListModel.ts b/src/common/misc/ListModel.ts index 8e8886fa3644..fb7d73d9d2c7 100644 --- a/src/common/misc/ListModel.ts +++ b/src/common/misc/ListModel.ts @@ -25,20 +25,20 @@ import { ListFetchResult, PageSize } from "../gui/base/ListUtils.js" import { isOfflineError } from "../api/common/utils/ErrorUtils.js" import { ListAutoSelectBehavior } from "./DeviceConfig.js" -export interface ListModelConfig { +export interface ListModelConfig { topId: Id /** * Get the given number of entities starting after the given id. May return more elements than requested, e.g. if all elements are available on first fetch. */ - fetch(startId: Id, count: number): Promise> + fetch(startId: Id, count: number): Promise> /** * Returns null if the given element could not be loaded */ - loadSingle(elementId: Id): Promise + loadSingle(listId: Id, elementId: Id): Promise - sortCompare(entity1: ElementType, entity2: ElementType): number + sortCompare(entity1: ListElementType, entity2: ListElementType): number autoSelectBehavior: () => ListAutoSelectBehavior } @@ -197,10 +197,10 @@ export class ListModel { return this.filter != null } - async entityEventReceived(elementId: Id, operation: OperationType): Promise { + async entityEventReceived(listId: Id, elementId: Id, operation: OperationType): Promise { if (operation === OperationType.CREATE || operation === OperationType.UPDATE) { // load the element without range checks for now - const entity = await this.config.loadSingle(elementId) + const entity = await this.config.loadSingle(listId, elementId) if (!entity) { return } diff --git a/src/common/native/main/OpenMailboxHandler.ts b/src/common/native/main/OpenMailboxHandler.ts index 551c7ee1b60c..c808e7460511 100644 --- a/src/common/native/main/OpenMailboxHandler.ts +++ b/src/common/native/main/OpenMailboxHandler.ts @@ -1,15 +1,16 @@ import m from "mithril" import { locator } from "../../api/main/CommonLocator" -import { MailFolderType } from "../../api/common/TutanotaConstants.js" +import { MailSetKind } from "../../api/common/TutanotaConstants.js" import { assertSystemFolderOfType } from "../../mailFunctionality/SharedMailUtils.js" +import { getElementId } from "../../api/common/utils/EntityUtils.js" export async function openMailbox(userId: Id, mailAddress: string, requestedPath: string | null) { if (locator.logins.isUserLoggedIn() && locator.logins.getUserController().user._id === userId) { if (!requestedPath) { const [mailboxDetail] = await locator.mailModel.getMailboxDetails() - const inbox = assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.INBOX) - m.route.set("/mail/" + inbox.mails) + const inbox = assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.INBOX) + m.route.set("/mail/" + getElementId(inbox)) } else { m.route.set("/mail" + requestedPath) } diff --git a/src/common/native/main/WebMobileFacade.ts b/src/common/native/main/WebMobileFacade.ts index f36badecbbcf..0a071e510748 100644 --- a/src/common/native/main/WebMobileFacade.ts +++ b/src/common/native/main/WebMobileFacade.ts @@ -3,7 +3,7 @@ import { assertMainOrNode } from "../../api/common/Env" import { modal } from "../../gui/base/Modal" import { CALENDAR_PREFIX, CONTACTS_PREFIX, MAIL_PREFIX, SEARCH_PREFIX, SETTINGS_PREFIX } from "../../misc/RouteChange" import { last } from "@tutao/tutanota-utils" -import { CloseEventBusOption, MailFolderType, SECOND_MS } from "../../api/common/TutanotaConstants.js" +import { CloseEventBusOption, MailSetKind, SECOND_MS } from "../../api/common/TutanotaConstants.js" import { MobileFacade } from "../common/generatedipc/MobileFacade.js" import { styles } from "../../gui/styles" import { WebsocketConnectivityModel } from "../../misc/WebsocketConnectivityModel.js" @@ -12,6 +12,7 @@ import { TopLevelView } from "../../../TopLevelView.js" import stream from "mithril/stream" import { assertSystemFolderOfType } from "../../mailFunctionality/SharedMailUtils.js" +import { getElementId } from "../../api/common/utils/EntityUtils.js" assertMainOrNode() @@ -85,12 +86,12 @@ export class WebMobileFacade implements MobileFacade { .filter((part) => part !== "") if (parts.length > 1) { - const selectedMailListId = parts[1] + const selectedMailFolderId = parts[1] const [mailboxDetail] = await this.mailModel.getMailboxDetails() - const inboxMailListId = assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.INBOX).mails + const inboxMailFolderId = getElementId(assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.INBOX)) - if (inboxMailListId !== selectedMailListId) { - m.route.set(MAIL_PREFIX + "/" + inboxMailListId) + if (inboxMailFolderId !== selectedMailFolderId) { + m.route.set(MAIL_PREFIX + "/" + inboxMailFolderId) return true } else { return false diff --git a/src/common/settings/UserListView.ts b/src/common/settings/UserListView.ts index ad51bbedbaf5..dd8756f4c6c8 100644 --- a/src/common/settings/UserListView.ts +++ b/src/common/settings/UserListView.ts @@ -198,7 +198,7 @@ export class UserListView implements UpdatableSettingsViewer { const { instanceListId, instanceId, operation } = update if (isUpdateForTypeRef(GroupInfoTypeRef, update) && this.listId.getSync() === instanceListId) { - await this.listModel.entityEventReceived(instanceId, operation) + await this.listModel.entityEventReceived(instanceListId, instanceId, operation) } else if (isUpdateFor(locator.logins.getUserController().user, update)) { await this.loadAdmins() this.listModel.reapplyFilter() @@ -228,7 +228,7 @@ export class UserListView implements UpdatableSettingsViewer { return { items: allUserGroupInfos, complete: true } }, - loadSingle: async (elementId) => { + loadSingle: async (_listId: Id, elementId: Id) => { const listId = await this.listId.getAsync() try { return await locator.entityClient.load(GroupInfoTypeRef, [listId, elementId]) diff --git a/src/common/settings/whitelabel/CustomColorEditorPreview.ts b/src/common/settings/whitelabel/CustomColorEditorPreview.ts index 424e9341353c..1c6fe46c5b93 100644 --- a/src/common/settings/whitelabel/CustomColorEditorPreview.ts +++ b/src/common/settings/whitelabel/CustomColorEditorPreview.ts @@ -91,6 +91,7 @@ export class CustomColorEditorPreview implements Component { movedTime: null, phishingStatus: "0", recipientCount: "0", + sets: [], } satisfies Partial const mail = createMail({ sender: createMailAddress({ diff --git a/src/common/sharing/view/ReceivedGroupInvitationDialog.ts b/src/common/sharing/view/ReceivedGroupInvitationDialog.ts index ff247c9dd766..59f170fa358d 100644 --- a/src/common/sharing/view/ReceivedGroupInvitationDialog.ts +++ b/src/common/sharing/view/ReceivedGroupInvitationDialog.ts @@ -51,6 +51,7 @@ export function showGroupInvitationDialog(invitation: ReceivedGroupInvitation) { group: invitation.sharedGroup, color: newColor, name: newName, + defaultAlarmsList: [], }) userSettingsGroupRoot.groupSettings.push(groupSettings) } diff --git a/src/mail-app/ApplicationPaths.ts b/src/mail-app/ApplicationPaths.ts index 72bb3b5c9aab..aa08f2df9bde 100644 --- a/src/mail-app/ApplicationPaths.ts +++ b/src/mail-app/ApplicationPaths.ts @@ -45,8 +45,8 @@ export function applicationPaths({ "/recover": recover, "/mailto": mail, "/mail": mail, - "/mail/:listId": mail, - "/mail/:listId/:mailId": mail, + "/mail/:folderId": mail, + "/mail/:folderId/:mailId": mail, "/ext": externalLogin, "/contact": contact, "/contact/:listId": contact, diff --git a/src/mail-app/contacts/view/ContactListViewModel.ts b/src/mail-app/contacts/view/ContactListViewModel.ts index dd7596d69c24..e3f7f502fe01 100644 --- a/src/mail-app/contacts/view/ContactListViewModel.ts +++ b/src/mail-app/contacts/view/ContactListViewModel.ts @@ -88,7 +88,7 @@ export class ContactListViewModel { const items = await this.getRecipientsForList(listId) return { items, complete: true } }, - loadSingle: async (elementId: Id) => { + loadSingle: async (_listId: Id, elementId: Id) => { return this.entityClient.load(ContactListEntryTypeRef, [listId, elementId]) }, sortCompare: (rl1, rl2) => rl1.emailAddress.localeCompare(rl2.emailAddress), @@ -194,8 +194,9 @@ export class ContactListViewModel { private readonly entityEventsReceived: EntityEventsListener = async (updates: ReadonlyArray): Promise => { for (const update of updates) { if (this.selectedContactList) { - if (isUpdateForTypeRef(ContactListEntryTypeRef, update) && isSameId(this.selectedContactList, update.instanceListId)) { - await this.listModel?.entityEventReceived(update.instanceId, update.operation) + const { instanceListId, instanceId, operation } = update + if (isUpdateForTypeRef(ContactListEntryTypeRef, update) && isSameId(this.selectedContactList, instanceListId)) { + await this.listModel?.entityEventReceived(instanceListId, instanceId, operation) } else if (isUpdateForTypeRef(ContactTypeRef, update)) { this.getContactsForSelectedContactListEntry() } diff --git a/src/mail-app/contacts/view/ContactViewModel.ts b/src/mail-app/contacts/view/ContactViewModel.ts index c8025bca726d..82c2f887bad8 100644 --- a/src/mail-app/contacts/view/ContactViewModel.ts +++ b/src/mail-app/contacts/view/ContactViewModel.ts @@ -34,7 +34,7 @@ export class ContactViewModel { const items = await this.entityClient.loadAll(ContactTypeRef, this.contactListId) return { items, complete: true } }, - loadSingle: async (elementId: Id) => { + loadSingle: async (_listId: Id, elementId: Id) => { const listId = await this.contactModel.getContactListId() if (listId == null) return null return this.entityClient.load(ContactTypeRef, [listId, elementId]) @@ -82,8 +82,9 @@ export class ContactViewModel { private readonly entityListener: EntityEventsListener = async (updates) => { for (const update of updates) { - if (isUpdateForTypeRef(ContactTypeRef, update) && update.instanceListId === this.contactListId) { - await this.listModel.entityEventReceived(update.instanceId, update.operation) + const { instanceListId, instanceId, operation } = update + if (isUpdateForTypeRef(ContactTypeRef, update) && instanceListId === this.contactListId) { + await this.listModel.entityEventReceived(instanceListId, instanceId, operation) } } } diff --git a/src/mail-app/mail/model/InboxRuleHandler.ts b/src/mail-app/mail/model/InboxRuleHandler.ts index a059123da682..cc710d374da1 100644 --- a/src/mail-app/mail/model/InboxRuleHandler.ts +++ b/src/mail-app/mail/model/InboxRuleHandler.ts @@ -1,17 +1,17 @@ -import type { InboxRule, Mail, MoveMailData } from "../../../common/api/entities/tutanota/TypeRefs.js" +import type { InboxRule, Mail, MailFolder, MoveMailData } from "../../../common/api/entities/tutanota/TypeRefs.js" import { createMoveMailData } from "../../../common/api/entities/tutanota/TypeRefs.js" -import { InboxRuleType, MailFolderType, MAX_NBR_MOVE_DELETE_MAIL_SERVICE } from "../../../common/api/common/TutanotaConstants" +import { InboxRuleType, MailSetKind, MAX_NBR_MOVE_DELETE_MAIL_SERVICE } from "../../../common/api/common/TutanotaConstants" import { isDomainName, isRegularExpression } from "../../../common/misc/FormatValidator" import { assertNotNull, asyncFind, debounce, ofClass, promiseMap, splitInChunks } from "@tutao/tutanota-utils" import { lang } from "../../../common/misc/LanguageViewModel" import type { MailboxDetail } from "../../../common/mailFunctionality/MailModel.js" import { LockedError, PreconditionFailedError } from "../../../common/api/common/error/RestError" import type { SelectorItemList } from "../../../common/gui/base/DropDownSelector.js" -import { getElementId, getListId, isSameId } from "../../../common/api/common/utils/EntityUtils" +import { elementIdPart, isSameId } from "../../../common/api/common/utils/EntityUtils" import { assertMainOrNode } from "../../../common/api/common/Env" import { MailFacade } from "../../../common/api/worker/facades/lazy/MailFacade.js" import { LoginController } from "../../../common/api/main/LoginController.js" -import { assertSystemFolderOfType, getMailHeaders } from "../../../common/mailFunctionality/SharedMailUtils.js" +import { getMailHeaders } from "../../../common/mailFunctionality/SharedMailUtils.js" assertMainOrNode() const moveMailDataPerFolder: MoveMailData[] = [] @@ -24,7 +24,8 @@ async function sendMoveMailRequest(mailFacade: MailFacade): Promise { const mailChunks = splitInChunks(MAX_NBR_MOVE_DELETE_MAIL_SERVICE, moveToTargetFolder.mails) await promiseMap(mailChunks, (mailChunk) => { moveToTargetFolder.mails = mailChunk - return mailFacade.moveMails(mailChunk, moveToTargetFolder.targetFolder) + const sourceFolder = assertNotNull(moveToTargetFolder.sourceFolder) // old clients don't send sourceFolder. assertNotNull can be removed once sourceFolder cardinality is ONE + return mailFacade.moveMails(mailChunk, sourceFolder, moveToTargetFolder.targetFolder) }) .catch( ofClass(LockedError, (e) => { @@ -96,16 +97,17 @@ export class InboxRuleHandler { * Checks the mail for an existing inbox rule and moves the mail to the target folder of the rule. * @returns true if a rule matches otherwise false */ - async findAndApplyMatchingRule(mailboxDetail: MailboxDetail, mail: Mail, applyRulesOnServer: boolean): Promise { - if (mail._errors || !mail.unread || !isInboxList(mailboxDetail, getListId(mail)) || !this.logins.getUserController().isPremiumAccount()) { + async findAndApplyMatchingRule(mailboxDetail: MailboxDetail, mail: Mail, applyRulesOnServer: boolean): Promise<{ folder: MailFolder; mail: Mail } | null> { + if (mail._errors || !mail.unread || !isInboxFolder(mailboxDetail, mail) || !this.logins.getUserController().isPremiumAccount()) { return null } const inboxRule = await _findMatchingRule(this.mailFacade, mail, this.logins.getUserController().props.inboxRules) if (inboxRule) { - let targetFolder = mailboxDetail.folders.getFolderById(inboxRule.targetFolder) + let inboxFolder = assertNotNull(mailboxDetail.folders.getSystemFolderByType(MailSetKind.INBOX)) + let targetFolder = mailboxDetail.folders.getFolderById(elementIdPart(inboxRule.targetFolder)) - if (targetFolder && targetFolder.folderType !== MailFolderType.INBOX) { + if (targetFolder && targetFolder.folderType !== MailSetKind.INBOX) { if (applyRulesOnServer) { let moveMailData = moveMailDataPerFolder.find((folderMoveMailData) => isSameId(folderMoveMailData.targetFolder, inboxRule.targetFolder)) @@ -113,6 +115,7 @@ export class InboxRuleHandler { moveMailData.mails.push(mail._id) } else { moveMailData = createMoveMailData({ + sourceFolder: inboxFolder._id, targetFolder: inboxRule.targetFolder, mails: [mail._id], }) @@ -122,7 +125,7 @@ export class InboxRuleHandler { applyMatchingRules(this.mailFacade) } - return [targetFolder.mails, getElementId(mail)] + return { folder: targetFolder, mail } } else { return null } @@ -220,6 +223,7 @@ function _checkEmailAddresses(mailAddresses: string[], inboxRule: InboxRule): bo return mailAddress != null } -export function isInboxList(mailboxDetail: MailboxDetail, listId: Id): boolean { - return isSameId(listId, assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.INBOX).mails) +export function isInboxFolder(mailboxDetail: MailboxDetail, mail: Mail): boolean { + const mailFolder = mailboxDetail.folders.getFolderByMail(mail) + return mailFolder?.folderType === MailSetKind.INBOX } diff --git a/src/mail-app/mail/view/ConversationViewModel.ts b/src/mail-app/mail/view/ConversationViewModel.ts index 7c1847da59a8..6dd75b3dd5fe 100644 --- a/src/mail-app/mail/view/ConversationViewModel.ts +++ b/src/mail-app/mail/view/ConversationViewModel.ts @@ -1,20 +1,12 @@ import { ConversationEntry, ConversationEntryTypeRef, Mail, MailTypeRef } from "../../../common/api/entities/tutanota/TypeRefs.js" import { MailViewerViewModel } from "./MailViewerViewModel.js" import { CreateMailViewerOptions } from "./MailViewer.js" -import { - elementIdPart, - firstBiggerThanSecond, - getElementId, - getListId, - haveSameId, - isSameId, - listIdPart, -} from "../../../common/api/common/utils/EntityUtils.js" +import { elementIdPart, firstBiggerThanSecond, getElementId, haveSameId, isSameId, listIdPart } from "../../../common/api/common/utils/EntityUtils.js" import { assertNotNull, findLastIndex, groupBy, makeSingleUse } from "@tutao/tutanota-utils" import { EntityClient } from "../../../common/api/common/EntityClient.js" import { LoadingStateTracker } from "../../../common/offline/LoadingState.js" import { EntityEventsListener, EventController } from "../../../common/api/main/EventController.js" -import { ConversationType, MailFolderType, MailState, OperationType } from "../../../common/api/common/TutanotaConstants.js" +import { ConversationType, MailSetKind, MailState, OperationType } from "../../../common/api/common/TutanotaConstants.js" import { NotAuthorizedError, NotFoundError } from "../../../common/api/common/error/RestError.js" import { MailModel } from "../../../common/mailFunctionality/MailModel.js" import { EntityUpdateData, isUpdateForTypeRef } from "../../../common/api/common/utils/EntityUpdateUtils.js" @@ -254,8 +246,8 @@ export class ConversationViewModel { private async isInTrash(mail: Mail) { const mailboxDetail = await this.mailModel.getMailboxDetailsForMail(mail) - const mailFolder = this.mailModel.getMailFolder(getListId(mail)) - return mailFolder && mailboxDetail && isOfTypeOrSubfolderOf(mailboxDetail.folders, mailFolder, MailFolderType.TRASH) + const mailFolder = this.mailModel.getMailFolderForMail(mail) + return mailFolder && mailboxDetail && isOfTypeOrSubfolderOf(mailboxDetail.folders, mailFolder, MailSetKind.TRASH) } conversationItems(): ReadonlyArray { diff --git a/src/mail-app/mail/view/EditFolderDialog.ts b/src/mail-app/mail/view/EditFolderDialog.ts index be68f3811db1..2f4259249608 100644 --- a/src/mail-app/mail/view/EditFolderDialog.ts +++ b/src/mail-app/mail/view/EditFolderDialog.ts @@ -1,4 +1,4 @@ -import { MailFolder, MailTypeRef } from "../../../common/api/entities/tutanota/TypeRefs.js" +import { Mail, MailFolder, MailSetEntryTypeRef, MailTypeRef } from "../../../common/api/entities/tutanota/TypeRefs.js" import { DropDownSelector, SelectorItemList } from "../../../common/gui/base/DropDownSelector.js" import m from "mithril" import { TextField } from "../../../common/gui/base/TextField.js" @@ -7,25 +7,26 @@ import { locator } from "../../../common/api/main/CommonLocator.js" import { LockedError } from "../../../common/api/common/error/RestError.js" import { lang, TranslationKey } from "../../../common/misc/LanguageViewModel.js" import { MailboxDetail } from "../../../common/mailFunctionality/MailModel.js" -import { MailFolderType, MailReportType } from "../../../common/api/common/TutanotaConstants.js" -import { isSameId } from "../../../common/api/common/utils/EntityUtils.js" +import { MailReportType, MailSetKind } from "../../../common/api/common/TutanotaConstants.js" +import { elementIdPart, isSameId, listIdPart } from "../../../common/api/common/utils/EntityUtils.js" import { reportMailsAutomatically } from "./MailReportDialog.js" import { isOfflineError } from "../../../common/api/common/utils/ErrorUtils.js" import { getFolderName, getIndentedFolderNameForDropdown, getPathToFolderString } from "../../../common/mailFunctionality/SharedMailUtils.js" import { isSpamOrTrashFolder } from "../../../common/api/common/CommonMailUtils.js" +import { groupByAndMap } from "@tutao/tutanota-utils" /** * Dialog for Edit and Add folder are the same. - * @param editFolder if this is null, a folder is being added, otherwise a folder is being edited + * @param editedFolder if this is null, a folder is being added, otherwise a folder is being edited */ -export async function showEditFolderDialog(mailBoxDetail: MailboxDetail, editFolder: MailFolder | null = null, parentFolder: MailFolder | null = null) { +export async function showEditFolderDialog(mailBoxDetail: MailboxDetail, editedFolder: MailFolder | null = null, parentFolder: MailFolder | null = null) { const noParentFolderOption = lang.get("comboBoxSelectionNone_msg") const mailGroupId = mailBoxDetail.mailGroup._id - let folderNameValue = editFolder?.name ?? "" + let folderNameValue = editedFolder?.name ?? "" let targetFolders: SelectorItemList = mailBoxDetail.folders - .getIndentedList(editFolder) + .getIndentedList(editedFolder) // filter: SPAM and TRASH and descendants are only shown if editing (folders can only be moved there, not created there) - .filter((folderInfo) => !(editFolder === null && isSpamOrTrashFolder(mailBoxDetail.folders, folderInfo.folder))) + .filter((folderInfo) => !(editedFolder === null && isSpamOrTrashFolder(mailBoxDetail.folders, folderInfo.folder))) .map((folderInfo) => { return { name: getIndentedFolderNameForDropdown(folderInfo), @@ -36,7 +37,7 @@ export async function showEditFolderDialog(mailBoxDetail: MailboxDetail, editFol let selectedParentFolder = parentFolder let form = () => [ m(TextField, { - label: editFolder ? "rename_action" : "folderName_label", + label: editedFolder ? "rename_action" : "folderName_label", value: folderNameValue, oninput: (newInput) => { folderNameValue = newInput @@ -51,47 +52,69 @@ export async function showEditFolderDialog(mailBoxDetail: MailboxDetail, editFol helpLabel: () => (selectedParentFolder ? getPathToFolderString(mailBoxDetail.folders, selectedParentFolder) : ""), }), ] + + async function getMailIdsGroupedByListId(folder: MailFolder): Promise> { + const mailSetEntries = await locator.entityClient.loadAll(MailSetEntryTypeRef, folder.entries) + return groupByAndMap( + mailSetEntries, + (mse) => listIdPart(mse.mail), + (mse) => elementIdPart(mse.mail), + ) + } + + async function loadAllMailsOfFolder(folder: MailFolder, reportableMails: Array) { + if (folder.isMailSet) { + const mailIdsPerBag = await getMailIdsGroupedByListId(folder) + for (const [mailListId, mailIds] of mailIdsPerBag) { + reportableMails.push(...(await locator.entityClient.loadMultiple(MailTypeRef, mailListId, mailIds))) + } + } else { + reportableMails.push(...(await locator.entityClient.loadAll(MailTypeRef, folder.mails))) + } + } + const okAction = async (dialog: Dialog) => { // closing right away to prevent duplicate actions dialog.close() try { // if folder is null, create new folder - if (editFolder === null) { + if (editedFolder === null) { await locator.mailFacade.createMailFolder(folderNameValue, selectedParentFolder?._id ?? null, mailGroupId) } else { // if it is being moved to trash (and not already in trash), ask about trashing - if (selectedParentFolder?.folderType === MailFolderType.TRASH && !isSameId(selectedParentFolder._id, editFolder.parentFolder)) { + if (selectedParentFolder?.folderType === MailSetKind.TRASH && !isSameId(selectedParentFolder._id, editedFolder.parentFolder)) { const confirmed = await Dialog.confirm(() => lang.get("confirmDeleteCustomFolder_msg", { - "{1}": getFolderName(editFolder), + "{1}": getFolderName(editedFolder), }), ) if (!confirmed) return - await locator.mailFacade.updateMailFolderName(editFolder, folderNameValue) - await locator.mailModel.trashFolderAndSubfolders(editFolder) - } else if (selectedParentFolder?.folderType === MailFolderType.SPAM && !isSameId(selectedParentFolder._id, editFolder.parentFolder)) { + await locator.mailFacade.updateMailFolderName(editedFolder, folderNameValue) + await locator.mailModel.trashFolderAndSubfolders(editedFolder) + } else if (selectedParentFolder?.folderType === MailSetKind.SPAM && !isSameId(selectedParentFolder._id, editedFolder.parentFolder)) { // if it is being moved to spam (and not already in spam), ask about reporting containing emails const confirmed = await Dialog.confirm(() => lang.get("confirmSpamCustomFolder_msg", { - "{1}": getFolderName(editFolder), + "{1}": getFolderName(editedFolder), }), ) if (!confirmed) return // get mails to report before moving to mail model - const descendants = mailBoxDetail.folders.getDescendantFoldersOfParent(editFolder._id).sort((l, r) => r.level - l.level) - let reportableMails = await locator.entityClient.loadAll(MailTypeRef, editFolder.mails) + const descendants = mailBoxDetail.folders.getDescendantFoldersOfParent(editedFolder._id).sort((l, r) => r.level - l.level) + let reportableMails: Array = [] + await loadAllMailsOfFolder(editedFolder, reportableMails) for (const descendant of descendants) { - reportableMails.push(...(await locator.entityClient.loadAll(MailTypeRef, descendant.folder.mails))) + await loadAllMailsOfFolder(descendant.folder, reportableMails) } await reportMailsAutomatically(MailReportType.SPAM, locator.mailModel, mailBoxDetail, reportableMails) - await locator.mailFacade.updateMailFolderName(editFolder, folderNameValue) - await locator.mailModel.sendFolderToSpam(editFolder) + await locator.mailFacade.updateMailFolderName(editedFolder, folderNameValue) + await locator.mailModel.sendFolderToSpam(editedFolder) } else { - await locator.mailFacade.updateMailFolderName(editFolder, folderNameValue) - await locator.mailFacade.updateMailFolderParent(editFolder, selectedParentFolder?._id || null) + await locator.mailFacade.updateMailFolderName(editedFolder, folderNameValue) + await locator.mailFacade.updateMailFolderParent(editedFolder, selectedParentFolder?._id || null) } } } catch (error) { @@ -102,7 +125,7 @@ export async function showEditFolderDialog(mailBoxDetail: MailboxDetail, editFol } Dialog.showActionDialog({ - title: editFolder ? lang.get("editFolder_action") : lang.get("addFolder_action"), + title: editedFolder ? lang.get("editFolder_action") : lang.get("addFolder_action"), child: form, validator: () => checkFolderName(mailBoxDetail, folderNameValue, mailGroupId, selectedParentFolder?._id ?? null), allowOkWithReturn: true, diff --git a/src/mail-app/mail/view/MailFoldersView.ts b/src/mail-app/mail/view/MailFoldersView.ts index 921140621a51..c7c7260aab14 100644 --- a/src/mail-app/mail/view/MailFoldersView.ts +++ b/src/mail-app/mail/view/MailFoldersView.ts @@ -4,7 +4,7 @@ import { locator } from "../../../common/api/main/CommonLocator.js" import { SidebarSection } from "../../../common/gui/SidebarSection.js" import { IconButton, IconButtonAttrs } from "../../../common/gui/base/IconButton.js" import { FolderSubtree } from "../../../common/api/common/mail/FolderSystem.js" -import { getElementId } from "../../../common/api/common/utils/EntityUtils.js" +import { elementIdPart, getElementId } from "../../../common/api/common/utils/EntityUtils.js" import { isSelectedPrefix, NavButtonAttrs, NavButtonColor } from "../../../common/gui/base/NavButton.js" import { MAIL_PREFIX } from "../../../common/misc/RouteChange.js" import { MailFolderRow } from "./MailFolderRow.js" @@ -14,7 +14,7 @@ import { attachDropdown, DropdownButtonAttrs } from "../../../common/gui/base/Dr import { Icons } from "../../../common/gui/base/icons/Icons.js" import { ButtonColor } from "../../../common/gui/base/Button.js" import { ButtonSize } from "../../../common/gui/base/ButtonSize.js" -import { MailFolderType } from "../../../common/api/common/TutanotaConstants.js" +import { MailSetKind } from "../../../common/api/common/TutanotaConstants.js" import { px, size } from "../../../common/gui/size.js" import { RowButton } from "../../../common/gui/base/buttons/RowButton.js" import { getFolderIcon, getFolderName, MAX_FOLDER_INDENT_LEVEL } from "../../../common/mailFunctionality/SharedMailUtils.js" @@ -22,7 +22,7 @@ import { isSpamOrTrashFolder } from "../../../common/api/common/CommonMailUtils. export interface MailFolderViewAttrs { mailboxDetail: MailboxDetail - mailListToSelectedMail: ReadonlyMap + mailFolderToSelectedMail: ReadonlyMap onFolderClick: (folder: MailFolder) => unknown onFolderDrop: (mailId: string, folder: MailFolder) => unknown expandedFolders: ReadonlySet @@ -51,7 +51,7 @@ export class MailFoldersView implements Component { const selectedFolder = mailboxDetail.folders .getIndentedList() .map((f) => f.folder) - .find((f) => isSelectedPrefix(MAIL_PREFIX + "/" + f.mails)) + .find((f) => isSelectedPrefix(MAIL_PREFIX + "/" + getElementId(f))) const path = selectedFolder ? mailboxDetail.folders.getPathToFolder(selectedFolder._id) : [] const isInternalUser = locator.logins.isInternalUserLoggedIn() const systemChildren = this.renderFolderTree(systemSystems, groupCounters, attrs, path, isInternalUser) @@ -93,15 +93,16 @@ export class MailFoldersView implements Component { if (attrs.inEditMode) { return m.route.get() } else { - const mailId = attrs.mailListToSelectedMail.get(system.folder.mails) + const mailId = attrs.mailFolderToSelectedMail.get(system.folder) + const folderId = getElementId(system.folder) if (mailId) { - return `/mail/${system.folder.mails}/${mailId}` + return `${MAIL_PREFIX}/${folderId}/${mailId}` } else { - return `/mail/${system.folder.mails}` + return `${MAIL_PREFIX}/${folderId}` } } }, - isSelectedPrefix: attrs.inEditMode ? false : MAIL_PREFIX + "/" + system.folder.mails, + isSelectedPrefix: attrs.inEditMode ? false : MAIL_PREFIX + "/" + getElementId(system.folder), colors: NavButtonColor.Nav, click: () => attrs.onFolderClick(system.folder), dropHandler: (droppedMailId) => attrs.onFolderDrop(droppedMailId, system.folder), @@ -110,12 +111,13 @@ export class MailFoldersView implements Component { } const currentExpansionState = attrs.inEditMode ? true : attrs.expandedFolders.has(getElementId(system.folder)) ?? false //default is false const hasChildren = system.children.length > 0 - const summedCount = !currentExpansionState && hasChildren ? this.getTotalFolderCounter(groupCounters, system) : groupCounters[system.folder.mails] + const counterId = system.folder.isMailSet ? getElementId(system.folder) : system.folder.mails + const summedCount = !currentExpansionState && hasChildren ? this.getTotalFolderCounter(groupCounters, system) : groupCounters[counterId] const childResult = hasChildren && currentExpansionState ? this.renderFolderTree(system.children, groupCounters, attrs, path, isInternalUser, indentationLevel + 1) : { children: null, numRows: 0 } - const isTrashOrSpam = system.folder.folderType === MailFolderType.TRASH || system.folder.folderType === MailFolderType.SPAM + const isTrashOrSpam = system.folder.folderType === MailSetKind.TRASH || system.folder.folderType === MailSetKind.SPAM const isRightButtonVisible = this.visibleRow === id const rightButton = isInternalUser && !isTrashOrSpam && (isRightButtonVisible || attrs.inEditMode) @@ -171,7 +173,8 @@ export class MailFoldersView implements Component { } private getTotalFolderCounter(counters: Counters, system: FolderSubtree): number { - return (counters[system.folder.mails] ?? 0) + system.children.reduce((acc, child) => acc + this.getTotalFolderCounter(counters, child), 0) + const counterId = system.folder.isMailSet ? getElementId(system.folder) : system.folder.mails + return (counters[counterId] ?? 0) + system.children.reduce((acc, child) => acc + this.getTotalFolderCounter(counters, child), 0) } private createFolderMoreButton(folder: MailFolder, attrs: MailFolderViewAttrs, onClose: Thunk): IconButtonAttrs { @@ -183,7 +186,7 @@ export class MailFoldersView implements Component { size: ButtonSize.Compact, }, childAttrs: () => { - return folder.folderType === MailFolderType.CUSTOM + return folder.folderType === MailSetKind.CUSTOM ? // cannot add new folder to custom folder in spam or trash folder isSpamOrTrashFolder(attrs.mailboxDetail.folders, folder) ? [this.editButtonAttrs(attrs, folder), this.deleteButtonAttrs(attrs, folder)] @@ -222,7 +225,7 @@ export class MailFoldersView implements Component { attrs.onShowFolderAddEditDialog( attrs.mailboxDetail.mailGroup._id, folder, - folder.parentFolder ? attrs.mailboxDetail.folders.getFolderById(folder.parentFolder) : null, + folder.parentFolder ? attrs.mailboxDetail.folders.getFolderById(elementIdPart(folder.parentFolder)) : null, ) }, } diff --git a/src/mail-app/mail/view/MailGuiUtils.ts b/src/mail-app/mail/view/MailGuiUtils.ts index 69545e5f7cc5..859607dac3af 100644 --- a/src/mail-app/mail/view/MailGuiUtils.ts +++ b/src/mail-app/mail/view/MailGuiUtils.ts @@ -8,8 +8,7 @@ import { AllIcons } from "../../../common/gui/base/Icon" import { Icons } from "../../../common/gui/base/icons/Icons" import { isApp, isDesktop } from "../../../common/api/common/Env" import { assertNotNull, neverNull, noOp, promiseMap } from "@tutao/tutanota-utils" -import { MailFolderType, MailReportType } from "../../../common/api/common/TutanotaConstants" -import { getElementId, getListId } from "../../../common/api/common/utils/EntityUtils" +import { MailReportType, MailSetKind } from "../../../common/api/common/TutanotaConstants" import { reportMailsAutomatically } from "./MailReportDialog" import { DataFile } from "../../../common/api/common/DataFile" import { lang, TranslationKey } from "../../../common/misc/LanguageViewModel" @@ -20,22 +19,23 @@ import { ConversationViewModel } from "./ConversationViewModel.js" import { size } from "../../../common/gui/size.js" import { PinchZoom } from "../../../common/gui/PinchZoom.js" import { InlineImageReference, InlineImages } from "../../../common/mailFunctionality/inlineImagesUtils.js" -import { isOfTypeOrSubfolderOf } from "../../../common/mailFunctionality/SharedMailUtils.js" import { assertSystemFolderOfType, getFolderIcon, getFolderName, getIndentedFolderNameForDropdown, getMoveTargetFolderSystems, + isOfTypeOrSubfolderOf, } from "../../../common/mailFunctionality/SharedMailUtils.js" import { isSpamOrTrashFolder } from "../../../common/api/common/CommonMailUtils.js" +import { getElementId } from "../../../common/api/common/utils/EntityUtils.js" export async function showDeleteConfirmationDialog(mails: ReadonlyArray): Promise { let trashMails: Mail[] = [] let moveMails: Mail[] = [] for (let mail of mails) { - const folder = locator.mailModel.getMailFolder(mail._id[0]) - const mailboxDetail = await locator.mailModel.getMailboxDetailsForMailListId(getListId(mail)) + const folder = locator.mailModel.getMailFolderForMail(mail) + const mailboxDetail = await locator.mailModel.getMailboxDetailsForMail(mail) if (mailboxDetail == null) { continue } @@ -96,7 +96,7 @@ interface MoveMailsParams { * @return whether mails were actually moved */ export async function moveMails({ mailModel, mails, targetMailFolder, isReportable = true }: MoveMailsParams): Promise { - const details = await mailModel.getMailboxDetailsForMailListId(targetMailFolder.mails) + const details = await mailModel.getMailboxDetailsForMailFolder(targetMailFolder) if (details == null) { return false } @@ -104,11 +104,11 @@ export async function moveMails({ mailModel, mails, targetMailFolder, isReportab return mailModel .moveMails(mails, targetMailFolder) .then(async () => { - if (isOfTypeOrSubfolderOf(system, targetMailFolder, MailFolderType.SPAM) && isReportable) { + if (isOfTypeOrSubfolderOf(system, targetMailFolder, MailSetKind.SPAM) && isReportable) { const reportableMails = mails.map((mail) => { // mails have just been moved const reportableMail = createMail(mail) - reportableMail._id = [targetMailFolder.mails, getElementId(mail)] + reportableMail._id = targetMailFolder.isMailSet ? mail._id : [targetMailFolder.mails, getElementId(mail)] return reportableMail }) const mailboxDetails = await mailModel.getMailboxDetailsForMailGroup(assertNotNull(targetMailFolder._ownerGroup)) @@ -135,7 +135,7 @@ export function archiveMails(mails: Mail[]): Promise { moveMails({ mailModel: locator.mailModel, mails: mails, - targetMailFolder: assertSystemFolderOfType(folders, MailFolderType.ARCHIVE), + targetMailFolder: assertSystemFolderOfType(folders, MailSetKind.ARCHIVE), }) }) } else { @@ -151,7 +151,7 @@ export function moveToInbox(mails: Mail[]): Promise { moveMails({ mailModel: locator.mailModel, mails: mails, - targetMailFolder: assertSystemFolderOfType(folders, MailFolderType.INBOX), + targetMailFolder: assertSystemFolderOfType(folders, MailSetKind.INBOX), }) }) } else { @@ -160,7 +160,7 @@ export function moveToInbox(mails: Mail[]): Promise { } export function getMailFolderIcon(mail: Mail): AllIcons { - let folder = locator.mailModel.getMailFolder(mail._id[0]) + let folder = locator.mailModel.getMailFolderForMail(mail) if (folder) { return getFolderIcon(folder) diff --git a/src/mail-app/mail/view/MailListView.ts b/src/mail-app/mail/view/MailListView.ts index 439c2650d201..a111c7b8d78d 100644 --- a/src/mail-app/mail/view/MailListView.ts +++ b/src/mail-app/mail/view/MailListView.ts @@ -1,7 +1,7 @@ import m, { Children, Component, Vnode } from "mithril" import { lang } from "../../../common/misc/LanguageViewModel" -import { Keys, MailFolderType, MailState } from "../../../common/api/common/TutanotaConstants" +import { Keys, MailSetKind, MailState } from "../../../common/api/common/TutanotaConstants" import type { Mail, MailFolder } from "../../../common/api/entities/tutanota/TypeRefs.js" import { size } from "../../../common/gui/size" import { styles } from "../../../common/gui/styles" @@ -39,12 +39,10 @@ export interface MailListViewAttrs { // but for that we need to rewrite the List onClearFolder: () => unknown mailViewModel: MailViewModel - listId: Id onSingleSelection: (mail: Mail) => unknown } export class MailListView implements Component { - listId: Id // Mails that are currently being or have already been downloaded/bundled/saved // Map of (Mail._id ++ MailExportMode) -> Promise // TODO this currently grows bigger and bigger and bigger if the user goes on an exporting spree. @@ -84,7 +82,6 @@ export class MailListView implements Component { constructor({ attrs }: Vnode) { this.mailViewModel = attrs.mailViewModel - this.listId = attrs.listId this.exportedMails = new Map() this._listDom = null this.mailViewModel.showingTrashOrSpamFolder().then((result) => { @@ -106,9 +103,9 @@ export class MailListView implements Component { private getRecoverFolder(mail: Mail, folders: FolderSystem): MailFolder { if (mail.state === MailState.DRAFT) { - return assertSystemFolderOfType(folders, MailFolderType.DRAFT) + return assertSystemFolderOfType(folders, MailSetKind.DRAFT) } else { - return assertSystemFolderOfType(folders, MailFolderType.INBOX) + return assertSystemFolderOfType(folders, MailSetKind.INBOX) } } @@ -301,7 +298,7 @@ export class MailListView implements Component { this.mailViewModel = vnode.attrs.mailViewModel // Save the folder before showing the dialog so that there's no chance that it will change - const folder = this.mailViewModel.getSelectedFolder() + const folder = this.mailViewModel.getFolder() const purgeButtonAttrs: ButtonAttrs = { label: "clearFolder_action", type: ButtonType.Primary, @@ -396,10 +393,10 @@ export class MailListView implements Component { } private async targetInbox(): Promise { - const selectedFolder = this.mailViewModel.getSelectedFolder() + const selectedFolder = this.mailViewModel.getFolder() if (selectedFolder) { const mailDetails = await this.mailViewModel.getMailboxDetails() - return isOfTypeOrSubfolderOf(mailDetails.folders, selectedFolder, MailFolderType.ARCHIVE) || selectedFolder.folderType === MailFolderType.TRASH + return isOfTypeOrSubfolderOf(mailDetails.folders, selectedFolder, MailSetKind.ARCHIVE) || selectedFolder.folderType === MailSetKind.TRASH } else { return false } @@ -422,7 +419,7 @@ export class MailListView implements Component { //to determinate the target folder const targetMailFolder = this.showingSpamOrTrash ? this.getRecoverFolder(listElement, folders) - : assertNotNull(folders.getSystemFolderByType(this.showingArchive ? MailFolderType.INBOX : MailFolderType.ARCHIVE)) + : assertNotNull(folders.getSystemFolderByType(this.showingArchive ? MailSetKind.INBOX : MailSetKind.ARCHIVE)) const wereMoved = await moveMails({ mailModel: locator.mailModel, mails: [listElement], diff --git a/src/mail-app/mail/view/MailRow.ts b/src/mail-app/mail/view/MailRow.ts index 93145adf46a3..97ed0b82a14d 100644 --- a/src/mail-app/mail/view/MailRow.ts +++ b/src/mail-app/mail/view/MailRow.ts @@ -1,4 +1,4 @@ -import { EncryptionAuthStatus, getMailFolderType, MailFolderType, MailState, ReplyType } from "../../../common/api/common/TutanotaConstants" +import { getMailFolderType, MailSetKind, MailState, ReplyType } from "../../../common/api/common/TutanotaConstants" import { FontIcons } from "../../../common/gui/base/icons/FontIcons" import type { Mail } from "../../../common/api/entities/tutanota/TypeRefs.js" import { formatTimeOrDateOrYesterday } from "../../../common/misc/Formatter.js" @@ -20,17 +20,17 @@ import { px, size } from "../../../common/gui/size.js" import { NBSP, noOp } from "@tutao/tutanota-utils" import { VirtualRow } from "../../../common/gui/base/ListUtils.js" import { companyTeamLabel } from "../../../common/misc/ClientConstants.js" -import { getConfidentialFontIcon, getSenderOrRecipientHeading } from "../../../common/mailFunctionality/SharedMailUtils.js" -import { isTutanotaTeamMail } from "../../../common/mailFunctionality/SharedMailUtils.js" - -const iconMap: Record = { - [MailFolderType.CUSTOM]: FontIcons.Folder, - [MailFolderType.INBOX]: FontIcons.Inbox, - [MailFolderType.SENT]: FontIcons.Sent, - [MailFolderType.TRASH]: FontIcons.Trash, - [MailFolderType.ARCHIVE]: FontIcons.Archive, - [MailFolderType.SPAM]: FontIcons.Spam, - [MailFolderType.DRAFT]: FontIcons.Draft, +import { getConfidentialFontIcon, getSenderOrRecipientHeading, isTutanotaTeamMail } from "../../../common/mailFunctionality/SharedMailUtils.js" + +const iconMap: Record = { + [MailSetKind.CUSTOM]: FontIcons.Folder, + [MailSetKind.INBOX]: FontIcons.Inbox, + [MailSetKind.SENT]: FontIcons.Sent, + [MailSetKind.TRASH]: FontIcons.Trash, + [MailSetKind.ARCHIVE]: FontIcons.Archive, + [MailSetKind.SPAM]: FontIcons.Spam, + [MailSetKind.DRAFT]: FontIcons.Draft, + [MailSetKind.ALL]: FontIcons.Folder, } export const MAIL_ROW_V_MARGIN = 3 @@ -49,7 +49,7 @@ export class MailRow implements VirtualRow { private dateDom!: HTMLElement private iconsDom!: HTMLElement private unreadDom!: HTMLElement - private folderIconsDom: Record + private folderIconsDom: Record private teamLabelDom!: HTMLElement private checkboxDom!: HTMLInputElement private checkboxWasVisible = shouldAlwaysShowMultiselectCheckbox() @@ -58,7 +58,7 @@ export class MailRow implements VirtualRow { constructor(private readonly showFolderIcon: boolean, private readonly onSelected: (mail: Mail, selected: boolean) => unknown) { this.top = 0 this.entity = null - this.folderIconsDom = {} as Record + this.folderIconsDom = {} as Record } update(mail: Mail, selected: boolean, isInMultiSelect: boolean): void { @@ -255,7 +255,7 @@ export class MailRow implements VirtualRow { let iconText = "" if (this.showFolderIcon) { - let folder = locator.mailModel.getMailFolder(mail._id[0]) + let folder = locator.mailModel.getMailFolderForMail(mail) iconText += folder ? this.folderIcon(getMailFolderType(folder)) : "" } @@ -291,7 +291,7 @@ export class MailRow implements VirtualRow { return iconText } - private folderIcon(type: MailFolderType): string { + private folderIcon(type: MailSetKind): string { return iconMap[type] } } diff --git a/src/mail-app/mail/view/MailView.ts b/src/mail-app/mail/view/MailView.ts index d1b0ec239558..1c4463c52d4b 100644 --- a/src/mail-app/mail/view/MailView.ts +++ b/src/mail-app/mail/view/MailView.ts @@ -3,7 +3,7 @@ import { ViewSlider } from "../../../common/gui/nav/ViewSlider.js" import { ColumnType, ViewColumn } from "../../../common/gui/base/ViewColumn" import { lang } from "../../../common/misc/LanguageViewModel" import { Dialog } from "../../../common/gui/base/Dialog" -import { FeatureType, Keys, MailFolderType } from "../../../common/api/common/TutanotaConstants" +import { FeatureType, Keys, MailSetKind } from "../../../common/api/common/TutanotaConstants" import { AppHeaderAttrs, Header } from "../../../common/gui/Header.js" import type { Mail, MailFolder } from "../../../common/api/entities/tutanota/TypeRefs.js" import { noOp, ofClass } from "@tutao/tutanota-utils" @@ -109,12 +109,12 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - const listId = this.mailViewModel.getListId() + const folder = this.mailViewModel.getFolder() return m(BackgroundColumnLayout, { backgroundColor: theme.navigation_bg, desktopToolbar: () => m(DesktopListToolbar, m(SelectAllCheckbox, selectionAttrsForList(this.mailViewModel.listModel)), this.renderFilterButton()), - columnLayout: listId + columnLayout: folder ? m( "", { @@ -123,9 +123,8 @@ export class MailView extends BaseTopLevelView implements TopLevelView { if (!this.mailViewModel.listModel?.state.inMultiselect) { this.viewSlider.focus(this.mailColumn) @@ -142,7 +141,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - const folder = this.mailViewModel.getSelectedFolder() + const folder = this.mailViewModel.getFolder() if (folder == null) { console.warn("Cannot delete folder, no folder is selected") return @@ -186,7 +185,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - const selectedFolder = this.mailViewModel.getSelectedFolder() + const selectedFolder = this.mailViewModel.getFolder() return selectedFolder ? getFolderName(selectedFolder) : "" }, }, @@ -406,7 +405,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { this.showNewMailDialog().catch(ofClass(PermissionError, noOp)) }, - enabled: () => !!this.mailViewModel.getSelectedFolder() && isNewMailActionAvailable(), + enabled: () => !!this.mailViewModel.getFolder() && isNewMailActionAvailable(), help: "newMail_action", }, { @@ -458,7 +457,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.INBOX) + this.mailViewModel.switchToFolder(MailSetKind.INBOX) return true }, help: "switchInbox_action", @@ -466,7 +465,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.DRAFT) + this.mailViewModel.switchToFolder(MailSetKind.DRAFT) return true }, help: "switchDrafts_action", @@ -474,7 +473,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.SENT) + this.mailViewModel.switchToFolder(MailSetKind.SENT) return true }, help: "switchSentFolder_action", @@ -482,7 +481,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.TRASH) + this.mailViewModel.switchToFolder(MailSetKind.TRASH) return true }, help: "switchTrash_action", @@ -490,7 +489,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.ARCHIVE) + this.mailViewModel.switchToFolder(MailSetKind.ARCHIVE) return true }, enabled: () => locator.logins.isInternalUserLoggedIn(), @@ -499,7 +498,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - this.mailViewModel.switchToFolder(MailFolderType.SPAM) + this.mailViewModel.switchToFolder(MailSetKind.SPAM) return true }, enabled: () => locator.logins.isInternalUserLoggedIn() && !locator.logins.isEnabled(FeatureType.InternalCommunication), @@ -594,7 +593,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { if (!inEditMode) { this.viewSlider.focus(this.listColumn) @@ -643,7 +642,7 @@ export class MailView extends BaseTopLevelView implements TopLevelView { - if (folder.folderType !== MailFolderType.CUSTOM) { + if (folder.folderType !== MailSetKind.CUSTOM) { throw new Error("Cannot delete non-custom folder: " + String(folder._id)) } diff --git a/src/mail-app/mail/view/MailViewModel.ts b/src/mail-app/mail/view/MailViewModel.ts index c798dd5a0d32..6a53960c6e4a 100644 --- a/src/mail-app/mail/view/MailViewModel.ts +++ b/src/mail-app/mail/view/MailViewModel.ts @@ -1,14 +1,34 @@ import { ListModel } from "../../../common/misc/ListModel.js" import { MailboxDetail, MailModel } from "../../../common/mailFunctionality/MailModel.js" import { EntityClient } from "../../../common/api/common/EntityClient.js" -import { Mail, MailFolder, MailTypeRef } from "../../../common/api/entities/tutanota/TypeRefs.js" -import { firstBiggerThanSecond, GENERATED_MAX_ID, getElementId, isSameId, sortCompareByReverseId } from "../../../common/api/common/utils/EntityUtils.js" -import { assertNotNull, count, debounce, lastThrow, lazyMemoized, mapWith, mapWithout, memoized, ofClass, promiseFilter } from "@tutao/tutanota-utils" +import { Mail, MailFolder, MailSetEntry, MailSetEntryTypeRef, MailTypeRef } from "../../../common/api/entities/tutanota/TypeRefs.js" +import { + elementIdPart, + firstBiggerThanSecond, + GENERATED_MAX_ID, + getElementId, + isSameId, + listIdPart, + sortCompareByReverseId, +} from "../../../common/api/common/utils/EntityUtils.js" +import { + assertNotNull, + count, + debounce, + groupByAndMap, + lastThrow, + lazyMemoized, + mapWith, + mapWithout, + memoized, + ofClass, + promiseFilter, +} from "@tutao/tutanota-utils" import { ListState } from "../../../common/gui/base/List.js" import { ConversationPrefProvider, ConversationViewModel, ConversationViewModelFactory } from "./ConversationViewModel.js" import { CreateMailViewerOptions } from "./MailViewer.js" import { isOfflineError } from "../../../common/api/common/utils/ErrorUtils.js" -import { MailFolderType } from "../../../common/api/common/TutanotaConstants.js" +import { MailSetKind, OperationType } from "../../../common/api/common/TutanotaConstants.js" import { WsConnectionState } from "../../../common/api/main/WorkerClient.js" import { WebsocketConnectivityModel } from "../../../common/misc/WebsocketConnectivityModel.js" import { ExposedCacheStorage } from "../../../common/api/worker/rest/DefaultEntityRestCache.js" @@ -21,8 +41,7 @@ import { Router } from "../../../common/gui/ScopedRouter.js" import { ListFetchResult } from "../../../common/gui/base/ListUtils.js" import { EntityUpdateData, isUpdateForTypeRef } from "../../../common/api/common/utils/EntityUpdateUtils.js" import { EventController } from "../../../common/api/main/EventController.js" -import { assertSystemFolderOfType, getMailFilterForType, MailFilterType } from "../../../common/mailFunctionality/SharedMailUtils.js" -import { isOfTypeOrSubfolderOf } from "../../../common/mailFunctionality/SharedMailUtils.js" +import { assertSystemFolderOfType, getMailFilterForType, isOfTypeOrSubfolderOf, MailFilterType } from "../../../common/mailFunctionality/SharedMailUtils.js" import { isSpamOrTrashFolder, isSubfolderOfType } from "../../../common/api/common/CommonMailUtils.js" export interface MailOpenedListener { @@ -31,7 +50,7 @@ export interface MailOpenedListener { /** ViewModel for the overall mail view. */ export class MailViewModel { - private _listId: Id | null = null + private _folder: MailFolder | null = null /** id of the mail we are trying to load based on the URL */ private targetMailId: Id | null = null /** needed to prevent parallel target loads*/ @@ -43,7 +62,7 @@ export class MailViewModel { * We remember the last URL used for each folder so if we switch between folders we can keep the selected mail. * There's a similar (but different) hacky mechanism where we store last URL but per each top-level view: navButtonRoutes. This one is per folder. */ - private mailListToSelectedMail: ReadonlyMap = new Map() + private mailFolderToSelectedMail: ReadonlyMap = new Map() private listStreamSubscription: Stream | null = null private conversationPref: boolean = false @@ -70,9 +89,14 @@ export class MailViewModel { this.listModel?.setFilter(getMailFilterForType(filter)) } - async showMail(listId?: Id, mailId?: Id) { + async showMailWithFolderId(folderId?: Id, mailId?: Id): Promise { + const folder: MailFolder | null = folderId ? (await this.getMailboxDetails()).folders.getFolderById(folderId) : null + return this.showMail(folder, mailId) + } + + async showMail(folder?: MailFolder | null, mailId?: Id) { // an optimization to not open an email that we already display - if (listId != null && mailId != null && this.conversationViewModel && isSameId(this.conversationViewModel.primaryMail._id, [listId, mailId])) { + if (folder != null && mailId != null && this.conversationViewModel && isSameId(elementIdPart(this.conversationViewModel.primaryMail._id), mailId)) { return } @@ -81,26 +105,26 @@ export class MailViewModel { // target URL this.targetMailId = typeof mailId === "string" ? mailId : null - let listIdToUse - if (typeof listId === "string") { - const mailboxDetail = await this.mailModel.getMailboxDetailsForMailListId(listId) + let folderToUse + if (folder) { + const mailboxDetail = await this.mailModel.getMailboxDetailsForMailFolder(folder) if (mailboxDetail) { - listIdToUse = listId + folderToUse = folder } else { - listIdToUse = await this.getListIdForUserInbox() + folderToUse = await this.getFolderForUserInbox() } } else { - listIdToUse = this._listId ?? (await this.getListIdForUserInbox()) + folderToUse = this._folder ?? (await this.getFolderForUserInbox()) } - await this.setListId(listIdToUse) + await this.setListId(folderToUse) // if there is a target id and we are not loading for this id already then start loading towards that id if (this.targetMailId && this.targetMailId != this.loadingToTargetId) { - this.mailListToSelectedMail = mapWith(this.mailListToSelectedMail, listIdToUse, this.targetMailId) + this.mailFolderToSelectedMail = mapWith(this.mailFolderToSelectedMail, folderToUse, this.targetMailId) try { this.loadingToTargetId = this.targetMailId - await this.loadAndSelectMail([listIdToUse, this.targetMailId]) + await this.loadAndSelectMail(folderToUse, this.targetMailId) } finally { this.loadingToTargetId = null this.targetMailId = null @@ -108,16 +132,16 @@ export class MailViewModel { } else { // update URL if the view was just opened without any url params // setListId might not have done it if the list didn't change for us internally but is changed for the view - if (listId == null) this.updateUrl() + if (folder == null) this.updateUrl() } } - private async loadAndSelectMail([listId, mailId]: IdTuple) { + private async loadAndSelectMail(folder: MailFolder, mailId: Id) { const foundMail = await this.listModel?.loadAndSelect( mailId, () => // if we changed the list, stop - this.getListId() !== listId || + this.getFolder() !== folder || // if listModel is gone for some reason, stop !this.listModel || // if the target mail has changed, stop @@ -126,13 +150,13 @@ export class MailViewModel { (this.listModel.state.items.length > 0 && firstBiggerThanSecond(mailId, getElementId(lastThrow(this.listModel.state.items)))), ) if (foundMail == null) { - console.log("did not find mail", listId, mailId) + console.log("did not find mail", folder, mailId) } } - private async getListIdForUserInbox(): Promise { + private async getFolderForUserInbox(): Promise { const mailboxDetail = await this.mailModel.getUserMailboxDetails() - return assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.INBOX).mails + return assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.INBOX) } init() { @@ -155,26 +179,26 @@ export class MailViewModel { }) get listModel(): ListModel | null { - return this._listId ? this._listModel(this._listId) : null + return this._folder ? this.listModelForFolder(getElementId(this._folder)) : null } - getMailListToSelectedMail(): ReadonlyMap { - return this.mailListToSelectedMail + getMailFolderToSelectedMail(): ReadonlyMap { + return this.mailFolderToSelectedMail } - getListId(): Id | null { - return this._listId + getFolder(): MailFolder | null { + return this._folder } - private async setListId(id: Id) { - if (id === this._listId) { + private async setListId(folder: MailFolder) { + if (folder === this._folder) { return } // Cancel old load all this.listModel?.cancelLoadAll() this._filterType = null - this._listId = id + this._folder = folder this.listStreamSubscription?.end(true) this.listStreamSubscription = this.listModel!.stateStream.map((state) => this.onListStateChange(state)) await this.listModel!.loadInitial() @@ -184,49 +208,53 @@ export class MailViewModel { return this.conversationViewModel } - private _listModel = memoized((listId: Id) => { + private listModelForFolder = memoized((folderId: Id) => { return new ListModel({ topId: GENERATED_MAX_ID, fetch: async (startId, count) => { - const { complete, items } = await this.loadMailRange(listId, startId, count) + const folder = assertNotNull(this._folder) + const { complete, items } = await this.loadMailRange(folder, startId, count) if (complete) { - this.fixCounterIfNeeded(listId, []) + this.fixCounterIfNeeded(folder, []) } return { complete, items } }, - loadSingle: (elementId: Id): Promise => this.entityClient.load(MailTypeRef, [listId, elementId]), + loadSingle: (listId: Id, elementId: Id): Promise => { + return this.entityClient.load(MailTypeRef, [listId, elementId]) + }, sortCompare: sortCompareByReverseId, autoSelectBehavior: () => this.conversationPrefProvider.getMailAutoSelectBehavior(), }) }) - private fixCounterIfNeeded: (listId: Id, itemsWhenCalled: ReadonlyArray) => void = debounce( + private fixCounterIfNeeded: (folder: MailFolder, itemsWhenCalled: ReadonlyArray) => void = debounce( 2000, - async (listId: Id, itemsWhenCalled: ReadonlyArray) => { - if (this._filterType != null && this.filterType !== MailFilterType.Unread) { + async (folder: MailFolder, itemsWhenCalled: ReadonlyArray) => { + const ourFolder = this.getFolder() + if (ourFolder == null || (this._filterType != null && this.filterType !== MailFilterType.Unread)) { return } // If folders are changed, list won't have the data we need. // Do not rely on counters if we are not connected - if (this.getListId() !== listId || this.connectivityModel.wsConnection()() !== WsConnectionState.connected) { + if (!isSameId(getElementId(ourFolder), getElementId(folder)) || this.connectivityModel.wsConnection()() !== WsConnectionState.connected) { return } // If list was modified in the meantime, we cannot be sure that we will fix counters correctly (e.g. because of the inbox rules) if (this.listModel?.state.items !== itemsWhenCalled) { console.log(`list changed, trying again later`) - return this.fixCounterIfNeeded(listId, this.listModel?.state.items ?? []) + return this.fixCounterIfNeeded(folder, this.listModel?.state.items ?? []) } const unreadMailsCount = count(this.listModel.state.items, (e) => e.unread) - const counterValue = await this.mailModel.getCounterValue(listId) + const counterValue = await this.mailModel.getCounterValue(folder) if (counterValue != null && counterValue !== unreadMailsCount) { - console.log(`fixing up counter for list ${listId}`) - await this.mailModel.fixupCounterForMailList(listId, unreadMailsCount) + console.log(`fixing up counter for folder ${folder._id}`) + await this.mailModel.fixupCounterForFolder(folder, unreadMailsCount) } else { - console.log(`same counter, no fixup on list ${listId}`) + console.log(`same counter, no fixup on folder ${folder._id}`) } }, ) @@ -235,7 +263,7 @@ export class MailViewModel { if (!newState.inMultiselect && newState.selectedItems.size === 1) { const mail = this.listModel!.getSelectedAsArray()[0] if (!this.conversationViewModel || !isSameId(this.conversationViewModel?.primaryMail._id, mail._id)) { - this.mailListToSelectedMail = mapWith(this.mailListToSelectedMail, assertNotNull(this.getListId()), getElementId(mail)) + this.mailFolderToSelectedMail = mapWith(this.mailFolderToSelectedMail, assertNotNull(this.getFolder()), getElementId(mail)) this.createConversationViewModel({ mail, @@ -246,19 +274,20 @@ export class MailViewModel { } else { this.conversationViewModel?.dispose() this.conversationViewModel = null - this.mailListToSelectedMail = mapWithout(this.mailListToSelectedMail, assertNotNull(this.getListId())) + this.mailFolderToSelectedMail = mapWithout(this.mailFolderToSelectedMail, assertNotNull(this.getFolder())) } this.updateUrl() this.updateUi() } private updateUrl() { - const listId = this._listId - const mailId = this.targetMailId ?? (listId ? this.getMailListToSelectedMail().get(listId) : null) + const folder = this._folder + const folderId = folder ? getElementId(folder) : null + const mailId = this.targetMailId ?? (folder ? this.getMailFolderToSelectedMail().get(folder) : null) if (mailId != null) { - this.router.routeTo("/mail/:listId/:mailId", { listId, mailId }) + this.router.routeTo("/mail/:folderId/:mailId", { folderId, mailId }) } else { - this.router.routeTo("/mail/:listId", { listId: listId ?? "" }) + this.router.routeTo("/mail/:folderId", { folderId: folderId ?? "" }) } } @@ -267,18 +296,120 @@ export class MailViewModel { this.conversationViewModel = this.conversationViewModelFactory(viewModelParams) } - async entityEventsReceived(updates: ReadonlyArray) { + async entityEventsReceivedForLegacy(updates: ReadonlyArray) { for (const update of updates) { - if (isUpdateForTypeRef(MailTypeRef, update) && update.instanceListId === this._listId) { - await this.listModel?.entityEventReceived(update.instanceId, update.operation) + if (isUpdateForTypeRef(MailTypeRef, update) && update.instanceListId === this._folder?.mails) { + await this.listModel?.entityEventReceived(update.instanceListId, update.instanceId, update.operation) + } + } + } + + async entityEventsReceived(updates: ReadonlyArray) { + const folder = this._folder + const listModel = this.listModel + + if (!folder || !listModel) { + return + } + if (!folder.isMailSet) { + return this.entityEventsReceivedForLegacy(updates) + } + + let [mailEvent, oldEntryEvent, newEntryEvent]: EntityUpdateData[] = [] + for (const event of updates) { + if (isUpdateForTypeRef(MailTypeRef, event)) { + mailEvent = event + } else if (isUpdateForTypeRef(MailSetEntryTypeRef, event)) { + if (event.operation == OperationType.DELETE) { + oldEntryEvent = event + } else { + newEntryEvent = event + } + } + } + + if (isSameId(folder.entries, newEntryEvent?.instanceListId)) { + await this.listModel?.entityEventReceived(mailEvent.instanceListId, mailEvent.instanceId, OperationType.CREATE) + } else if (isSameId(folder.entries, oldEntryEvent?.instanceListId)) { + await this.listModel?.entityEventReceived(mailEvent.instanceListId, mailEvent.instanceId, OperationType.DELETE) + } else if (mailEvent && !oldEntryEvent && !newEntryEvent) { + const mail = await this.entityClient.load(MailTypeRef, [mailEvent.instanceListId, mailEvent.instanceId]) + if (mail.sets.some((id) => isSameId(elementIdPart(id), getElementId(folder)))) { + await this.listModel?.entityEventReceived(mailEvent.instanceListId, mailEvent.instanceId, mailEvent.operation) + } + } + } + + private async loadMailRange(folder: MailFolder, start: Id, count: number): Promise> { + if (folder.isMailSet) { + return await this.loadMailSetMailRange(folder, start, count) + } else { + return await this.loadLegacyMailRange(folder, start, count) + } + } + + private async loadMailSetMailRange(folder: MailFolder, start: string, count: number) { + try { + const loadMailSetEntries = () => this.entityClient.loadRange(MailSetEntryTypeRef, folder.entries, start, count, true) + const loadMails = (listId: Id, mailIds: Array) => this.entityClient.loadMultiple(MailTypeRef, listId, mailIds) + + const mails = await this.acquireMails(loadMailSetEntries, loadMails) + const mailboxDetail = await this.mailModel.getMailboxDetailsForMailFolder(folder) + // For inbox rules there are two points where we might want to apply them. The first one is MailModel which applied inbox rules as they are received + // in real time. The second one is here, when we load emails in inbox. If they are unread we want to apply inbox rules to them. If inbox rule + // applies, the email is moved out of the inbox and we don't return it here. + if (mailboxDetail) { + const mailsToKeepInInbox = await promiseFilter(mails, async (mail) => { + const wasMatched = await this.inboxRuleHandler.findAndApplyMatchingRule(mailboxDetail, mail, true) + return !wasMatched + }) + return { items: mailsToKeepInInbox, complete: mails.length < count } + } else { + return { items: mails, complete: mails.length < count } } + } catch (e) { + // The way the cache works is that it tries to fulfill the API contract of returning as many items as requested as long as it can. + // This is problematic for offline where we might not have the full page of emails loaded (e.g. we delete part as it's too old or we move emails + // around). Because of that cache will try to load additional items from the server in order to return `count` items. If it fails to load them, + // it will not return anything and instead will throw an error. + // This is generally fine but in case of offline we want to display everything that we have cached. For that we fetch directly from the cache, + // give it to the list and let list make another request (and almost certainly fail that request) to show a retry button. This way we both show + // the items we have and also show that we couldn't load everything. + if (isOfflineError(e)) { + const loadMailSetEntries = () => this.cacheStorage.provideFromRange(MailSetEntryTypeRef, folder.entries, start, count, true) + const loadMails = (listId: Id, mailIds: Array) => this.cacheStorage.provideMultiple(MailTypeRef, listId, mailIds) + const items = await this.acquireMails(loadMailSetEntries, loadMails) + if (items.length === 0) throw e + return { items, complete: false } + } else { + throw e + } + } + } + + /** + * Load mails either from remote or from offline storage. Loader functions must be implemented for each use case. + */ + private async acquireMails(loadMailSetEntries: () => Promise, loadMails: (listId: Id, mailIds: Array) => Promise) { + const mailSetEntries = await loadMailSetEntries() + const mailListIdToMailIds = groupByAndMap( + mailSetEntries, + (mse) => listIdPart(mse.mail), + (mse) => elementIdPart(mse.mail), + ) + const mails: Array = [] + for (const [listId, mailIds] of mailListIdToMailIds) { + mails.push(...(await loadMails(listId, mailIds))) } + mails.sort((a, b) => b.receivedDate.getTime() - a.receivedDate.getTime()) + return mails } - private async loadMailRange(listId: Id, start: Id, count: number): Promise> { + private async loadLegacyMailRange(folder: MailFolder, start: string, count: number) { + const listId = folder.mails try { const items = await this.entityClient.loadRange(MailTypeRef, listId, start, count, true) - const mailboxDetail = await this.mailModel.getMailboxDetailsForMailListId(listId) + const mailboxDetail = await this.mailModel.getMailboxDetailsForMailFolder(folder) // For inbox rules there are two points where we might want to apply them. The first one is MailModel which applied inbox rules as they are received // in real time. The second one is here, when we load emails in inbox. If they are unread we want to apply inbox rules to them. If inbox rule // applies, the email is moved out of the inbox and we don't return it here. @@ -309,46 +440,39 @@ export class MailViewModel { } } - async switchToFolder(folderType: Omit): Promise { + async switchToFolder(folderType: Omit): Promise { const mailboxDetail = assertNotNull(await this.getMailboxDetails()) - const listId = assertSystemFolderOfType(mailboxDetail.folders, folderType).mails - await this.showMail(listId, this.mailListToSelectedMail.get(listId)) + const folder = assertSystemFolderOfType(mailboxDetail.folders, folderType) + await this.showMail(folder, this.mailFolderToSelectedMail.get(folder)) } async getMailboxDetails(): Promise { - const listId = this.getListId() - return await this.mailboxDetailForListWithFallback(listId) - } - - getSelectedFolder(): MailFolder | null { - const listId = this.getListId() - return listId ? this.mailModel.getMailFolder(listId) : null + const folder = this.getFolder() + return await this.mailboxDetailForListWithFallback(folder) } async showingDraftsFolder(): Promise { - if (!this._listId) return false - const mailboxDetail = await this.mailModel.getMailboxDetailsForMailListId(this._listId) - const selectedFolder = this.getSelectedFolder() + if (!this._folder) return false + const mailboxDetail = await this.mailModel.getMailboxDetailsForMailFolder(this._folder) + const selectedFolder = this.getFolder() if (selectedFolder && mailboxDetail) { - return isOfTypeOrSubfolderOf(mailboxDetail.folders, selectedFolder, MailFolderType.DRAFT) + return isOfTypeOrSubfolderOf(mailboxDetail.folders, selectedFolder, MailSetKind.DRAFT) } else { return false } } async showingTrashOrSpamFolder(): Promise { - const listId = this._listId - if (!listId) return false - const folder = await this.mailModel.getMailFolder(listId) + const folder = this.getFolder() if (!folder) { return false } - const mailboxDetail = await this.mailModel.getMailboxDetailsForMailListId(listId) + const mailboxDetail = await this.mailModel.getMailboxDetailsForMailFolder(folder) return mailboxDetail != null && isSpamOrTrashFolder(mailboxDetail.folders, folder) } - private async mailboxDetailForListWithFallback(listId?: string | null) { - const mailboxDetailForListId = typeof listId === "string" ? await this.mailModel.getMailboxDetailsForMailListId(listId) : null + private async mailboxDetailForListWithFallback(folder?: MailFolder | null) { + const mailboxDetailForListId = folder ? await this.mailModel.getMailboxDetailsForMailFolder(folder) : null return mailboxDetailForListId ?? (await this.mailModel.getUserMailboxDetails()) } @@ -359,16 +483,13 @@ export class MailViewModel { const mailboxDetail = await this.getMailboxDetails() // the request is handled a little differently if it is the system folder vs a subfolder - if (folder.folderType === MailFolderType.TRASH || folder.folderType === MailFolderType.SPAM) { + if (folder.folderType === MailSetKind.TRASH || folder.folderType === MailSetKind.SPAM) { return this.mailModel.clearFolder(folder).catch( ofClass(PreconditionFailedError, () => { throw new UserError("operationStillActive_msg") }), ) - } else if ( - isSubfolderOfType(mailboxDetail.folders, folder, MailFolderType.TRASH) || - isSubfolderOfType(mailboxDetail.folders, folder, MailFolderType.SPAM) - ) { + } else if (isSubfolderOfType(mailboxDetail.folders, folder, MailSetKind.TRASH) || isSubfolderOfType(mailboxDetail.folders, folder, MailSetKind.SPAM)) { return this.mailModel.finallyDeleteCustomMailFolder(folder).catch( ofClass(PreconditionFailedError, () => { throw new UserError("operationStillActive_msg") diff --git a/src/mail-app/mail/view/MailViewer.ts b/src/mail-app/mail/view/MailViewer.ts index ed7744cf3e82..f99f0cc07747 100644 --- a/src/mail-app/mail/view/MailViewer.ts +++ b/src/mail-app/mail/view/MailViewer.ts @@ -2,7 +2,7 @@ import { px, size } from "../../../common/gui/size" import m, { Children, Component, Vnode } from "mithril" import stream from "mithril/stream" import { windowFacade, windowSizeListener } from "../../../common/misc/WindowFacade" -import { FeatureType, InboxRuleType, Keys, MailFolderType, SpamRuleFieldType, SpamRuleType } from "../../../common/api/common/TutanotaConstants" +import { FeatureType, InboxRuleType, Keys, MailSetKind, SpamRuleFieldType, SpamRuleType } from "../../../common/api/common/TutanotaConstants" import { File as TutanotaFile, Mail } from "../../../common/api/entities/tutanota/TypeRefs.js" import { lang } from "../../../common/misc/LanguageViewModel" import { assertMainOrNode } from "../../../common/api/common/Env" @@ -20,7 +20,6 @@ import { replaceCidsWithInlineImages } from "./MailGuiUtils" import { getCoordsOfMouseOrTouchEvent } from "../../../common/gui/base/GuiUtils" import { copyToClipboard } from "../../../common/misc/ClipboardUtils" import { ContentBlockingStatus, MailViewerViewModel } from "./MailViewerViewModel" -import { getListId } from "../../../common/api/common/utils/EntityUtils" import { createEmailSenderListElement } from "../../../common/api/entities/sys/TypeRefs.js" import { UserError } from "../../../common/api/main/UserError" import { showUserError } from "../../../common/misc/ErrorHandlerImpl" @@ -33,8 +32,7 @@ import { locator } from "../../../common/api/main/CommonLocator.js" import { PinchZoom } from "../../../common/gui/PinchZoom.js" import { responsiveCardHMargin, responsiveCardHPadding } from "../../../common/gui/cards.js" import { Dialog } from "../../../common/gui/base/Dialog.js" -import { createNewContact, getExistingRuleForType } from "../../../common/mailFunctionality/SharedMailUtils.js" -import { isTutanotaTeamMail } from "../../../common/mailFunctionality/SharedMailUtils.js" +import { createNewContact, getExistingRuleForType, isTutanotaTeamMail } from "../../../common/mailFunctionality/SharedMailUtils.js" assertMainOrNode() @@ -655,9 +653,9 @@ export class MailViewer implements Component { } private addSpamRule(defaultInboxRuleField: InboxRuleType | null, address: string) { - const folder = this.viewModel.mailModel.getMailFolder(getListId(this.viewModel.mail)) + const folder = this.viewModel.mailModel.getMailFolderForMail(this.viewModel.mail) - const spamRuleType = folder && folder.folderType === MailFolderType.SPAM ? SpamRuleType.WHITELIST : SpamRuleType.BLACKLIST + const spamRuleType = folder && folder.folderType === MailSetKind.SPAM ? SpamRuleType.WHITELIST : SpamRuleType.BLACKLIST let spamRuleField: SpamRuleFieldType switch (defaultInboxRuleField) { diff --git a/src/mail-app/mail/view/MailViewerViewModel.ts b/src/mail-app/mail/view/MailViewerViewModel.ts index e6b5571cbfc2..8b7ed3478b93 100644 --- a/src/mail-app/mail/view/MailViewerViewModel.ts +++ b/src/mail-app/mail/view/MailViewerViewModel.ts @@ -13,10 +13,10 @@ import { ExternalImageRule, FeatureType, MailAuthenticationStatus, - MailFolderType, MailMethod, MailPhishingStatus, MailReportType, + MailSetKind, MailState, OperationType, } from "../../../common/api/common/TutanotaConstants" @@ -42,7 +42,7 @@ import { lang } from "../../../common/misc/LanguageViewModel" import { LoginController } from "../../../common/api/main/LoginController" import m from "mithril" import { LockedError, NotAuthorizedError, NotFoundError } from "../../../common/api/common/error/RestError" -import { getListId, haveSameId, isSameId } from "../../../common/api/common/utils/EntityUtils" +import { haveSameId, isSameId } from "../../../common/api/common/utils/EntityUtils" import { getReferencedAttachments, loadInlineImages, moveMails } from "./MailGuiUtils" import { SanitizedFragment } from "../../../common/misc/HtmlSanitizer" import { CALENDAR_MIME_TYPE, FileController } from "../../../common/file/FileController" @@ -69,16 +69,18 @@ import { AttachmentType, getAttachmentType } from "../../../common/gui/Attachmen import type { ContactImporter } from "../../contacts/ContactImporter.js" import { InlineImages, revokeInlineImages } from "../../../common/mailFunctionality/inlineImagesUtils.js" import { - getPathToFolderString, + assertSystemFolderOfType, + getDefaultSender, getEnabledMailAddressesWithUser, - getMailboxName, getFolderName, + getMailboxName, + getPathToFolderString, + isNoReplyTeamAddress, + isSystemNotification, + isTutanotaTeamMail, loadMailDetails, loadMailHeaders, - getDefaultSender, - assertSystemFolderOfType, } from "../../../common/mailFunctionality/SharedMailUtils.js" -import { isSystemNotification, isTutanotaTeamMail, isNoReplyTeamAddress } from "../../../common/mailFunctionality/SharedMailUtils.js" import { getDisplayedSender, getMailBodyText, MailAddressAndName } from "../../../common/api/common/CommonMailUtils.js" export const enum ContentBlockingStatus { @@ -198,7 +200,7 @@ export class MailViewerViewModel { private showFolder() { this.folderMailboxText = null - const folder = this.mailModel.getMailFolder(this.mail._id[0]) + const folder = this.mailModel.getMailFolderForMail(this.mail) if (folder) { this.mailModel.getMailboxDetailsForMail(this.mail).then((mailboxDetails) => { @@ -310,10 +312,10 @@ export class MailViewerViewModel { return this.folderMailboxText } - getFolderInfo(): { folderType: MailFolderType; name: string } | null { - const folder = this.mailModel.getMailFolder(getListId(this.mail)) + getFolderInfo(): { folderType: MailSetKind; name: string } | null { + const folder = this.mailModel.getMailFolderForMail(this.mail) if (!folder) return null - return { folderType: folder.folderType as MailFolderType, name: getFolderName(folder) } + return { folderType: folder.folderType as MailSetKind, name: getFolderName(folder) } } getSubject(): string { @@ -512,7 +514,7 @@ export class MailViewerViewModel { if (mailboxDetail == null) { return } - const spamFolder = assertSystemFolderOfType(mailboxDetail.folders, MailFolderType.SPAM) + const spamFolder = assertSystemFolderOfType(mailboxDetail.folders, MailSetKind.SPAM) // do not report moved mails again await moveMails({ mailModel: this.mailModel, mails: [this.mail], targetMailFolder: spamFolder, isReportable: false }) } catch (e) { diff --git a/src/mail-app/search/model/SearchModel.ts b/src/mail-app/search/model/SearchModel.ts index 7d89d1cdc9fd..ffa3bf59cbf3 100644 --- a/src/mail-app/search/model/SearchModel.ts +++ b/src/mail-app/search/model/SearchModel.ts @@ -153,7 +153,7 @@ export class SearchModel { continue } - if (restriction.listIds.length > 0 && !restriction.listIds.includes(listIdPart(event._id))) { + if (restriction.folderIds.length > 0 && !restriction.folderIds.includes(listIdPart(event._id))) { // check that the event is in the searched calendar. continue } @@ -255,7 +255,7 @@ export function isSameSearchRestriction(a: SearchRestriction, b: SearchRestricti a.field === b.field && isSameAttributeIds && (a.eventSeries === b.eventSeries || (a.eventSeries === null && b.eventSeries === true) || (a.eventSeries === true && b.eventSeries === null)) && - arrayEquals(a.listIds, b.listIds) + arrayEquals(a.folderIds, b.folderIds) ) } diff --git a/src/mail-app/search/model/SearchUtils.ts b/src/mail-app/search/model/SearchUtils.ts index d3d67502f28c..2cdfba4567b4 100644 --- a/src/mail-app/search/model/SearchUtils.ts +++ b/src/mail-app/search/model/SearchUtils.ts @@ -139,8 +139,8 @@ export function getSearchParameters( if (restriction.end) { params.end = restriction.end } - if (restriction.listIds.length > 0) { - params.list = restriction.listIds + if (restriction.folderIds.length > 0) { + params.folder = restriction.folderIds } if (restriction.field) { params.field = restriction.field @@ -167,14 +167,14 @@ export function createRestriction( start: number | null, end: number | null, field: string | null, - listIds: Array, + folderIds: Array, eventSeries: boolean | null, ): SearchRestriction { if (locator.logins.getUserController().isFreeAccount() && searchCategory === SearchCategoryTypes.mail) { start = null end = getFreeSearchStartDate().getTime() field = null - listIds = [] + folderIds = [] eventSeries = null } @@ -184,7 +184,7 @@ export function createRestriction( end: end, field: null, attributeIds: null, - listIds, + folderIds, eventSeries, } @@ -226,7 +226,7 @@ export function getRestriction(route: string): SearchRestriction { let start: number | null = null let end: number | null = null let field: string | null = null - let listIds: Array = [] + let folderIds: Array = [] let eventSeries: boolean | null = null if (route.startsWith("/mail") || route.startsWith("/search/mail")) { @@ -249,8 +249,8 @@ export function getRestriction(route: string): SearchRestriction { field = SEARCH_MAIL_FIELDS.find((f) => f.field === fieldString)?.field ?? null } - if (Array.isArray(params["list"])) { - listIds = params["list"] + if (Array.isArray(params["folder"])) { + folderIds = params["folder"] } } catch (e) { console.log("invalid query: " + route, e) @@ -274,9 +274,9 @@ export function getRestriction(route: string): SearchRestriction { end = filterInt(params["end"]) } - const list = params["list"] - if (Array.isArray(list)) { - listIds = list + const folder = params["folder"] + if (Array.isArray(folder)) { + folderIds = folder } } catch (e) { console.log("invalid query: " + route, e) @@ -298,7 +298,7 @@ export function getRestriction(route: string): SearchRestriction { throw new Error("invalid type " + route) } - return createRestriction(category, start, end, field, listIds, eventSeries) + return createRestriction(category, start, end, field, folderIds, eventSeries) } export function decodeCalendarSearchKey(searchKey: string): { id: Id; start: number } { diff --git a/src/mail-app/search/view/SearchView.ts b/src/mail-app/search/view/SearchView.ts index 20db135c367f..36c9b9daffa7 100644 --- a/src/mail-app/search/view/SearchView.ts +++ b/src/mail-app/search/view/SearchView.ts @@ -3,7 +3,7 @@ import { ViewSlider } from "../../../common/gui/nav/ViewSlider.js" import { ColumnType, ViewColumn } from "../../../common/gui/base/ViewColumn" import type { TranslationKey } from "../../../common/misc/LanguageViewModel" import { lang } from "../../../common/misc/LanguageViewModel" -import { FeatureType, Keys, MailFolderType } from "../../../common/api/common/TutanotaConstants" +import { FeatureType, Keys, MailSetKind } from "../../../common/api/common/TutanotaConstants" import { assertMainOrNode } from "../../../common/api/common/Env" import { keyManager, Shortcut } from "../../../common/misc/KeyManager" import { NavButton, NavButtonColor } from "../../../common/gui/base/NavButton.js" @@ -648,11 +648,12 @@ export class SearchView extends BaseTopLevelView implements TopLevelView, requestedPath: string) { @@ -279,13 +279,13 @@ export class SearchViewModel { this.selectedMailField = restriction.field this.startDate = restriction.end ? new Date(restriction.end) : null this.endDate = restriction.start ? new Date(restriction.start) : null - this.selectedMailFolder = restriction.listIds + this.selectedMailFolder = restriction.folderIds this.loadAndSelectIfNeeded(args.id) this.latestMailRestriction = restriction } else if (isSameTypeRef(restriction.type, CalendarEventTypeRef)) { this.startDate = restriction.start ? new Date(restriction.start) : null this.endDate = restriction.end ? new Date(restriction.end) : null - this.selectedCalendar = this.extractCalendarListIds(restriction.listIds) + this.selectedCalendar = this.extractCalendarListIds(restriction.folderIds) this.includeRepeatingEvents = restriction.eventSeries ?? true this.lazyCalendarInfos.load() this.latestCalendarRestriction = restriction @@ -555,8 +555,8 @@ export class SearchViewModel { // if selected folder no longer exist select another one const selectedMailFolder = this.selectedMailFolder - if (selectedMailFolder[0] && mailboxes.every((mailbox) => mailbox.folders.getFolderByMailListId(selectedMailFolder[0]) == null)) { - this.selectedMailFolder = [assertNotNull(mailboxes[0].folders.getSystemFolderByType(MailFolderType.INBOX)).mails] + if (selectedMailFolder[0] && mailboxes.every((mailbox) => mailbox.folders.getFolderById(selectedMailFolder[0]) == null)) { + this.selectedMailFolder = [getElementId(assertNotNull(mailboxes[0].folders.getSystemFolderByType(MailSetKind.INBOX)))] } } @@ -578,8 +578,8 @@ export class SearchViewModel { (email) => update.instanceId === elementIdPart(email) && update.instanceListId !== listIdPart(email), ) if (index >= 0) { - const restrictionLength = this._searchResult.restriction.listIds.length - if ((restrictionLength > 0 && this._searchResult.restriction.listIds.includes(update.instanceListId)) || restrictionLength === 0) { + const restrictionLength = this._searchResult.restriction.folderIds.length + if ((restrictionLength > 0 && this._searchResult.restriction.folderIds.includes(update.instanceListId)) || restrictionLength === 0) { // We need to update the listId of the updated item, since it was moved to another folder. const newIdTuple: IdTuple = [update.instanceListId, update.instanceId] this._searchResult.results[index] = newIdTuple @@ -608,7 +608,7 @@ export class SearchViewModel { } this.listModel.getUnfilteredAsArray() - await this.listModel.entityEventReceived(instanceId, operation) + await this.listModel.entityEventReceived(instanceListId, instanceId, operation) // run the mail or contact update after the update on the list is finished to avoid parallel loading if (operation === OperationType.UPDATE && this.listModel?.isItemSelected(elementIdPart(id))) { try { @@ -705,12 +705,12 @@ export class SearchViewModel { return { items: entries, complete } }, - loadSingle: async (elementId: Id) => { + loadSingle: async (_listId: Id, elementId: Id) => { const lastResult = this._searchResult if (!lastResult) { return null } - const id = lastResult.results.find((r) => r[1] === elementId) + const id = lastResult.results.find((resultId) => elementIdPart(resultId) === elementId) if (id) { return this.entityClient .load(lastResult.restriction.type, id) @@ -743,7 +743,7 @@ export class SearchViewModel { if (result && isSameTypeRef(typeRef, result.restriction.type)) { // The list id must be null/empty, otherwise the user is filtering by list, and it shouldn't be ignored - const ignoreList = isSameTypeRef(typeRef, MailTypeRef) && result.restriction.listIds.length === 0 + const ignoreList = isSameTypeRef(typeRef, MailTypeRef) && result.restriction.folderIds.length === 0 return result.results.some((r) => this.compareItemId(r, id, ignoreList)) } diff --git a/src/mail-app/settings/AddInboxRuleDialog.ts b/src/mail-app/settings/AddInboxRuleDialog.ts index 519f544c774e..c45de779a6e9 100644 --- a/src/mail-app/settings/AddInboxRuleDialog.ts +++ b/src/mail-app/settings/AddInboxRuleDialog.ts @@ -1,7 +1,7 @@ import m from "mithril" import { Dialog } from "../../common/gui/base/Dialog" import { lang, TranslationKey } from "../../common/misc/LanguageViewModel" -import { InboxRuleType, MailFolderType } from "../../common/api/common/TutanotaConstants" +import { InboxRuleType, MailSetKind } from "../../common/api/common/TutanotaConstants" import { isDomainName, isMailAddress, isRegularExpression } from "../../common/misc/FormatValidator" import { getInboxRuleTypeNameMapping } from "../mail/model/InboxRuleHandler" import type { InboxRule } from "../../common/api/entities/tutanota/TypeRefs.js" @@ -13,7 +13,7 @@ import { TextField } from "../../common/gui/base/TextField.js" import { neverNull } from "@tutao/tutanota-utils" import { LockedError } from "../../common/api/common/error/RestError" import { showNotAvailableForFreeDialog } from "../../common/misc/SubscriptionDialogs" -import { isSameId } from "../../common/api/common/utils/EntityUtils" +import { elementIdPart, isSameId } from "../../common/api/common/utils/EntityUtils" import { assertMainOrNode } from "../../common/api/common/Env" import { locator } from "../../common/api/main/CommonLocator" import { isOfflineError } from "../../common/api/common/utils/ErrorUtils.js" @@ -41,8 +41,8 @@ export function show(mailBoxDetail: MailboxDetail, ruleOrTemplate: InboxRuleTemp }) const inboxRuleType = stream(ruleOrTemplate.type) const inboxRuleValue = stream(ruleOrTemplate.value) - const selectedFolder = ruleOrTemplate.targetFolder == null ? null : mailBoxDetail.folders.getFolderById(ruleOrTemplate.targetFolder) - const inboxRuleTarget = stream(selectedFolder ?? assertSystemFolderOfType(mailBoxDetail.folders, MailFolderType.ARCHIVE)) + const selectedFolder = ruleOrTemplate.targetFolder == null ? null : mailBoxDetail.folders.getFolderById(elementIdPart(ruleOrTemplate.targetFolder)) + const inboxRuleTarget = stream(selectedFolder ?? assertSystemFolderOfType(mailBoxDetail.folders, MailSetKind.ARCHIVE)) let form = () => [ m(DropDownSelector, { diff --git a/src/mail-app/settings/KnowledgeBaseListView.ts b/src/mail-app/settings/KnowledgeBaseListView.ts index 52c59a3d73e8..146c185b3c33 100644 --- a/src/mail-app/settings/KnowledgeBaseListView.ts +++ b/src/mail-app/settings/KnowledgeBaseListView.ts @@ -98,7 +98,7 @@ export class KnowledgeBaseListView implements UpdatableSettingsViewer { throw new Error("fetch knowledgeBase entry called for specific start id") } }, - loadSingle: (elementId) => { + loadSingle: (_listId: Id, elementId: Id) => { return this.entityClient.load(KnowledgeBaseEntryTypeRef, [this.getListId(), elementId]) }, autoSelectBehavior: () => ListAutoSelectBehavior.OLDER, @@ -172,7 +172,7 @@ export class KnowledgeBaseListView implements UpdatableSettingsViewer { async entityEventsReceived(updates: ReadonlyArray): Promise { for (const update of updates) { if (isUpdateForTypeRef(KnowledgeBaseEntryTypeRef, update) && isSameId(this.getListId(), update.instanceListId)) { - await this.listModel.entityEventReceived(update.instanceId, update.operation) + await this.listModel.entityEventReceived(update.instanceListId, update.instanceId, update.operation) } } diff --git a/src/mail-app/settings/MailSettingsViewer.ts b/src/mail-app/settings/MailSettingsViewer.ts index 6b55fd77da4c..a55909e91fbb 100644 --- a/src/mail-app/settings/MailSettingsViewer.ts +++ b/src/mail-app/settings/MailSettingsViewer.ts @@ -48,6 +48,7 @@ import { EntityUpdateData, isUpdateForTypeRef } from "../../common/api/common/ut import { getDefaultSenderFromUser, getFolderName, getMailAddressDisplayText } from "../../common/mailFunctionality/SharedMailUtils.js" import { UpdatableSettingsViewer } from "../../common/settings/Interfaces.js" import { mailLocator } from "../mailLocator.js" +import { elementIdPart } from "../../common/api/common/utils/EntityUtils.js" assertMainOrNode() @@ -479,7 +480,7 @@ export class MailSettingsViewer implements UpdatableSettingsViewer { } _getTextForTarget(mailboxDetail: MailboxDetail, targetFolderId: IdTuple): string { - let folder = mailboxDetail.folders.getFolderById(targetFolderId) + let folder = mailboxDetail.folders.getFolderById(elementIdPart(targetFolderId)) if (folder) { return getFolderName(folder) diff --git a/src/mail-app/settings/SettingsView.ts b/src/mail-app/settings/SettingsView.ts index 1db100a6b523..cd882a1a0a99 100644 --- a/src/mail-app/settings/SettingsView.ts +++ b/src/mail-app/settings/SettingsView.ts @@ -821,6 +821,7 @@ function showRenameTemplateListDialog(instance: TemplateGroupInstance) { group: getEtId(instance.group), color: "", name: newName, + defaultAlarmsList: [], }) logins.getUserController().userSettingsGroupRoot.groupSettings.push(newSettings) } diff --git a/src/mail-app/settings/TemplateListView.ts b/src/mail-app/settings/TemplateListView.ts index 4b834d708ea3..902ed4a2e33b 100644 --- a/src/mail-app/settings/TemplateListView.ts +++ b/src/mail-app/settings/TemplateListView.ts @@ -97,7 +97,7 @@ export class TemplateListView implements UpdatableSettingsViewer { throw new Error("fetch template entry called for specific start id") } }, - loadSingle: (elementId) => { + loadSingle: (_listId: Id, elementId: Id) => { return this.entityClient.load(EmailTemplateTypeRef, [this.templateListId(), elementId]) }, autoSelectBehavior: () => ListAutoSelectBehavior.OLDER, @@ -170,8 +170,9 @@ export class TemplateListView implements UpdatableSettingsViewer { async entityEventsReceived(updates: ReadonlyArray): Promise { for (const update of updates) { - if (isUpdateForTypeRef(EmailTemplateTypeRef, update) && isSameId(this.templateListId(), update.instanceListId)) { - await this.listModel.entityEventReceived(update.instanceId, update.operation) + const { instanceListId, instanceId, operation } = update + if (isUpdateForTypeRef(EmailTemplateTypeRef, update) && isSameId(this.templateListId(), instanceListId)) { + await this.listModel.entityEventReceived(instanceListId, instanceId, operation) } } // we need to make another search in case items have changed diff --git a/src/mail-app/settings/groups/GroupListView.ts b/src/mail-app/settings/groups/GroupListView.ts index 33d612baf8ed..6366f306c3f8 100644 --- a/src/mail-app/settings/groups/GroupListView.ts +++ b/src/mail-app/settings/groups/GroupListView.ts @@ -147,7 +147,7 @@ export class GroupListView implements UpdatableSettingsViewer { const { instanceListId, instanceId, operation } = update if (isUpdateForTypeRef(GroupInfoTypeRef, update) && this.listId.getSync() === instanceListId) { - await this.listModel.entityEventReceived(instanceId, operation) + await this.listModel.entityEventReceived(instanceListId, instanceId, operation) } else if (isUpdateForTypeRef(GroupMemberTypeRef, update)) { this.localAdminGroupMemberships = locator.logins.getUserController().getLocalAdminGroupMemberships() this.listModel.reapplyFilter() @@ -171,7 +171,7 @@ export class GroupListView implements UpdatableSettingsViewer { throw new Error("fetch user group infos called for specific start id") } }, - loadSingle: async (elementId) => { + loadSingle: async (_listId: Id, elementId: Id) => { const listId = await this.listId.getAsync() try { return await locator.entityClient.load(GroupInfoTypeRef, [listId, elementId]) diff --git a/test/tests/api/worker/EventBusClientTest.ts b/test/tests/api/worker/EventBusClientTest.ts index 3fde7846d957..dda201bf890c 100644 --- a/test/tests/api/worker/EventBusClientTest.ts +++ b/test/tests/api/worker/EventBusClientTest.ts @@ -250,7 +250,7 @@ o.spec("EventBusClientTest", function () { }) o("on counter update it send message to the main thread", async function () { - const counterUpdate = createCounterData({ mailGroupId: "group1", counterValue: 4, listId: "list1" }) + const counterUpdate = createCounterData({ mailGroupId: "group1", counterValue: 4, counterId: "list1" }) await ebc.connect(ConnectMode.Initial) await socket.onmessage?.({ @@ -315,9 +315,9 @@ o.spec("EventBusClientTest", function () { return "entityUpdate;" + JSON.stringify(event) } - type CounterMessageParams = { mailGroupId: Id; counterValue: number; listId: Id } + type CounterMessageParams = { mailGroupId: Id; counterValue: number; counterId: Id } - function createCounterData({ mailGroupId, counterValue, listId }: CounterMessageParams): WebsocketCounterData { + function createCounterData({ mailGroupId, counterValue, counterId }: CounterMessageParams): WebsocketCounterData { return createTestEntity(WebsocketCounterDataTypeRef, { _format: "0", mailGroup: mailGroupId, @@ -325,7 +325,7 @@ o.spec("EventBusClientTest", function () { createTestEntity(WebsocketCounterValueTypeRef, { _id: "counterupdateid", count: String(counterValue), - mailListId: listId, + counterId, }), ], }) diff --git a/test/tests/api/worker/offline/OfflineStorageTest.ts b/test/tests/api/worker/offline/OfflineStorageTest.ts index 0b38f32db084..5d5c56cb90b1 100644 --- a/test/tests/api/worker/offline/OfflineStorageTest.ts +++ b/test/tests/api/worker/offline/OfflineStorageTest.ts @@ -8,8 +8,10 @@ import { getDayShifted, getFirstOrThrow, getTypeId, lastThrow, mapNullable, prom import { DateProvider } from "../../../../../src/common/api/common/DateProvider.js" import { BodyTypeRef, + createMailFolderRef, FileTypeRef, Mail, + MailBoxTypeRef, MailDetailsBlob, MailDetailsBlobTypeRef, MailDetailsTypeRef, @@ -20,7 +22,7 @@ import { OfflineStorageMigrator } from "../../../../../src/common/api/worker/off import { InterWindowEventFacadeSendDispatcher } from "../../../../../src/common/native/common/generatedipc/InterWindowEventFacadeSendDispatcher.js" import * as fs from "node:fs" import { untagSqlObject } from "../../../../../src/common/api/worker/offline/SqlValue.js" -import { MailFolderType } from "../../../../../src/common/api/common/TutanotaConstants.js" +import { MailSetKind } from "../../../../../src/common/api/common/TutanotaConstants.js" import { BlobElementEntity, ElementEntity, ListElementEntity, SomeEntity } from "../../../../../src/common/api/common/EntityTypes.js" import { resolveTypeReference } from "../../../../../src/common/api/common/EntityFunctions.js" import { Type as TypeId } from "../../../../../src/common/api/common/EntityConstants.js" @@ -53,7 +55,7 @@ const nativePath = buildOptions.sqliteNativePath const database = "./testdatabase.sqlite" export const offlineDatabaseTestKey = Uint8Array.from([3957386659, 354339016, 3786337319, 3366334248]) -o.spec("OfflineStorage", function () { +o.spec("OfflineStorageDb", function () { const now = new Date("2022-01-01 00:00:00 UTC") const timeRangeDays = 10 const userId = "userId" @@ -189,6 +191,29 @@ o.spec("OfflineStorage", function () { const rangeAfter = await storage.getRangeForList(MailTypeRef, listId) o(rangeAfter).equals(null) }) + + o("provideMultiple", async function () { + const listId = "listId1" + const elementId1 = "id1" + const elementId2 = "id2" + const storableMail1 = createTestEntity(MailTypeRef, { _id: [listId, elementId1] }) + const storableMail2 = createTestEntity(MailTypeRef, { _id: [listId, elementId2] }) + + await storage.init({ userId: elementId1, databaseKey, timeRangeDays, forceNewDatabase: false }) + + let mails = await storage.provideMultiple(MailTypeRef, listId, [elementId1]) + o(mails).deepEquals([]) + + await storage.put(storableMail1) + + mails = await storage.provideMultiple(MailTypeRef, listId, [elementId1, elementId2]) + o(mails).deepEquals([storableMail1]) + + await storage.put(storableMail2) + + mails = await storage.provideMultiple(MailTypeRef, listId, [elementId1, elementId2]) + o(mails).deepEquals([storableMail1, storableMail2]) + }) }) o.spec("BlobElementType", function () { @@ -251,10 +276,13 @@ o.spec("OfflineStorage", function () { await storage.init({ userId, databaseKey, timeRangeDays, forceNewDatabase: false }) await insertEntity( - createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", spamFolderId], mails: spamListId, folderType: MailFolderType.SPAM }), + createTestEntity(MailBoxTypeRef, { _id: "mailboxId", currentMailBag: null, folders: createMailFolderRef({ folders: "mailFolderList" }) }), ) await insertEntity( - createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", trashFolderId], mails: trashListId, folderType: MailFolderType.TRASH }), + createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", spamFolderId], mails: spamListId, folderType: MailSetKind.SPAM }), + ) + await insertEntity( + createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", trashFolderId], mails: trashListId, folderType: MailSetKind.TRASH }), ) }) @@ -281,7 +309,13 @@ o.spec("OfflineStorage", function () { o("modified ranges will be shrunk", async function () { const upper = offsetId(2) const lower = offsetId(-2) - await insertEntity(createTestEntity(MailFolderTypeRef, { _id: ["mailFolderListId", "mailFolderId"], mails: listId })) + await insertEntity( + createTestEntity(MailFolderTypeRef, { + _id: ["mailFolderList", "mailFolderId"], + folderType: MailSetKind.INBOX, + mails: listId, + }), + ) await insertRange(MailTypeRef, listId, lower, upper) // Here we clear the excluded data @@ -349,7 +383,7 @@ o.spec("OfflineStorage", function () { _id: ["mailFolderList", trashSubfolderId], parentFolder: ["mailFolderList", trashFolderId], mails: trashSubfolderListId, - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, }), ) await insertEntity(spamMail) @@ -409,7 +443,7 @@ o.spec("OfflineStorage", function () { const afterMailDetails = createTestEntity(MailDetailsBlobTypeRef, { _id: afterMailDetailsId, details: createTestEntity(MailDetailsTypeRef) }) await insertEntity( - createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailFolderType.INBOX }), + createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailSetKind.INBOX }), ) await insertEntity(mailBefore) await insertEntity(mailAfter) @@ -435,7 +469,7 @@ o.spec("OfflineStorage", function () { const mail2 = createTestEntity(MailTypeRef, { _id: [inboxMailList, offsetId(-3)], mailDetails: mailDetailsId2 }) await insertEntity( - createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailFolderType.INBOX }), + createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailSetKind.INBOX }), ) await insertEntity(mail1) await insertEntity(mail2) @@ -469,7 +503,7 @@ o.spec("OfflineStorage", function () { }) await insertEntity( - createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailFolderType.INBOX }), + createTestEntity(MailFolderTypeRef, { _id: ["mailFolderList", "folderId"], mails: inboxMailList, folderType: MailSetKind.INBOX }), ) await insertEntity(mailBefore) await insertEntity(mailAfter) @@ -519,11 +553,17 @@ o.spec("OfflineStorage", function () { const oldIds = new IdGenerator(offsetId(-5)) const newIds = new IdGenerator(offsetId(5)) + const userMailbox = createTestEntity(MailBoxTypeRef, { + _id: "mailboxId", + currentMailBag: null, + folders: createMailFolderRef({ folders: "mailFolderList" }), + }) + const inboxListId = oldIds.getNext() const inboxFolder = createTestEntity(MailFolderTypeRef, { - _id: [userId, oldIds.getNext()], + _id: ["mailFolderList", oldIds.getNext()], mails: inboxListId, - folderType: MailFolderType.INBOX, + folderType: MailSetKind.INBOX, }) const { mails: oldInboxMails, mailDetailsBlobs: oldInboxMailDetailsBlobs } = createMailList( 3, @@ -543,9 +583,9 @@ o.spec("OfflineStorage", function () { const trashListId = oldIds.getNext() const trashFolder = createTestEntity(MailFolderTypeRef, { - _id: [userId, oldIds.getNext()], + _id: ["mailFolderList", oldIds.getNext()], mails: trashListId, - folderType: MailFolderType.TRASH, + folderType: MailSetKind.TRASH, }) const { mails: trashMails, mailDetailsBlobs: trashMailDetailsBlobs } = createMailList( 3, @@ -557,12 +597,13 @@ o.spec("OfflineStorage", function () { const spamListId = oldIds.getNext() const spamFolder = createTestEntity(MailFolderTypeRef, { - _id: [userId, oldIds.getNext()], + _id: ["mailFolderList", oldIds.getNext()], mails: spamListId, - folderType: MailFolderType.SPAM, + folderType: MailSetKind.SPAM, }) const everyEntity = [ + userMailbox, inboxFolder, trashFolder, spamFolder, diff --git a/test/tests/api/worker/search/MailIndexerTest.ts b/test/tests/api/worker/search/MailIndexerTest.ts index 35dbe62f2202..a95fbe166790 100644 --- a/test/tests/api/worker/search/MailIndexerTest.ts +++ b/test/tests/api/worker/search/MailIndexerTest.ts @@ -388,7 +388,6 @@ o.spec("MailIndexer test", () => { const indexer = mock(new MailIndexer(null as any, db, null as any, null as any, null as any, dateProvider, mailFacade), (mocked) => { mocked.indexMailboxes = spy(() => Promise.resolve()) mocked.mailIndexingEnabled = false - mocked._excludedListIds = [] mocked._getSpamFolder = (membership) => { o(membership).deepEquals(user.memberships[0]) @@ -398,11 +397,10 @@ o.spec("MailIndexer test", () => { await indexer.enableMailIndexing(user) o(indexer.indexMailboxes.invocations[0]).deepEquals([user, beforeNowInterval]) o(indexer.mailIndexingEnabled).equals(true) - o(indexer._excludedListIds).deepEquals([spamFolder.mails]) o(JSON.stringify(metadata)).equals( JSON.stringify({ [MetaData.mailIndexingEnabled]: true, - [MetaData.excludedListIds]: [spamFolder.mails], + [MetaData.excludedListIds]: [], }), ) }) @@ -414,7 +412,7 @@ o.spec("MailIndexer test", () => { if (key == MetaData.mailIndexingEnabled) { return Promise.resolve(true) } else if (key == MetaData.excludedListIds) { - return Promise.resolve([1, 2]) + return Promise.resolve([]) } throw new Error("wrong key / os") @@ -429,12 +427,10 @@ o.spec("MailIndexer test", () => { const indexer: any = new MailIndexer(null as any, db, null as any, null as any, null as any, dateProvider, mailFacade) indexer.indexMailboxes = spy() indexer.mailIndexingEnabled = false - indexer._excludedListIds = [] let user = createTestEntity(UserTypeRef) await await indexer.enableMailIndexing(user) o(indexer.indexMailboxes.callCount).equals(0) o(indexer.mailIndexingEnabled).equals(true) - o(indexer._excludedListIds).deepEquals([1, 2]) }) o("disableMailIndexing", function () { let db: Db = { @@ -445,10 +441,8 @@ o.spec("MailIndexer test", () => { } as any const indexer: any = new MailIndexer(null as any, db, null as any, null as any, null as any, dateProvider, mailFacade) indexer.mailIndexingEnabled = true - indexer._excludedListIds = [1] indexer.disableMailIndexing() o(indexer.mailIndexingEnabled).equals(false) - o(indexer._excludedListIds).deepEquals([]) // @ts-ignore o(db.dbFacade.deleteDatabase.callCount).equals(1) }) diff --git a/test/tests/api/worker/search/SearchFacadeTest.ts b/test/tests/api/worker/search/SearchFacadeTest.ts index c2c3694716c6..4e890a83d409 100644 --- a/test/tests/api/worker/search/SearchFacadeTest.ts +++ b/test/tests/api/worker/search/SearchFacadeTest.ts @@ -20,13 +20,15 @@ import { timestampToGeneratedId, } from "../../../../../src/common/api/common/utils/EntityUtils.js" import type { Base64 } from "@tutao/tutanota-utils" -import { downcast, groupBy, numberRange, splitInChunks } from "@tutao/tutanota-utils" +import { groupBy, numberRange, splitInChunks } from "@tutao/tutanota-utils" import { appendBinaryBlocks } from "../../../../../src/common/api/worker/search/SearchIndexEncoding.js" import { createSearchIndexDbStub, DbStub, DbStubTransaction } from "./DbStub.js" import type { BrowserData } from "../../../../../src/common/misc/ClientConstants.js" import { browserDataStub, createTestEntity } from "../../../TestUtils.js" import { aes256RandomKey, fixedIv } from "@tutao/tutanota-crypto" import { ElementDataOS, SearchIndexMetaDataOS, SearchIndexOS } from "../../../../../src/common/api/worker/search/IndexTables.js" +import { object, when } from "testdouble" +import { EntityClient } from "../../../../../src/common/api/common/EntityClient.js" type SearchIndexEntryWithType = SearchIndexEntry & { typeInfo: TypeInfo @@ -39,8 +41,9 @@ let dbKey const contactTypeInfo = typeRefToTypeInfo(ContactTypeRef) const mailTypeInfo = typeRefToTypeInfo(MailTypeRef) const browserData: BrowserData = browserDataStub -const entityClinet = downcast({}) +const entityClient: EntityClient = object() o.spec("SearchFacade test", () => { + let mail = createTestEntity(MailTypeRef) let user = createTestEntity(UserTypeRef) let id1 = "L0YED5d----1" let id2 = "L0YED5d----2" @@ -65,7 +68,7 @@ o.spec("SearchFacade test", () => { } as any, [], browserData, - entityClinet, + entityClient, ) } @@ -138,7 +141,7 @@ o.spec("SearchFacade test", () => { end: end ?? null, field: null, attributeIds: attributeIds ?? null, - listIds: listId != null ? [listId] : [], + folderIds: listId != null ? [listId] : [], eventSeries: true, } } @@ -239,16 +242,38 @@ o.spec("SearchFacade test", () => { [["listId2", id2]], ) }) - o("find listId", () => { + o("find folderId legacy MailFolders (non-static mail listIds)", () => { + let mail1 = createTestEntity(MailTypeRef, { _id: ["mailListId1", id1] }) + when(entityClient.load(MailTypeRef, mail1._id)).thenReturn(Promise.resolve(mail1)) + let mail2 = createTestEntity(MailTypeRef, { _id: ["mailListId2", id2] }) + when(entityClient.load(MailTypeRef, mail2._id)).thenReturn(Promise.resolve(mail2)) + return testSearch( [createKeyToIndexEntries("test", [createMailEntry(id1, 0, [0]), createMailEntry(id2, 0, [0])])], - [ - ["listId1", id1], - ["listId2", id2], - ], + [mail1._id, mail2._id], "test", - createMailRestriction(null, "listId2"), - [["listId2", id2]], + createMailRestriction(null, listIdPart(mail2._id)), + [mail2._id], + ) + }) + o("find folderId new MailSets (static mail listIds)", () => { + const mail1 = createTestEntity(MailTypeRef, { + _id: ["mailListId", id1], + sets: [["setListId", "folderId1"]], + }) + when(entityClient.load(MailTypeRef, mail1._id)).thenReturn(Promise.resolve(mail1)) + const mail2 = createTestEntity(MailTypeRef, { + _id: ["mailListId", id2], + sets: [["setListId", "folderId2"]], + }) + when(entityClient.load(MailTypeRef, mail2._id)).thenReturn(Promise.resolve(mail2)) + + return testSearch( + [createKeyToIndexEntries("test", [createMailEntry(id1, 0, [0]), createMailEntry(id2, 0, [0])])], + [mail1._id, mail2._id], + "test", + createMailRestriction(null, elementIdPart(mail2.sets[0])), + [mail2._id], ) }) o("find with start time", () => { diff --git a/test/tests/mail/MailModelTest.ts b/test/tests/mail/MailModelTest.ts index bf987e629e17..62edf6cec083 100644 --- a/test/tests/mail/MailModelTest.ts +++ b/test/tests/mail/MailModelTest.ts @@ -2,7 +2,7 @@ import o from "@tutao/otest" import { Notifications } from "../../../src/common/gui/Notifications.js" import type { Spy } from "@tutao/tutanota-test-utils" import { spy } from "@tutao/tutanota-test-utils" -import { MailFolderType, OperationType } from "../../../src/common/api/common/TutanotaConstants.js" +import { MailSetKind, OperationType } from "../../../src/common/api/common/TutanotaConstants.js" import { MailFolderTypeRef, MailTypeRef } from "../../../src/common/api/entities/tutanota/TypeRefs.js" import { EntityClient } from "../../../src/common/api/common/EntityClient.js" import { EntityRestClientMock } from "../api/worker/rest/EntityRestClientMock.js" @@ -18,30 +18,31 @@ import { createTestEntity } from "../TestUtils.js" import { EntityUpdateData } from "../../../src/common/api/common/utils/EntityUpdateUtils.js" import { MailboxDetail, MailModel } from "../../../src/common/mailFunctionality/MailModel.js" import { InboxRuleHandler } from "../../../src/mail-app/mail/model/InboxRuleHandler.js" +import { getElementId, getListId } from "../../../src/common/api/common/utils/EntityUtils.js" o.spec("MailModelTest", function () { let notifications: Partial let showSpy: Spy let model: MailModel - const inboxFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "inboxId"] }) + const inboxFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "inboxId"], isMailSet: false }) inboxFolder.mails = "instanceListId" - inboxFolder.folderType = MailFolderType.INBOX - const anotherFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "archiveId"] }) + inboxFolder.folderType = MailSetKind.INBOX + const anotherFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "archiveId"], isMailSet: false }) anotherFolder.mails = "anotherListId" - anotherFolder.folderType = MailFolderType.ARCHIVE + anotherFolder.folderType = MailSetKind.ARCHIVE let mailboxDetails: Partial[] let logins: LoginController let inboxRuleHandler: InboxRuleHandler + const restClient: EntityRestClientMock = new EntityRestClientMock() o.beforeEach(function () { mailboxDetails = [ { - folders: new FolderSystem([inboxFolder]), + folders: new FolderSystem([inboxFolder, anotherFolder]), }, ] notifications = {} showSpy = notifications.showNotification = spy() - const restClient = new EntityRestClientMock() const connectivityModel = object() const mailFacade = nodemocker.mock("mailFacade", {}).set() logins = object() @@ -55,10 +56,13 @@ o.spec("MailModelTest", function () { model.mailboxDetails(mailboxDetails as MailboxDetail[]) }) o("doesn't send notification for another folder", async function () { + const mail = createTestEntity(MailTypeRef, { _id: [anotherFolder.mails, "mailId"], sets: [] }) + restClient.addListInstances(mail) await model.entityEventsReceived( [ makeUpdate({ - instanceListId: anotherFolder.mails, + instanceListId: getListId(mail), + instanceId: getElementId(mail), operation: OperationType.CREATE, }), ], @@ -67,14 +71,18 @@ o.spec("MailModelTest", function () { o(showSpy.invocations.length).equals(0) }) o("doesn't send notification for move operation", async function () { + const mail = createTestEntity(MailTypeRef, { _id: [inboxFolder.mails, "mailId"], sets: [] }) + restClient.addListInstances(mail) await model.entityEventsReceived( [ makeUpdate({ - instanceListId: anotherFolder.mails, + instanceListId: getListId(mail), + instanceId: getElementId(mail), operation: OperationType.DELETE, }), makeUpdate({ - instanceListId: inboxFolder.mails, + instanceListId: getListId(mail), + instanceId: getElementId(mail), operation: OperationType.CREATE, }), ], @@ -83,7 +91,7 @@ o.spec("MailModelTest", function () { o(showSpy.invocations.length).equals(0) }) - function makeUpdate(arg: { instanceListId: string; operation: OperationType }): EntityUpdateData { + function makeUpdate(arg: { instanceListId: string; instanceId: Id; operation: OperationType }): EntityUpdateData { return Object.assign( {}, { diff --git a/test/tests/mail/model/FolderSystemTest.ts b/test/tests/mail/model/FolderSystemTest.ts index 7c7a133f26ef..03898c885413 100644 --- a/test/tests/mail/model/FolderSystemTest.ts +++ b/test/tests/mail/model/FolderSystemTest.ts @@ -1,38 +1,41 @@ import o from "@tutao/otest" -import { createMailFolder, MailFolderTypeRef } from "../../../../src/common/api/entities/tutanota/TypeRefs.js" -import { MailFolderType } from "../../../../src/common/api/common/TutanotaConstants.js" +import { MailFolderTypeRef, MailTypeRef } from "../../../../src/common/api/entities/tutanota/TypeRefs.js" +import { MailSetKind } from "../../../../src/common/api/common/TutanotaConstants.js" import { FolderSystem } from "../../../../src/common/api/common/mail/FolderSystem.js" import { createTestEntity } from "../../TestUtils.js" +import { getElementId } from "../../../../src/common/api/common/utils/EntityUtils.js" o.spec("FolderSystem", function () { const listId = "listId" - const inbox = createTestEntity(MailFolderTypeRef, { _id: [listId, "inbox"], folderType: MailFolderType.INBOX }) - const archive = createTestEntity(MailFolderTypeRef, { _id: [listId, "archive"], folderType: MailFolderType.ARCHIVE }) + const inbox = createTestEntity(MailFolderTypeRef, { _id: [listId, "inbox"], folderType: MailSetKind.INBOX }) + const archive = createTestEntity(MailFolderTypeRef, { _id: [listId, "archive"], folderType: MailSetKind.ARCHIVE }) const customFolder = createTestEntity(MailFolderTypeRef, { _id: [listId, "custom"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, name: "X", }) const customSubfolder = createTestEntity(MailFolderTypeRef, { _id: [listId, "customSub"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, parentFolder: customFolder._id, name: "AA", mails: "customSubMailList", }) const customSubSubfolder = createTestEntity(MailFolderTypeRef, { _id: [listId, "customSubSub"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, parentFolder: customSubfolder._id, name: "B", }) const customSubSubfolderAnother = createTestEntity(MailFolderTypeRef, { _id: [listId, "customSubSubAnother"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, parentFolder: customSubfolder._id, name: "A", }) + const mail = createTestEntity(MailTypeRef, { _id: ["mailListId", "inbox"], sets: [customSubfolder._id] }) + const allFolders = [archive, inbox, customFolder, customSubfolder, customSubSubfolder, customSubSubfolderAnother] o("correctly builds the subtrees", function () { @@ -74,12 +77,12 @@ o.spec("FolderSystem", function () { o("indented list sorts stepsiblings correctly", function () { const customFolderAnother = createTestEntity(MailFolderTypeRef, { _id: [listId, "customAnother"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, name: "Another top-level custom", }) const customFolderAnotherSub = createTestEntity(MailFolderTypeRef, { _id: [listId, "customAnotherSub"], - folderType: MailFolderType.CUSTOM, + folderType: MailSetKind.CUSTOM, parentFolder: customFolderAnother._id, name: "Y", }) @@ -110,25 +113,24 @@ o.spec("FolderSystem", function () { o("getSystemFolderByType", function () { const system = new FolderSystem(allFolders) - o(system.getSystemFolderByType(MailFolderType.ARCHIVE)).deepEquals(archive) + o(system.getSystemFolderByType(MailSetKind.ARCHIVE)).deepEquals(archive) }) o("getFolderById", function () { const system = new FolderSystem(allFolders) - o(system.getFolderById(archive._id)).deepEquals(archive) + o(system.getFolderById(getElementId(archive))).deepEquals(archive) }) o("getFolderById not there returns null", function () { const system = new FolderSystem(allFolders) - o(system.getFolderById([listId, "randomId"])).equals(null) + o(system.getFolderById("randomId")).equals(null) }) - o("getFolderByMailListId", function () { + o("getFolderByMail", function () { const system = new FolderSystem(allFolders) - - o(system.getFolderByMailListId(customSubfolder.mails)).equals(customSubfolder) + o(system.getFolderByMail(mail)).equals(customSubfolder) }) o("getCustomFoldersOfParent", function () { diff --git a/test/tests/mail/view/ConversationViewModelTest.ts b/test/tests/mail/view/ConversationViewModelTest.ts index d4249e6f1b43..cf66eab549f7 100644 --- a/test/tests/mail/view/ConversationViewModelTest.ts +++ b/test/tests/mail/view/ConversationViewModelTest.ts @@ -16,7 +16,7 @@ import { EntityRestClientMock } from "../../api/worker/rest/EntityRestClientMock import { EntityEventsListener, EventController } from "../../../../src/common/api/main/EventController.js" import { defer, DeferredObject, delay, noOp } from "@tutao/tutanota-utils" import { matchers, object, when } from "testdouble" -import { MailFolderType, MailState, OperationType } from "../../../../src/common/api/common/TutanotaConstants.js" +import { MailSetKind, MailState, OperationType } from "../../../../src/common/api/common/TutanotaConstants.js" import { isSameId } from "../../../../src/common/api/common/utils/EntityUtils.js" import { createTestEntity } from "../../TestUtils.js" import { MailboxDetail, MailModel } from "../../../../src/common/mailFunctionality/MailModel.js" @@ -173,11 +173,11 @@ o.spec("ConversationViewModel", function () { const trashDraftMail = addMail("trashDraftMail") trashDraftMail.state = MailState.DRAFT - const trash = createTestEntity(MailFolderTypeRef, { _id: [listId, "trashFolder"], folderType: MailFolderType.TRASH }) + const trash = createTestEntity(MailFolderTypeRef, { _id: [listId, "trashFolder"], folderType: MailSetKind.TRASH }) entityRestClientMock.addListInstances(trash) when(mailModel.getMailboxDetailsForMail(matchers.anything())).thenResolve(mailboxDetail) - when(mailModel.getMailFolder(listId)).thenReturn(trash) + when(mailModel.getMailFolderForMail(trashDraftMail)).thenReturn(trash) conversation.pop() // since this mail shouldn't actually be a part of the conversation @@ -195,11 +195,11 @@ o.spec("ConversationViewModel", function () { const trashDraftMail = addMail("trashDraftMail") trashDraftMail.state = MailState.DRAFT - const trash = createTestEntity(MailFolderTypeRef, { _id: [listId, "trashFolder"], folderType: MailFolderType.TRASH }) + const trash = createTestEntity(MailFolderTypeRef, { _id: [listId, "trashFolder"], folderType: MailSetKind.TRASH }) entityRestClientMock.addListInstances(trash) when(mailModel.getMailboxDetailsForMail(trashDraftMail)).thenResolve(mailboxDetail) - when(mailModel.getMailFolder(listId)).thenReturn(trash) + when(mailModel.getMailFolderForMail(trashDraftMail)).thenReturn(trash) await makeViewModel(trashDraftMail) @@ -311,7 +311,7 @@ o.spec("ConversationViewModel", function () { await loadingDefer.promise conversation.pop() - const trash = createTestEntity(MailFolderTypeRef, { _id: ["newListId", "trashFolder"], folderType: MailFolderType.TRASH }) + const trash = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "trashFolder"], folderType: MailSetKind.TRASH }) entityRestClientMock.addListInstances(trash) // adding new mail (is the same mail, just moved to trash) const newTrashDraftMail = addMail("trashDraftMail") @@ -320,7 +320,7 @@ o.spec("ConversationViewModel", function () { conversation.pop() when(mailModel.getMailboxDetailsForMail(matchers.anything())).thenResolve(mailboxDetail) - when(mailModel.getMailFolder("newListId")).thenReturn(trash) + when(mailModel.getMailFolderForMail(newTrashDraftMail)).thenReturn(trash) await eventCallback( [ diff --git a/test/tests/misc/ListModelTest.ts b/test/tests/misc/ListModelTest.ts index af5c1fd14dfa..1b04714dc0ee 100644 --- a/test/tests/misc/ListModelTest.ts +++ b/test/tests/misc/ListModelTest.ts @@ -1,6 +1,6 @@ import o from "@tutao/otest" import { ListModel, ListModelConfig } from "../../../src/common/misc/ListModel.js" -import { GENERATED_MAX_ID, getElementId, sortCompareById, timestampToGeneratedId } from "../../../src/common/api/common/utils/EntityUtils.js" +import { GENERATED_MAX_ID, getElementId, getListId, sortCompareById, timestampToGeneratedId } from "../../../src/common/api/common/utils/EntityUtils.js" import { defer, DeferredObject } from "@tutao/tutanota-utils" import { KnowledgeBaseEntry, KnowledgeBaseEntryTypeRef } from "../../../src/common/api/entities/tutanota/TypeRefs.js" import { ListFetchResult } from "../../../src/common/gui/base/ListUtils.js" @@ -413,7 +413,7 @@ o.spec("ListModel", function () { o("when the active item is deleted selectPrevious single will still select previous item relative to it", async function () { await setItems(items) listModel.onSingleInclusiveSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) // start state: // // A @@ -435,7 +435,7 @@ o.spec("ListModel", function () { o("when the active item is deleted selectPrevious multiselect will still select previous item relative to it", async function () { await setItems(items) listModel.onSingleInclusiveSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) // start state: // // A @@ -457,7 +457,7 @@ o.spec("ListModel", function () { o("when the active item is deleted selectNext single will still select next item relative to it", async function () { await setItems(items) listModel.onSingleInclusiveSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) // start state: // // A @@ -479,7 +479,7 @@ o.spec("ListModel", function () { o("when the active item is deleted selectNext multiselect will still select next item relative to it", async function () { await setItems(items) listModel.onSingleInclusiveSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) // start state: // // A @@ -714,7 +714,7 @@ o.spec("ListModel", function () { o("in single select, the active element is next entity when active element gets deleted", async function () { await setItems(items) listModel.onSingleSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) o(listModel.state.activeIndex).equals(1) }) @@ -722,7 +722,7 @@ o.spec("ListModel", function () { o("in single select, the active element is not changed when a different entity is deleted", async function () { await setItems(items) listModel.onSingleSelection(itemC) - await listModel.entityEventReceived(getElementId(itemA), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemA), getElementId(itemA), OperationType.DELETE) o(listModel.state.activeIndex).equals(1) }) @@ -730,7 +730,7 @@ o.spec("ListModel", function () { o("in multiselect, next element is not selected when element is removed", async function () { await setItems(items) listModel.onSingleInclusiveSelection(itemB) - await listModel.entityEventReceived(getElementId(itemB), OperationType.DELETE) + await listModel.entityEventReceived(getListId(itemB), getElementId(itemB), OperationType.DELETE) o(listModel.state.inMultiselect).equals(true) o(listModel.state.activeIndex).equals(null) @@ -743,7 +743,7 @@ o.spec("ListModel", function () { const newConfig: ListModelConfig = { ...defaultListConfig, - async loadSingle(elementId: Id): Promise { + async loadSingle(_listId: Id, elementId: Id): Promise { if (elementId === getElementId(itemD)) { return updatedItemD } else { @@ -755,7 +755,7 @@ o.spec("ListModel", function () { listModel = new ListModel(newConfig) await setItems(items) - await listModel.entityEventReceived(getElementId(itemD), OperationType.UPDATE) + await listModel.entityEventReceived(getListId(itemD), getElementId(itemD), OperationType.UPDATE) o(listModel.state.items).deepEquals([itemA, itemB, itemC, updatedItemD]) }) @@ -765,7 +765,7 @@ o.spec("ListModel", function () { const newConfig: ListModelConfig = { ...defaultListConfig, - async loadSingle(elementId: Id): Promise { + async loadSingle(_listId: Id, elementId: Id): Promise { if (elementId === getElementId(itemD)) { return updatedItemD } else { @@ -780,7 +780,7 @@ o.spec("ListModel", function () { listModel = new ListModel(newConfig) await setItems(items) - await listModel.entityEventReceived(getElementId(itemD), OperationType.UPDATE) + await listModel.entityEventReceived(getListId(itemD), getElementId(itemD), OperationType.UPDATE) o(listModel.state.items).deepEquals([itemA, updatedItemD, itemB, itemC]) }) diff --git a/tuta-sdk/rust/sdk/src/entities/entity_facade.rs b/tuta-sdk/rust/sdk/src/entities/entity_facade.rs index 7f2b89adc00e..ad57909947b0 100644 --- a/tuta-sdk/rust/sdk/src/entities/entity_facade.rs +++ b/tuta-sdk/rust/sdk/src/entities/entity_facade.rs @@ -410,6 +410,7 @@ mod tests { ), ], ), + "sets"=> JsonElement::Array(vec![]), } } } diff --git a/tuta-sdk/rust/sdk/src/entities/sys.rs b/tuta-sdk/rust/sdk/src/entities/sys.rs index 8cf20f0a905c..48414b4b4325 100644 --- a/tuta-sdk/rust/sdk/src/entities/sys.rs +++ b/tuta-sdk/rust/sdk/src/entities/sys.rs @@ -1125,6 +1125,22 @@ impl Entity for DebitServicePutData { } +#[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] +pub struct DefaultAlarmInfo { + pub _id: CustomId, + pub trigger: String, +} + +impl Entity for DefaultAlarmInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DefaultAlarmInfo", + } + } +} + + #[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] pub struct DeleteCustomerData { pub _format: i64, @@ -4294,7 +4310,7 @@ impl Entity for WebsocketCounterData { pub struct WebsocketCounterValue { pub _id: CustomId, pub count: i64, - pub mailListId: GeneratedId, + pub counterId: GeneratedId, } impl Entity for WebsocketCounterValue { diff --git a/tuta-sdk/rust/sdk/src/entities/tutanota.rs b/tuta-sdk/rust/sdk/src/entities/tutanota.rs index 42a5186d351c..183a619fd27c 100644 --- a/tuta-sdk/rust/sdk/src/entities/tutanota.rs +++ b/tuta-sdk/rust/sdk/src/entities/tutanota.rs @@ -1144,6 +1144,7 @@ pub struct GroupSettings { pub _id: CustomId, pub color: String, pub name: Option, + pub defaultAlarmsList: Vec, pub group: GeneratedId, } @@ -1395,6 +1396,7 @@ pub struct Mail { pub mailDetails: Option, pub mailDetailsDraft: Option, pub sender: MailAddress, + pub sets: Vec, pub errors: Option, } @@ -1443,6 +1445,22 @@ impl Entity for MailAddressProperties { } +#[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] +pub struct MailBag { + pub _id: CustomId, + pub mails: GeneratedId, +} + +impl Entity for MailBag { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailBag", + } + } +} + + #[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] pub struct MailBox { pub _format: i64, @@ -1453,6 +1471,8 @@ pub struct MailBox { pub _ownerKeyVersion: Option, pub _permissions: GeneratedId, pub lastInfoDate: DateTime, + pub archivedMailBags: Vec, + pub currentMailBag: Option, pub folders: Option, pub mailDetailsDrafts: Option, pub receivedAttachments: GeneratedId, @@ -1564,7 +1584,10 @@ pub struct MailFolder { pub _ownerKeyVersion: Option, pub _permissions: GeneratedId, pub folderType: i64, + pub isLabel: bool, + pub isMailSet: bool, pub name: String, + pub entries: GeneratedId, pub mails: GeneratedId, pub parentFolder: Option, pub errors: Option, @@ -1596,6 +1619,25 @@ impl Entity for MailFolderRef { } +#[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] +pub struct MailSetEntry { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub mail: IdTuple, +} + +impl Entity for MailSetEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailSetEntry", + } + } +} + + #[derive(uniffi::Record, Clone, Serialize, Deserialize, Debug)] pub struct MailboxGroupRoot { pub _format: i64, @@ -1668,6 +1710,7 @@ impl Entity for MailboxServerProperties { pub struct MoveMailData { pub _format: i64, pub mails: Vec, + pub sourceFolder: Option, pub targetFolder: IdTuple, } diff --git a/tuta-sdk/rust/sdk/src/type_models/sys.json b/tuta-sdk/rust/sdk/src/type_models/sys.json index 3b4b356edfdd..e21464506090 100644 --- a/tuta-sdk/rust/sdk/src/type_models/sys.json +++ b/tuta-sdk/rust/sdk/src/type_models/sys.json @@ -212,7 +212,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AdminGroupKeyRotationPostIn": { "name": "AdminGroupKeyRotationPostIn", @@ -256,7 +256,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AdministratedGroupsRef": { "name": "AdministratedGroupsRef", @@ -290,7 +290,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmInfo": { "name": "AlarmInfo", @@ -342,7 +342,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmNotification": { "name": "AlarmNotification", @@ -442,7 +442,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AlarmServicePost": { "name": "AlarmServicePost", @@ -476,7 +476,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ArchiveRef": { "name": "ArchiveRef", @@ -508,7 +508,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ArchiveType": { "name": "ArchiveType", @@ -562,7 +562,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AuditLogEntry": { "name": "AuditLogEntry", @@ -696,7 +696,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AuditLogRef": { "name": "AuditLogRef", @@ -730,7 +730,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AuthenticatedDevice": { "name": "AuthenticatedDevice", @@ -780,7 +780,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Authentication": { "name": "Authentication", @@ -841,7 +841,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataDelete": { "name": "AutoLoginDataDelete", @@ -873,7 +873,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataGet": { "name": "AutoLoginDataGet", @@ -916,7 +916,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginDataReturn": { "name": "AutoLoginDataReturn", @@ -948,7 +948,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "AutoLoginPostReturn": { "name": "AutoLoginPostReturn", @@ -980,7 +980,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Blob": { "name": "Blob", @@ -1030,7 +1030,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BlobReferenceTokenWrapper": { "name": "BlobReferenceTokenWrapper", @@ -1062,7 +1062,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Booking": { "name": "Booking", @@ -1186,7 +1186,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "BookingItem": { "name": "BookingItem", @@ -1272,7 +1272,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BookingsRef": { "name": "BookingsRef", @@ -1306,7 +1306,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "BootstrapFeature": { "name": "BootstrapFeature", @@ -1338,7 +1338,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Braintree3ds2Request": { "name": "Braintree3ds2Request", @@ -1388,7 +1388,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Braintree3ds2Response": { "name": "Braintree3ds2Response", @@ -1429,7 +1429,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainData": { "name": "BrandingDomainData", @@ -1506,7 +1506,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainDeleteData": { "name": "BrandingDomainDeleteData", @@ -1538,7 +1538,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "BrandingDomainGetReturn": { "name": "BrandingDomainGetReturn", @@ -1572,7 +1572,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Bucket": { "name": "Bucket", @@ -1606,7 +1606,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "BucketKey": { "name": "BucketKey", @@ -1695,7 +1695,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "BucketPermission": { "name": "BucketPermission", @@ -1837,7 +1837,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CalendarEventRef": { "name": "CalendarEventRef", @@ -1878,7 +1878,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CertificateInfo": { "name": "CertificateInfo", @@ -1939,7 +1939,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Challenge": { "name": "Challenge", @@ -1992,7 +1992,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ChangeKdfPostIn": { "name": "ChangeKdfPostIn", @@ -2069,7 +2069,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ChangePasswordPostIn": { "name": "ChangePasswordPostIn", @@ -2164,7 +2164,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Chat": { "name": "Chat", @@ -2214,7 +2214,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CloseSessionServicePost": { "name": "CloseSessionServicePost", @@ -2257,7 +2257,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateCustomerServerPropertiesData": { "name": "CreateCustomerServerPropertiesData", @@ -2298,7 +2298,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CreateCustomerServerPropertiesReturn": { "name": "CreateCustomerServerPropertiesReturn", @@ -2332,7 +2332,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateSessionData": { "name": "CreateSessionData", @@ -2420,7 +2420,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CreateSessionReturn": { "name": "CreateSessionReturn", @@ -2473,7 +2473,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CreditCard": { "name": "CreditCard", @@ -2541,7 +2541,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainCheckGetIn": { "name": "CustomDomainCheckGetIn", @@ -2584,7 +2584,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainCheckGetOut": { "name": "CustomDomainCheckGetOut", @@ -2647,7 +2647,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainData": { "name": "CustomDomainData", @@ -2690,7 +2690,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomDomainReturn": { "name": "CustomDomainReturn", @@ -2733,7 +2733,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Customer": { "name": "Customer", @@ -2990,7 +2990,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationPostIn": { "name": "CustomerAccountTerminationPostIn", @@ -3033,7 +3033,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationPostOut": { "name": "CustomerAccountTerminationPostOut", @@ -3067,7 +3067,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerAccountTerminationRequest": { "name": "CustomerAccountTerminationRequest", @@ -3146,7 +3146,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerInfo": { "name": "CustomerInfo", @@ -3459,7 +3459,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerProperties": { "name": "CustomerProperties", @@ -3567,7 +3567,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "CustomerServerProperties": { "name": "CustomerServerProperties", @@ -3693,7 +3693,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "DateWrapper": { "name": "DateWrapper", @@ -3725,7 +3725,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DebitServicePutData": { "name": "DebitServicePutData", @@ -3759,7 +3759,39 @@ } }, "app": "sys", - "version": "106" + "version": "108" + }, + "DefaultAlarmInfo": { + "name": "DefaultAlarmInfo", + "since": 107, + "type": "AGGREGATED_TYPE", + "id": 2433, + "rootId": "A3N5cwAJgQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2434, + "since": 107, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "trigger": { + "final": true, + "name": "trigger", + "id": 2435, + "since": 107, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "108" }, "DeleteCustomerData": { "name": "DeleteCustomerData", @@ -3839,7 +3871,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "DnsRecord": { "name": "DnsRecord", @@ -3889,7 +3921,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainInfo": { "name": "DomainInfo", @@ -3951,7 +3983,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "DomainMailAddressAvailabilityData": { "name": "DomainMailAddressAvailabilityData", @@ -3983,7 +4015,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainMailAddressAvailabilityReturn": { "name": "DomainMailAddressAvailabilityReturn", @@ -4015,7 +4047,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "DomainsRef": { "name": "DomainsRef", @@ -4049,7 +4081,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "EmailSenderListElement": { "name": "EmailSenderListElement", @@ -4108,7 +4140,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "EntityEventBatch": { "name": "EntityEventBatch", @@ -4169,7 +4201,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "EntityUpdate": { "name": "EntityUpdate", @@ -4237,7 +4269,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Exception": { "name": "Exception", @@ -4278,7 +4310,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ExternalPropertiesReturn": { "name": "ExternalPropertiesReturn", @@ -4340,7 +4372,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ExternalUserReference": { "name": "ExternalUserReference", @@ -4411,7 +4443,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Feature": { "name": "Feature", @@ -4443,7 +4475,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "File": { "name": "File", @@ -4493,7 +4525,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GeneratedIdWrapper": { "name": "GeneratedIdWrapper", @@ -4525,7 +4557,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCard": { "name": "GiftCard", @@ -4638,7 +4670,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardCreateData": { "name": "GiftCardCreateData", @@ -4706,7 +4738,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardCreateReturn": { "name": "GiftCardCreateReturn", @@ -4740,7 +4772,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardDeleteData": { "name": "GiftCardDeleteData", @@ -4774,7 +4806,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardGetReturn": { "name": "GiftCardGetReturn", @@ -4826,7 +4858,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardOption": { "name": "GiftCardOption", @@ -4858,7 +4890,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardRedeemData": { "name": "GiftCardRedeemData", @@ -4910,7 +4942,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardRedeemGetReturn": { "name": "GiftCardRedeemGetReturn", @@ -4962,7 +4994,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GiftCardsRef": { "name": "GiftCardsRef", @@ -4996,7 +5028,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Group": { "name": "Group", @@ -5220,7 +5252,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupInfo": { "name": "GroupInfo", @@ -5373,7 +5405,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKey": { "name": "GroupKey", @@ -5479,7 +5511,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationData": { "name": "GroupKeyRotationData", @@ -5579,7 +5611,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationInfoGetOut": { "name": "GroupKeyRotationInfoGetOut", @@ -5622,7 +5654,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyRotationPostIn": { "name": "GroupKeyRotationPostIn", @@ -5656,7 +5688,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdate": { "name": "GroupKeyUpdate", @@ -5753,7 +5785,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdateData": { "name": "GroupKeyUpdateData", @@ -5814,7 +5846,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeyUpdatesRef": { "name": "GroupKeyUpdatesRef", @@ -5848,7 +5880,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupKeysRef": { "name": "GroupKeysRef", @@ -5882,7 +5914,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMember": { "name": "GroupMember", @@ -5972,7 +6004,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembership": { "name": "GroupMembership", @@ -6080,7 +6112,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembershipKeyData": { "name": "GroupMembershipKeyData", @@ -6141,7 +6173,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupMembershipUpdateData": { "name": "GroupMembershipUpdateData", @@ -6193,7 +6225,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "GroupRoot": { "name": "GroupRoot", @@ -6274,7 +6306,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "IdTupleWrapper": { "name": "IdTupleWrapper", @@ -6315,7 +6347,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InstanceSessionKey": { "name": "InstanceSessionKey", @@ -6394,7 +6426,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Invoice": { "name": "Invoice", @@ -6610,7 +6642,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataGetIn": { "name": "InvoiceDataGetIn", @@ -6642,7 +6674,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataGetOut": { "name": "InvoiceDataGetOut", @@ -6784,7 +6816,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceDataItem": { "name": "InvoiceDataItem", @@ -6861,7 +6893,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceInfo": { "name": "InvoiceInfo", @@ -7040,7 +7072,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "InvoiceItem": { "name": "InvoiceItem", @@ -7126,7 +7158,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyPair": { "name": "KeyPair", @@ -7203,7 +7235,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyRotation": { "name": "KeyRotation", @@ -7271,7 +7303,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "KeyRotationsRef": { "name": "KeyRotationsRef", @@ -7305,7 +7337,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "LocationServiceGetReturn": { "name": "LocationServiceGetReturn", @@ -7337,7 +7369,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Login": { "name": "Login", @@ -7396,7 +7428,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAlias": { "name": "MailAddressAlias", @@ -7437,7 +7469,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasGetIn": { "name": "MailAddressAliasGetIn", @@ -7471,7 +7503,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceData": { "name": "MailAddressAliasServiceData", @@ -7514,7 +7546,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceDataDelete": { "name": "MailAddressAliasServiceDataDelete", @@ -7566,7 +7598,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAliasServiceReturn": { "name": "MailAddressAliasServiceReturn", @@ -7625,7 +7657,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressAvailability": { "name": "MailAddressAvailability", @@ -7666,7 +7698,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "MailAddressToGroup": { "name": "MailAddressToGroup", @@ -7727,7 +7759,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipAddData": { "name": "MembershipAddData", @@ -7798,7 +7830,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipPutIn": { "name": "MembershipPutIn", @@ -7832,7 +7864,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MembershipRemoveData": { "name": "MembershipRemoveData", @@ -7876,7 +7908,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MissedNotification": { "name": "MissedNotification", @@ -7992,7 +8024,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MultipleMailAddressAvailabilityData": { "name": "MultipleMailAddressAvailabilityData", @@ -8026,7 +8058,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "MultipleMailAddressAvailabilityReturn": { "name": "MultipleMailAddressAvailabilityReturn", @@ -8060,7 +8092,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "NotificationInfo": { "name": "NotificationInfo", @@ -8112,7 +8144,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "NotificationMailTemplate": { "name": "NotificationMailTemplate", @@ -8162,7 +8194,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "NotificationSessionKey": { "name": "NotificationSessionKey", @@ -8205,7 +8237,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "OrderProcessingAgreement": { "name": "OrderProcessingAgreement", @@ -8321,7 +8353,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "OtpChallenge": { "name": "OtpChallenge", @@ -8355,7 +8387,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServiceGetData": { "name": "PaymentDataServiceGetData", @@ -8387,7 +8419,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServiceGetReturn": { "name": "PaymentDataServiceGetReturn", @@ -8419,7 +8451,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePostData": { "name": "PaymentDataServicePostData", @@ -8453,7 +8485,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePutData": { "name": "PaymentDataServicePutData", @@ -8568,7 +8600,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentDataServicePutReturn": { "name": "PaymentDataServicePutReturn", @@ -8611,7 +8643,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PaymentErrorInfo": { "name": "PaymentErrorInfo", @@ -8661,7 +8693,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Permission": { "name": "Permission", @@ -8813,7 +8845,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PlanConfiguration": { "name": "PlanConfiguration", @@ -8926,7 +8958,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PlanPrices": { "name": "PlanPrices", @@ -9068,7 +9100,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PlanServiceGetOut": { "name": "PlanServiceGetOut", @@ -9102,7 +9134,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceData": { "name": "PriceData", @@ -9163,7 +9195,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceItemData": { "name": "PriceItemData", @@ -9222,7 +9254,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PriceRequestData": { "name": "PriceRequestData", @@ -9299,7 +9331,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PriceServiceData": { "name": "PriceServiceData", @@ -9342,7 +9374,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PriceServiceReturn": { "name": "PriceServiceReturn", @@ -9414,7 +9446,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PubEncKeyData": { "name": "PubEncKeyData", @@ -9482,7 +9514,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyGetIn": { "name": "PublicKeyGetIn", @@ -9523,7 +9555,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyGetOut": { "name": "PublicKeyGetOut", @@ -9582,7 +9614,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PublicKeyPutIn": { "name": "PublicKeyPutIn", @@ -9634,7 +9666,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "PushIdentifier": { "name": "PushIdentifier", @@ -9792,7 +9824,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "PushIdentifierList": { "name": "PushIdentifierList", @@ -9826,7 +9858,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ReceivedGroupInvitation": { "name": "ReceivedGroupInvitation", @@ -9987,7 +10019,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "RecoverCode": { "name": "RecoverCode", @@ -10073,7 +10105,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RecoverCodeData": { "name": "RecoverCodeData", @@ -10132,7 +10164,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodeGetIn": { "name": "ReferralCodeGetIn", @@ -10166,7 +10198,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodePostIn": { "name": "ReferralCodePostIn", @@ -10189,7 +10221,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ReferralCodePostOut": { "name": "ReferralCodePostOut", @@ -10223,7 +10255,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceData": { "name": "RegistrationCaptchaServiceData", @@ -10264,7 +10296,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceGetData": { "name": "RegistrationCaptchaServiceGetData", @@ -10332,7 +10364,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationCaptchaServiceReturn": { "name": "RegistrationCaptchaServiceReturn", @@ -10373,7 +10405,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationReturn": { "name": "RegistrationReturn", @@ -10405,7 +10437,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RegistrationServiceData": { "name": "RegistrationServiceData", @@ -10455,7 +10487,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RejectedSender": { "name": "RejectedSender", @@ -10550,7 +10582,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "RejectedSendersRef": { "name": "RejectedSendersRef", @@ -10584,7 +10616,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "RepeatRule": { "name": "RepeatRule", @@ -10663,7 +10695,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "ResetFactorsDeleteData": { "name": "ResetFactorsDeleteData", @@ -10713,7 +10745,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "ResetPasswordPostIn": { "name": "ResetPasswordPostIn", @@ -10792,7 +10824,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "RootInstance": { "name": "RootInstance", @@ -10851,7 +10883,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SaltData": { "name": "SaltData", @@ -10883,7 +10915,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SaltReturn": { "name": "SaltReturn", @@ -10924,7 +10956,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactor": { "name": "SecondFactor", @@ -11012,7 +11044,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthAllowedReturn": { "name": "SecondFactorAuthAllowedReturn", @@ -11044,7 +11076,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthData": { "name": "SecondFactorAuthData", @@ -11116,7 +11148,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthDeleteData": { "name": "SecondFactorAuthDeleteData", @@ -11150,7 +11182,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthGetData": { "name": "SecondFactorAuthGetData", @@ -11182,7 +11214,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthGetReturn": { "name": "SecondFactorAuthGetReturn", @@ -11214,7 +11246,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SecondFactorAuthentication": { "name": "SecondFactorAuthentication", @@ -11300,7 +11332,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SendRegistrationCodeData": { "name": "SendRegistrationCodeData", @@ -11359,7 +11391,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SendRegistrationCodeReturn": { "name": "SendRegistrationCodeReturn", @@ -11391,7 +11423,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SentGroupInvitation": { "name": "SentGroupInvitation", @@ -11480,7 +11512,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "Session": { "name": "Session", @@ -11623,7 +11655,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "SignOrderProcessingAgreementData": { "name": "SignOrderProcessingAgreementData", @@ -11664,7 +11696,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SseConnectData": { "name": "SseConnectData", @@ -11707,7 +11739,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "StringConfigValue": { "name": "StringConfigValue", @@ -11748,7 +11780,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "StringWrapper": { "name": "StringWrapper", @@ -11780,7 +11812,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SurveyData": { "name": "SurveyData", @@ -11839,7 +11871,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "SwitchAccountTypePostIn": { "name": "SwitchAccountTypePostIn", @@ -11928,7 +11960,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "SystemKeysReturn": { "name": "SystemKeysReturn", @@ -12044,7 +12076,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "TakeOverDeletedAddressData": { "name": "TakeOverDeletedAddressData", @@ -12103,7 +12135,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "TypeInfo": { "name": "TypeInfo", @@ -12144,7 +12176,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "U2fChallenge": { "name": "U2fChallenge", @@ -12187,7 +12219,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "U2fKey": { "name": "U2fKey", @@ -12239,7 +12271,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "U2fRegisteredDevice": { "name": "U2fRegisteredDevice", @@ -12307,7 +12339,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "U2fResponseData": { "name": "U2fResponseData", @@ -12357,7 +12389,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "UpdatePermissionKeyData": { "name": "UpdatePermissionKeyData", @@ -12419,7 +12451,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UpdateSessionKeysPostIn": { "name": "UpdateSessionKeysPostIn", @@ -12453,7 +12485,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UpgradePriceServiceData": { "name": "UpgradePriceServiceData", @@ -12505,7 +12537,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UpgradePriceServiceReturn": { "name": "UpgradePriceServiceReturn", @@ -12676,7 +12708,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "User": { "name": "User", @@ -12891,7 +12923,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAlarmInfo": { "name": "UserAlarmInfo", @@ -12970,7 +13002,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAlarmInfoListType": { "name": "UserAlarmInfoListType", @@ -13004,7 +13036,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAreaGroups": { "name": "UserAreaGroups", @@ -13038,7 +13070,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserAuthentication": { "name": "UserAuthentication", @@ -13092,7 +13124,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserDataDelete": { "name": "UserDataDelete", @@ -13144,7 +13176,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserExternalAuthInfo": { "name": "UserExternalAuthInfo", @@ -13214,7 +13246,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupKeyDistribution": { "name": "UserGroupKeyDistribution", @@ -13282,7 +13314,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupKeyRotationData": { "name": "UserGroupKeyRotationData", @@ -13399,7 +13431,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "UserGroupRoot": { "name": "UserGroupRoot", @@ -13480,7 +13512,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "VariableExternalAuthInfo": { "name": "VariableExternalAuthInfo", @@ -13584,7 +13616,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "VerifyRegistrationCodeData": { "name": "VerifyRegistrationCodeData", @@ -13625,7 +13657,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "Version": { "name": "Version", @@ -13696,7 +13728,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "VersionData": { "name": "VersionData", @@ -13755,7 +13787,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "VersionInfo": { "name": "VersionInfo", @@ -13880,7 +13912,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "VersionReturn": { "name": "VersionReturn", @@ -13914,7 +13946,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WebauthnResponseData": { "name": "WebauthnResponseData", @@ -13973,7 +14005,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketCounterData": { "name": "WebsocketCounterData", @@ -14016,7 +14048,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketCounterValue": { "name": "WebsocketCounterValue", @@ -14045,9 +14077,9 @@ "cardinality": "One", "encrypted": false }, - "mailListId": { + "counterId": { "final": false, - "name": "mailListId", + "name": "counterId", "id": 1490, "since": 41, "type": "GeneratedId", @@ -14057,7 +14089,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketEntityData": { "name": "WebsocketEntityData", @@ -14109,7 +14141,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WebsocketLeaderStatus": { "name": "WebsocketLeaderStatus", @@ -14141,7 +14173,7 @@ }, "associations": {}, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelChild": { "name": "WhitelabelChild", @@ -14256,7 +14288,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelChildrenRef": { "name": "WhitelabelChildrenRef", @@ -14290,7 +14322,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelConfig": { "name": "WhitelabelConfig", @@ -14425,7 +14457,7 @@ } }, "app": "sys", - "version": "106" + "version": "108" }, "WhitelabelParent": { "name": "WhitelabelParent", @@ -14469,6 +14501,6 @@ } }, "app": "sys", - "version": "106" + "version": "108" } } diff --git a/tuta-sdk/rust/sdk/src/type_models/tutanota.json b/tuta-sdk/rust/sdk/src/type_models/tutanota.json index a857a709b759..efe66ed8427e 100644 --- a/tuta-sdk/rust/sdk/src/type_models/tutanota.json +++ b/tuta-sdk/rust/sdk/src/type_models/tutanota.json @@ -49,7 +49,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Birthday": { "name": "Birthday", @@ -99,7 +99,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "Body": { "name": "Body", @@ -140,7 +140,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarDeleteData": { "name": "CalendarDeleteData", @@ -174,7 +174,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEvent": { "name": "CalendarEvent", @@ -373,7 +373,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventAttendee": { "name": "CalendarEventAttendee", @@ -416,7 +416,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventIndexRef": { "name": "CalendarEventIndexRef", @@ -450,7 +450,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUidIndex": { "name": "CalendarEventUidIndex", @@ -521,7 +521,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUpdate": { "name": "CalendarEventUpdate", @@ -609,7 +609,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarEventUpdateList": { "name": "CalendarEventUpdateList", @@ -643,7 +643,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarGroupRoot": { "name": "CalendarGroupRoot", @@ -742,7 +742,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CalendarRepeatRule": { "name": "CalendarRepeatRule", @@ -821,7 +821,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Contact": { "name": "Contact", @@ -1144,7 +1144,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactAddress": { "name": "ContactAddress", @@ -1194,7 +1194,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactCustomDate": { "name": "ContactCustomDate", @@ -1244,7 +1244,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactList": { "name": "ContactList", @@ -1333,7 +1333,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactListEntry": { "name": "ContactListEntry", @@ -1410,7 +1410,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactListGroupRoot": { "name": "ContactListGroupRoot", @@ -1489,7 +1489,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactMailAddress": { "name": "ContactMailAddress", @@ -1539,7 +1539,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactMessengerHandle": { "name": "ContactMessengerHandle", @@ -1589,7 +1589,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactPhoneNumber": { "name": "ContactPhoneNumber", @@ -1639,7 +1639,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactPronouns": { "name": "ContactPronouns", @@ -1680,7 +1680,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactRelationship": { "name": "ContactRelationship", @@ -1730,7 +1730,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactSocialId": { "name": "ContactSocialId", @@ -1780,7 +1780,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ContactWebsite": { "name": "ContactWebsite", @@ -1830,7 +1830,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ConversationEntry": { "name": "ConversationEntry", @@ -1919,7 +1919,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateExternalUserGroupData": { "name": "CreateExternalUserGroupData", @@ -1978,7 +1978,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateGroupPostReturn": { "name": "CreateGroupPostReturn", @@ -2012,7 +2012,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailFolderData": { "name": "CreateMailFolderData", @@ -2082,7 +2082,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailFolderReturn": { "name": "CreateMailFolderReturn", @@ -2116,7 +2116,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CreateMailGroupData": { "name": "CreateMailGroupData", @@ -2177,7 +2177,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "CustomerAccountCreateData": { "name": "CustomerAccountCreateData", @@ -2349,7 +2349,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteGroupData": { "name": "DeleteGroupData", @@ -2392,7 +2392,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteMailData": { "name": "DeleteMailData", @@ -2436,7 +2436,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DeleteMailFolderData": { "name": "DeleteMailFolderData", @@ -2470,7 +2470,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftAttachment": { "name": "DraftAttachment", @@ -2532,7 +2532,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftCreateData": { "name": "DraftCreateData", @@ -2602,7 +2602,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftCreateReturn": { "name": "DraftCreateReturn", @@ -2636,7 +2636,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftData": { "name": "DraftData", @@ -2783,7 +2783,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftRecipient": { "name": "DraftRecipient", @@ -2824,7 +2824,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftUpdateData": { "name": "DraftUpdateData", @@ -2868,7 +2868,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "DraftUpdateReturn": { "name": "DraftUpdateReturn", @@ -2902,7 +2902,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EmailTemplate": { "name": "EmailTemplate", @@ -2999,7 +2999,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EmailTemplateContent": { "name": "EmailTemplateContent", @@ -3040,7 +3040,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "EncryptTutanotaPropertiesData": { "name": "EncryptTutanotaPropertiesData", @@ -3092,7 +3092,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "EncryptedMailAddress": { "name": "EncryptedMailAddress", @@ -3133,7 +3133,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "EntropyData": { "name": "EntropyData", @@ -3174,7 +3174,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ExternalUserData": { "name": "ExternalUserData", @@ -3307,7 +3307,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "File": { "name": "File", @@ -3442,7 +3442,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "FileSystem": { "name": "FileSystem", @@ -3521,7 +3521,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationDeleteData": { "name": "GroupInvitationDeleteData", @@ -3555,7 +3555,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPostData": { "name": "GroupInvitationPostData", @@ -3599,7 +3599,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPostReturn": { "name": "GroupInvitationPostReturn", @@ -3653,7 +3653,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupInvitationPutData": { "name": "GroupInvitationPutData", @@ -3723,7 +3723,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "GroupSettings": { "name": "GroupSettings", @@ -3763,6 +3763,16 @@ } }, "associations": { + "defaultAlarmsList": { + "final": false, + "name": "defaultAlarmsList", + "id": 1446, + "since": 74, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DefaultAlarmInfo", + "dependency": "sys" + }, "group": { "final": true, "name": "group", @@ -3775,7 +3785,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Header": { "name": "Header", @@ -3816,7 +3826,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapFolder": { "name": "ImapFolder", @@ -3877,7 +3887,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapSyncConfiguration": { "name": "ImapSyncConfiguration", @@ -3947,7 +3957,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ImapSyncState": { "name": "ImapSyncState", @@ -4008,7 +4018,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InboxRule": { "name": "InboxRule", @@ -4060,7 +4070,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InternalGroupData": { "name": "InternalGroupData", @@ -4184,7 +4194,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "InternalRecipientKeyData": { "name": "InternalRecipientKeyData", @@ -4252,7 +4262,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "KnowledgeBaseEntry": { "name": "KnowledgeBaseEntry", @@ -4349,7 +4359,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "KnowledgeBaseEntryKeyword": { "name": "KnowledgeBaseEntryKeyword", @@ -4381,7 +4391,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "ListUnsubscribeData": { "name": "ListUnsubscribeData", @@ -4433,7 +4443,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Mail": { "name": "Mail", @@ -4695,10 +4705,20 @@ "cardinality": "One", "refType": "MailAddress", "dependency": null + }, + "sets": { + "final": false, + "name": "sets", + "id": 1462, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "MailFolder", + "dependency": null } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailAddress": { "name": "MailAddress", @@ -4750,7 +4770,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailAddressProperties": { "name": "MailAddressProperties", @@ -4791,7 +4811,41 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" + }, + "MailBag": { + "name": "MailBag", + "since": 75, + "type": "AGGREGATED_TYPE", + "id": 1457, + "rootId": "CHR1dGFub3RhAAWx", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1458, + "since": 75, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mails": { + "final": true, + "name": "mails", + "id": 1459, + "since": 75, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "75" }, "MailBox": { "name": "MailBox", @@ -4867,6 +4921,26 @@ } }, "associations": { + "archivedMailBags": { + "final": false, + "name": "archivedMailBags", + "id": 1460, + "since": 75, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailBag", + "dependency": null + }, + "currentMailBag": { + "final": false, + "name": "currentMailBag", + "id": 1461, + "since": 75, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailBag", + "dependency": null + }, "folders": { "final": true, "name": "folders", @@ -4919,7 +4993,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetails": { "name": "MailDetails", @@ -5001,7 +5075,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsBlob": { "name": "MailDetailsBlob", @@ -5080,7 +5154,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsDraft": { "name": "MailDetailsDraft", @@ -5159,7 +5233,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailDetailsDraftsRef": { "name": "MailDetailsDraftsRef", @@ -5193,7 +5267,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailFolder": { "name": "MailFolder", @@ -5267,6 +5341,24 @@ "cardinality": "One", "encrypted": false }, + "isLabel": { + "final": false, + "name": "isLabel", + "id": 1454, + "since": 75, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "isMailSet": { + "final": false, + "name": "isMailSet", + "id": 1455, + "since": 75, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, "name": { "final": false, "name": "name", @@ -5278,6 +5370,16 @@ } }, "associations": { + "entries": { + "final": false, + "name": "entries", + "id": 1456, + "since": 75, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "MailSetEntry", + "dependency": null + }, "mails": { "final": true, "name": "mails", @@ -5300,7 +5402,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailFolderRef": { "name": "MailFolderRef", @@ -5334,7 +5436,68 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" + }, + "MailSetEntry": { + "name": "MailSetEntry", + "since": 75, + "type": "LIST_ELEMENT_TYPE", + "id": 1447, + "rootId": "CHR1dGFub3RhAAWn", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1451, + "since": 75, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1449, + "since": 75, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1452, + "since": 75, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1450, + "since": 75, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mail": { + "final": true, + "name": "mail", + "id": 1453, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "75" }, "MailboxGroupRoot": { "name": "MailboxGroupRoot", @@ -5455,7 +5618,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailboxProperties": { "name": "MailboxProperties", @@ -5543,7 +5706,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "MailboxServerProperties": { "name": "MailboxServerProperties", @@ -5602,7 +5765,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "MoveMailData": { "name": "MoveMailData", @@ -5634,6 +5797,16 @@ "refType": "Mail", "dependency": null }, + "sourceFolder": { + "final": false, + "name": "sourceFolder", + "id": 1463, + "since": 75, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + }, "targetFolder": { "final": false, "name": "targetFolder", @@ -5646,7 +5819,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NewDraftAttachment": { "name": "NewDraftAttachment", @@ -5707,7 +5880,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsId": { "name": "NewsId", @@ -5748,7 +5921,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsIn": { "name": "NewsIn", @@ -5780,7 +5953,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "NewsOut": { "name": "NewsOut", @@ -5814,7 +5987,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "NotificationMail": { "name": "NotificationMail", @@ -5882,7 +6055,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotification": { "name": "OutOfOfficeNotification", @@ -5970,7 +6143,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotificationMessage": { "name": "OutOfOfficeNotificationMessage", @@ -6020,7 +6193,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "OutOfOfficeNotificationRecipientList": { "name": "OutOfOfficeNotificationRecipientList", @@ -6054,7 +6227,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "PhishingMarkerWebsocketData": { "name": "PhishingMarkerWebsocketData", @@ -6097,7 +6270,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "PhotosRef": { "name": "PhotosRef", @@ -6131,7 +6304,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReceiveInfoServiceData": { "name": "ReceiveInfoServiceData", @@ -6163,7 +6336,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "Recipients": { "name": "Recipients", @@ -6217,7 +6390,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "RemoteImapSyncInfo": { "name": "RemoteImapSyncInfo", @@ -6287,7 +6460,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReportMailPostData": { "name": "ReportMailPostData", @@ -6339,7 +6512,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "ReportedMailFieldMarker": { "name": "ReportedMailFieldMarker", @@ -6380,7 +6553,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SecureExternalRecipientKeyData": { "name": "SecureExternalRecipientKeyData", @@ -6484,7 +6657,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SendDraftData": { "name": "SendDraftData", @@ -6621,7 +6794,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SendDraftReturn": { "name": "SendDraftReturn", @@ -6683,7 +6856,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SharedGroupData": { "name": "SharedGroupData", @@ -6787,7 +6960,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "SpamResults": { "name": "SpamResults", @@ -6821,7 +6994,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "Subfiles": { "name": "Subfiles", @@ -6855,7 +7028,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "SymEncInternalRecipientKeyData": { "name": "SymEncInternalRecipientKeyData", @@ -6916,7 +7089,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "TemplateGroupRoot": { "name": "TemplateGroupRoot", @@ -7005,7 +7178,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "TranslationGetIn": { "name": "TranslationGetIn", @@ -7037,7 +7210,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "TranslationGetOut": { "name": "TranslationGetOut", @@ -7078,7 +7251,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "TutanotaProperties": { "name": "TutanotaProperties", @@ -7267,7 +7440,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UpdateMailFolderData": { "name": "UpdateMailFolderData", @@ -7311,7 +7484,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAccountCreateData": { "name": "UserAccountCreateData", @@ -7364,7 +7537,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAccountUserData": { "name": "UserAccountUserData", @@ -7585,7 +7758,7 @@ }, "associations": {}, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupData": { "name": "UserAreaGroupData", @@ -7691,7 +7864,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupDeleteData": { "name": "UserAreaGroupDeleteData", @@ -7725,7 +7898,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserAreaGroupPostData": { "name": "UserAreaGroupPostData", @@ -7759,7 +7932,7 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" }, "UserSettingsGroupRoot": { "name": "UserSettingsGroupRoot", @@ -7865,6 +8038,6 @@ } }, "app": "tutanota", - "version": "73" + "version": "75" } } diff --git a/tuta-sdk/rust/sdk/test_data/email_response.json b/tuta-sdk/rust/sdk/test_data/email_response.json index 85312f2131e1..f92c4816e701 100644 --- a/tuta-sdk/rust/sdk/test_data/email_response.json +++ b/tuta-sdk/rust/sdk/test_data/email_response.json @@ -42,5 +42,6 @@ "name": "Aa4w50xGAXcmNXIN55Y7Cr/m9n5AXDNHmIQ9Cph7mffUCzqnQtYfrs8hAa53J5iyyliZ1nSwdCDs4hCXc2KwzXc=", "contact": null }, - "toRecipients": [] + "toRecipients": [], + "sets": [] } diff --git a/tuta-sdk/rust/sdk/test_data/email_response_attachments.json b/tuta-sdk/rust/sdk/test_data/email_response_attachments.json index 739f214bb430..da3c7b339f11 100644 --- a/tuta-sdk/rust/sdk/test_data/email_response_attachments.json +++ b/tuta-sdk/rust/sdk/test_data/email_response_attachments.json @@ -35,5 +35,6 @@ "address": "bed-free@tutanota.de", "name": "Aa9WzeZU8eovYX3G6i+5pAk5odHi3cSFvkzQmdQjeyJIBHzw3rf1xkpWCt0TTpZkhA1bw5aqxaJe/EXSHX5PUHg=", "contact": null - } + }, + "sets": [] } diff --git a/tuta-sdk/rust/sdk/tests/download_mail_test/mail.json b/tuta-sdk/rust/sdk/tests/download_mail_test/mail.json index 276c4ffd9e3c..820625847dc8 100644 --- a/tuta-sdk/rust/sdk/tests/download_mail_test/mail.json +++ b/tuta-sdk/rust/sdk/tests/download_mail_test/mail.json @@ -42,5 +42,6 @@ "name": "AbmMklsiI2yKGMdbpQBc0eX8dPc1hGNeL7NNa5Wdypurp60v0uP+/Do7fBQnalJX/4K09/znZKIUcbapkifHqJc=", "contact": null }, - "toRecipients": [] + "toRecipients": [], + "sets": [] } diff --git a/tuta-sdk/rust/src/entities/accounting.rs b/tuta-sdk/rust/src/entities/accounting.rs new file mode 100644 index 000000000000..6a65623e8315 --- /dev/null +++ b/tuta-sdk/rust/src/entities/accounting.rs @@ -0,0 +1,44 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountPosting { + pub _id: CustomId, + pub amount: i64, + pub invoiceNumber: Option, + #[serde(rename = "type")] + pub r#type: i64, + pub valueDate: DateTime, +} + +impl Entity for CustomerAccountPosting { + fn type_ref() -> TypeRef { + TypeRef { + app: "accounting", + type_: "CustomerAccountPosting", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountReturn { + pub _format: i64, + pub _ownerGroup: Option, + #[serde(with = "serde_bytes")] + pub _ownerPublicEncSessionKey: Option>, + pub _publicCryptoProtocolVersion: Option, + pub balance: i64, + pub outstandingBookingsPrice: i64, + pub postings: Vec, +} + +impl Entity for CustomerAccountReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "accounting", + type_: "CustomerAccountReturn", + } + } +} diff --git a/tuta-sdk/rust/src/entities/base.rs b/tuta-sdk/rust/src/entities/base.rs new file mode 100644 index 000000000000..3544e0039501 --- /dev/null +++ b/tuta-sdk/rust/src/entities/base.rs @@ -0,0 +1,19 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PersistenceResourcePostReturn { + pub _format: i64, + pub generatedId: Option, + pub permissionListId: GeneratedId, +} + +impl Entity for PersistenceResourcePostReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "base", + type_: "PersistenceResourcePostReturn", + } + } +} diff --git a/tuta-sdk/rust/src/entities/gossip.rs b/tuta-sdk/rust/src/entities/gossip.rs new file mode 100644 index 000000000000..f32fe77bc584 --- /dev/null +++ b/tuta-sdk/rust/src/entities/gossip.rs @@ -0,0 +1,4 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + diff --git a/tuta-sdk/rust/src/entities/monitor.rs b/tuta-sdk/rust/src/entities/monitor.rs new file mode 100644 index 000000000000..6467bc6e69f9 --- /dev/null +++ b/tuta-sdk/rust/src/entities/monitor.rs @@ -0,0 +1,153 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ApprovalMail { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub date: Option, + pub range: Option, + pub text: String, + pub customer: Option, +} + +impl Entity for ApprovalMail { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ApprovalMail", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CounterValue { + pub _id: CustomId, + pub counterId: GeneratedId, + pub value: i64, +} + +impl Entity for CounterValue { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "CounterValue", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ErrorReportData { + pub _id: CustomId, + pub additionalInfo: String, + pub appVersion: String, + pub clientType: i64, + pub errorClass: String, + pub errorMessage: Option, + pub stackTrace: String, + pub time: DateTime, + pub userId: Option, + pub userMessage: Option, +} + +impl Entity for ErrorReportData { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ErrorReportData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ErrorReportFile { + pub _id: CustomId, + pub content: String, + pub name: String, +} + +impl Entity for ErrorReportFile { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ErrorReportFile", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReadCounterData { + pub _format: i64, + pub columnName: Option, + pub counterType: i64, + pub rowName: String, +} + +impl Entity for ReadCounterData { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ReadCounterData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReadCounterReturn { + pub _format: i64, + pub value: Option, + pub counterValues: Vec, +} + +impl Entity for ReadCounterReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ReadCounterReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReportErrorIn { + pub _format: i64, + pub data: ErrorReportData, + pub files: Vec, +} + +impl Entity for ReportErrorIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "ReportErrorIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WriteCounterData { + pub _format: i64, + pub column: GeneratedId, + pub counterType: Option, + pub row: String, + pub value: i64, +} + +impl Entity for WriteCounterData { + fn type_ref() -> TypeRef { + TypeRef { + app: "monitor", + type_: "WriteCounterData", + } + } +} diff --git a/tuta-sdk/rust/src/entities/storage.rs b/tuta-sdk/rust/src/entities/storage.rs new file mode 100644 index 000000000000..47b1b01d11a8 --- /dev/null +++ b/tuta-sdk/rust/src/entities/storage.rs @@ -0,0 +1,227 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobAccessTokenPostIn { + pub _format: i64, + pub archiveDataType: Option, + pub read: Option, + pub write: Option, +} + +impl Entity for BlobAccessTokenPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobAccessTokenPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobAccessTokenPostOut { + pub _format: i64, + pub blobAccessInfo: BlobServerAccessInfo, +} + +impl Entity for BlobAccessTokenPostOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobAccessTokenPostOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobArchiveRef { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub archive: GeneratedId, +} + +impl Entity for BlobArchiveRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobArchiveRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobGetIn { + pub _format: i64, + pub archiveId: GeneratedId, + pub blobId: Option, + pub blobIds: Vec, +} + +impl Entity for BlobGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobId { + pub _id: CustomId, + pub blobId: GeneratedId, +} + +impl Entity for BlobId { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobId", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobPostOut { + pub _format: i64, + pub blobReferenceToken: String, +} + +impl Entity for BlobPostOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobPostOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobReadData { + pub _id: CustomId, + pub archiveId: GeneratedId, + pub instanceListId: Option, + pub instanceIds: Vec, +} + +impl Entity for BlobReadData { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobReadData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobReferenceDeleteIn { + pub _format: i64, + pub archiveDataType: i64, + pub instanceId: GeneratedId, + pub instanceListId: Option, + pub blobs: Vec, +} + +impl Entity for BlobReferenceDeleteIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobReferenceDeleteIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobReferencePutIn { + pub _format: i64, + pub archiveDataType: i64, + pub instanceId: GeneratedId, + pub instanceListId: Option, + pub referenceTokens: Vec, +} + +impl Entity for BlobReferencePutIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobReferencePutIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobServerAccessInfo { + pub _id: CustomId, + pub blobAccessToken: String, + pub expires: DateTime, + pub servers: Vec, +} + +impl Entity for BlobServerAccessInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobServerAccessInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobServerUrl { + pub _id: CustomId, + pub url: String, +} + +impl Entity for BlobServerUrl { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobServerUrl", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobWriteData { + pub _id: CustomId, + pub archiveOwnerGroup: GeneratedId, +} + +impl Entity for BlobWriteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "BlobWriteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InstanceId { + pub _id: CustomId, + pub instanceId: Option, +} + +impl Entity for InstanceId { + fn type_ref() -> TypeRef { + TypeRef { + app: "storage", + type_: "InstanceId", + } + } +} diff --git a/tuta-sdk/rust/src/entities/sys.rs b/tuta-sdk/rust/src/entities/sys.rs new file mode 100644 index 000000000000..c0652869d5f5 --- /dev/null +++ b/tuta-sdk/rust/src/entities/sys.rs @@ -0,0 +1,4410 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AccountingInfo { + pub _format: i64, + pub _id: GeneratedId, + pub _modified: DateTime, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub invoiceAddress: String, + pub invoiceCountry: Option, + pub invoiceName: String, + pub invoiceVatIdNo: String, + pub lastInvoiceNbrOfSentSms: i64, + pub lastInvoiceTimestamp: Option, + pub paymentAccountIdentifier: Option, + pub paymentInterval: i64, + pub paymentMethod: Option, + pub paymentMethodInfo: Option, + pub paymentProviderCustomerId: Option, + pub paypalBillingAgreement: Option, + pub secondCountryInfo: i64, + pub appStoreSubscription: Option, + pub invoiceInfo: Option, +} + +impl Entity for AccountingInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AccountingInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AdminGroupKeyRotationPostIn { + pub _format: i64, + pub adminGroupKeyData: GroupKeyRotationData, + pub userGroupKeyData: UserGroupKeyRotationData, +} + +impl Entity for AdminGroupKeyRotationPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AdminGroupKeyRotationPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AdministratedGroupsRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for AdministratedGroupsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AdministratedGroupsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AlarmInfo { + pub _id: CustomId, + pub alarmIdentifier: String, + pub trigger: String, + pub calendarRef: CalendarEventRef, +} + +impl Entity for AlarmInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AlarmInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AlarmNotification { + pub _id: CustomId, + pub eventEnd: DateTime, + pub eventStart: DateTime, + pub operation: i64, + pub summary: String, + pub alarmInfo: AlarmInfo, + pub notificationSessionKeys: Vec, + pub repeatRule: Option, + pub user: GeneratedId, +} + +impl Entity for AlarmNotification { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AlarmNotification", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AlarmServicePost { + pub _format: i64, + pub alarmNotifications: Vec, +} + +impl Entity for AlarmServicePost { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AlarmServicePost", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ArchiveRef { + pub _id: CustomId, + pub archiveId: GeneratedId, +} + +impl Entity for ArchiveRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ArchiveRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ArchiveType { + pub _id: CustomId, + pub active: ArchiveRef, + pub inactive: Vec, + #[serde(rename = "type")] + pub r#type: TypeInfo, +} + +impl Entity for ArchiveType { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ArchiveType", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AuditLogEntry { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub action: String, + pub actorIpAddress: Option, + pub actorMailAddress: String, + pub date: DateTime, + pub modifiedEntity: String, + pub groupInfo: Option, + pub modifiedGroupInfo: Option, +} + +impl Entity for AuditLogEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AuditLogEntry", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AuditLogRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for AuditLogRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AuditLogRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AuthenticatedDevice { + pub _id: CustomId, + pub authType: i64, + #[serde(with = "serde_bytes")] + pub deviceKey: Vec, + pub deviceToken: String, +} + +impl Entity for AuthenticatedDevice { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AuthenticatedDevice", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Authentication { + pub _id: CustomId, + pub accessToken: Option, + pub authVerifier: Option, + pub externalAuthToken: Option, + pub userId: GeneratedId, +} + +impl Entity for Authentication { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Authentication", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AutoLoginDataDelete { + pub _format: i64, + pub deviceToken: String, +} + +impl Entity for AutoLoginDataDelete { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AutoLoginDataDelete", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AutoLoginDataGet { + pub _format: i64, + pub deviceToken: String, + pub userId: GeneratedId, +} + +impl Entity for AutoLoginDataGet { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AutoLoginDataGet", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AutoLoginDataReturn { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub deviceKey: Vec, +} + +impl Entity for AutoLoginDataReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AutoLoginDataReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AutoLoginPostReturn { + pub _format: i64, + pub deviceToken: String, +} + +impl Entity for AutoLoginPostReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "AutoLoginPostReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Blob { + pub _id: CustomId, + pub archiveId: GeneratedId, + pub blobId: GeneratedId, + pub size: i64, +} + +impl Entity for Blob { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Blob", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BlobReferenceTokenWrapper { + pub _id: CustomId, + pub blobReferenceToken: String, +} + +impl Entity for BlobReferenceTokenWrapper { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BlobReferenceTokenWrapper", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Booking { + pub _area: i64, + pub _format: i64, + pub _id: IdTuple, + pub _owner: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub bonusMonth: i64, + pub createDate: DateTime, + pub endDate: Option, + pub paymentInterval: i64, + pub paymentMonths: i64, + pub items: Vec, +} + +impl Entity for Booking { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Booking", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BookingItem { + pub _id: CustomId, + pub currentCount: i64, + pub currentInvoicedCount: i64, + pub featureType: i64, + pub maxCount: i64, + pub price: i64, + pub priceType: i64, + pub totalInvoicedCount: i64, +} + +impl Entity for BookingItem { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BookingItem", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BookingsRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for BookingsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BookingsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BootstrapFeature { + pub _id: CustomId, + pub feature: i64, +} + +impl Entity for BootstrapFeature { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BootstrapFeature", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Braintree3ds2Request { + pub _id: CustomId, + pub bin: String, + pub clientToken: String, + pub nonce: String, +} + +impl Entity for Braintree3ds2Request { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Braintree3ds2Request", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Braintree3ds2Response { + pub _id: CustomId, + pub clientToken: String, + pub nonce: String, +} + +impl Entity for Braintree3ds2Response { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Braintree3ds2Response", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BrandingDomainData { + pub _format: i64, + pub domain: String, + #[serde(with = "serde_bytes")] + pub sessionEncPemCertificateChain: Option>, + #[serde(with = "serde_bytes")] + pub sessionEncPemPrivateKey: Option>, + #[serde(with = "serde_bytes")] + pub systemAdminPubEncSessionKey: Vec, + pub systemAdminPubKeyVersion: i64, + pub systemAdminPublicProtocolVersion: i64, +} + +impl Entity for BrandingDomainData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BrandingDomainData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BrandingDomainDeleteData { + pub _format: i64, + pub domain: String, +} + +impl Entity for BrandingDomainDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BrandingDomainDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BrandingDomainGetReturn { + pub _format: i64, + pub certificateInfo: Option, +} + +impl Entity for BrandingDomainGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BrandingDomainGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Bucket { + pub _id: CustomId, + pub bucketPermissions: GeneratedId, +} + +impl Entity for Bucket { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Bucket", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BucketKey { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub groupEncBucketKey: Option>, + pub protocolVersion: i64, + #[serde(with = "serde_bytes")] + pub pubEncBucketKey: Option>, + pub recipientKeyVersion: i64, + pub senderKeyVersion: Option, + pub bucketEncSessionKeys: Vec, + pub keyGroup: Option, +} + +impl Entity for BucketKey { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BucketKey", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct BucketPermission { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub ownerEncBucketKey: Option>, + pub ownerKeyVersion: Option, + pub protocolVersion: i64, + #[serde(with = "serde_bytes")] + pub pubEncBucketKey: Option>, + pub pubKeyVersion: Option, + pub senderKeyVersion: Option, + #[serde(with = "serde_bytes")] + pub symEncBucketKey: Option>, + pub symKeyVersion: Option, + #[serde(rename = "type")] + pub r#type: i64, + pub group: GeneratedId, +} + +impl Entity for BucketPermission { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "BucketPermission", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventRef { + pub _id: CustomId, + pub elementId: CustomId, + pub listId: GeneratedId, +} + +impl Entity for CalendarEventRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CalendarEventRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CertificateInfo { + pub _id: CustomId, + pub expiryDate: Option, + pub state: i64, + #[serde(rename = "type")] + pub r#type: i64, + pub certificate: Option, +} + +impl Entity for CertificateInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CertificateInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Challenge { + pub _id: CustomId, + #[serde(rename = "type")] + pub r#type: i64, + pub otp: Option, + pub u2f: Option, +} + +impl Entity for Challenge { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Challenge", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ChangeKdfPostIn { + pub _format: i64, + pub kdfVersion: i64, + #[serde(with = "serde_bytes")] + pub oldVerifier: Vec, + #[serde(with = "serde_bytes")] + pub pwEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub salt: Vec, + pub userGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub verifier: Vec, +} + +impl Entity for ChangeKdfPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ChangeKdfPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ChangePasswordPostIn { + pub _format: i64, + pub code: Option, + pub kdfVersion: i64, + #[serde(with = "serde_bytes")] + pub oldVerifier: Option>, + #[serde(with = "serde_bytes")] + pub pwEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub recoverCodeVerifier: Option>, + #[serde(with = "serde_bytes")] + pub salt: Vec, + pub userGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub verifier: Vec, +} + +impl Entity for ChangePasswordPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ChangePasswordPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Chat { + pub _id: CustomId, + pub recipient: GeneratedId, + pub sender: GeneratedId, + pub text: String, +} + +impl Entity for Chat { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Chat", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CloseSessionServicePost { + pub _format: i64, + pub accessToken: String, + pub sessionId: IdTuple, +} + +impl Entity for CloseSessionServicePost { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CloseSessionServicePost", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateCustomerServerPropertiesData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub adminGroupEncSessionKey: Vec, + pub adminGroupKeyVersion: i64, +} + +impl Entity for CreateCustomerServerPropertiesData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CreateCustomerServerPropertiesData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateCustomerServerPropertiesReturn { + pub _format: i64, + pub id: GeneratedId, +} + +impl Entity for CreateCustomerServerPropertiesReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CreateCustomerServerPropertiesReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateSessionData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub accessKey: Option>, + pub authToken: Option, + pub authVerifier: Option, + pub clientIdentifier: String, + pub mailAddress: Option, + pub recoverCodeVerifier: Option, + pub user: Option, +} + +impl Entity for CreateSessionData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CreateSessionData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateSessionReturn { + pub _format: i64, + pub accessToken: String, + pub challenges: Vec, + pub user: GeneratedId, +} + +impl Entity for CreateSessionReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CreateSessionReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreditCard { + pub _id: CustomId, + pub cardHolderName: String, + pub cvv: String, + pub expirationMonth: String, + pub expirationYear: String, + pub number: String, +} + +impl Entity for CreditCard { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CreditCard", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomDomainCheckGetIn { + pub _format: i64, + pub domain: String, + pub customer: Option, +} + +impl Entity for CustomDomainCheckGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomDomainCheckGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomDomainCheckGetOut { + pub _format: i64, + pub checkResult: i64, + pub invalidRecords: Vec, + pub missingRecords: Vec, + pub requiredRecords: Vec, +} + +impl Entity for CustomDomainCheckGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomDomainCheckGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomDomainData { + pub _format: i64, + pub domain: String, + pub catchAllMailGroup: Option, +} + +impl Entity for CustomDomainData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomDomainData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomDomainReturn { + pub _format: i64, + pub validationResult: i64, + pub invalidDnsRecords: Vec, +} + +impl Entity for CustomDomainReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomDomainReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Customer { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub approvalStatus: i64, + pub businessUse: bool, + pub orderProcessingAgreementNeeded: bool, + #[serde(rename = "type")] + pub r#type: i64, + pub adminGroup: GeneratedId, + pub adminGroups: GeneratedId, + pub auditLog: Option, + pub customerGroup: GeneratedId, + pub customerGroups: GeneratedId, + pub customerInfo: IdTuple, + pub customizations: Vec, + pub orderProcessingAgreement: Option, + pub properties: Option, + pub referralCode: Option, + pub rejectedSenders: Option, + pub serverProperties: Option, + pub teamGroups: GeneratedId, + pub userAreaGroups: Option, + pub userGroups: GeneratedId, + pub whitelabelChildren: Option, + pub whitelabelParent: Option, +} + +impl Entity for Customer { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Customer", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountTerminationPostIn { + pub _format: i64, + pub terminationDate: Option, + pub surveyData: Option, +} + +impl Entity for CustomerAccountTerminationPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerAccountTerminationPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountTerminationPostOut { + pub _format: i64, + pub terminationRequest: IdTuple, +} + +impl Entity for CustomerAccountTerminationPostOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerAccountTerminationPostOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountTerminationRequest { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub terminationDate: DateTime, + pub terminationRequestDate: DateTime, + pub customer: GeneratedId, +} + +impl Entity for CustomerAccountTerminationRequest { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerAccountTerminationRequest", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerInfo { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub activationTime: Option, + pub company: Option, + pub creationTime: DateTime, + pub deletionReason: Option, + pub deletionTime: Option, + pub domain: String, + pub erased: bool, + pub includedEmailAliases: i64, + pub includedStorageCapacity: i64, + pub perUserAliasCount: i64, + pub perUserStorageCapacity: i64, + pub plan: i64, + pub promotionEmailAliases: i64, + pub promotionStorageCapacity: i64, + pub registrationMailAddress: String, + pub source: String, + pub testEndTime: Option, + pub usedSharedEmailAliases: i64, + pub accountingInfo: GeneratedId, + pub bookings: Option, + pub customPlan: Option, + pub customer: GeneratedId, + pub domainInfos: Vec, + pub giftCards: Option, + pub referredBy: Option, + pub supportInfo: Option, + pub takeoverCustomer: Option, + pub terminationRequest: Option, +} + +impl Entity for CustomerInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerProperties { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub externalUserWelcomeMessage: String, + pub lastUpgradeReminder: Option, + pub usageDataOptedOut: bool, + pub bigLogo: Option, + pub notificationMailTemplates: Vec, + pub smallLogo: Option, +} + +impl Entity for CustomerProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerServerProperties { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub requirePasswordUpdateAfterReset: bool, + pub saveEncryptedIpAddressInSession: bool, + pub whitelabelCode: String, + pub emailSenderList: Vec, + pub whitelabelRegistrationDomains: Vec, + pub whitelistedDomains: Option, +} + +impl Entity for CustomerServerProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "CustomerServerProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DateWrapper { + pub _id: CustomId, + pub date: DateTime, +} + +impl Entity for DateWrapper { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DateWrapper", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DebitServicePutData { + pub _format: i64, + pub invoice: Option, +} + +impl Entity for DebitServicePutData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DebitServicePutData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DeleteCustomerData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub authVerifier: Option>, + pub reason: Option, + pub takeoverMailAddress: Option, + pub undelete: bool, + pub customer: GeneratedId, + pub surveyData: Option, +} + +impl Entity for DeleteCustomerData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DeleteCustomerData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DnsRecord { + pub _id: CustomId, + pub subdomain: Option, + #[serde(rename = "type")] + pub r#type: i64, + pub value: String, +} + +impl Entity for DnsRecord { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DnsRecord", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DomainInfo { + pub _id: CustomId, + pub domain: String, + pub validatedMxRecord: bool, + pub catchAllMailGroup: Option, + pub whitelabelConfig: Option, +} + +impl Entity for DomainInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DomainInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DomainMailAddressAvailabilityData { + pub _format: i64, + pub mailAddress: String, +} + +impl Entity for DomainMailAddressAvailabilityData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DomainMailAddressAvailabilityData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DomainMailAddressAvailabilityReturn { + pub _format: i64, + pub available: bool, +} + +impl Entity for DomainMailAddressAvailabilityReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DomainMailAddressAvailabilityReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DomainsRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for DomainsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "DomainsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EmailSenderListElement { + pub _id: CustomId, + pub field: i64, + pub hashedValue: String, + #[serde(rename = "type")] + pub r#type: i64, + pub value: String, +} + +impl Entity for EmailSenderListElement { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "EmailSenderListElement", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EntityEventBatch { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub events: Vec, +} + +impl Entity for EntityEventBatch { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "EntityEventBatch", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EntityUpdate { + pub _id: CustomId, + pub application: String, + pub instanceId: String, + pub instanceListId: String, + pub operation: i64, + #[serde(rename = "type")] + pub r#type: String, +} + +impl Entity for EntityUpdate { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "EntityUpdate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SysException { + pub _id: CustomId, + pub msg: String, + #[serde(rename = "type")] + pub r#type: String, +} + +impl Entity for SysException { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SysException", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ExternalPropertiesReturn { + pub _format: i64, + pub accountType: i64, + pub message: String, + pub bigLogo: Option, + pub smallLogo: Option, +} + +impl Entity for ExternalPropertiesReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ExternalPropertiesReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ExternalUserReference { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub user: GeneratedId, + pub userGroup: GeneratedId, +} + +impl Entity for ExternalUserReference { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ExternalUserReference", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Feature { + pub _id: CustomId, + pub feature: i64, +} + +impl Entity for Feature { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Feature", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct File { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub data: Vec, + pub mimeType: String, + pub name: String, +} + +impl Entity for File { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "File", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GeneratedIdWrapper { + pub _id: CustomId, + pub value: GeneratedId, +} + +impl Entity for GeneratedIdWrapper { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GeneratedIdWrapper", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCard { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub message: String, + pub migrated: bool, + pub orderDate: DateTime, + pub status: i64, + pub value: i64, +} + +impl Entity for GiftCard { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCard", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardCreateData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub keyHash: Vec, + pub message: String, + #[serde(with = "serde_bytes")] + pub ownerEncSessionKey: Vec, + pub ownerKeyVersion: i64, + pub value: i64, +} + +impl Entity for GiftCardCreateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardCreateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardCreateReturn { + pub _format: i64, + pub giftCard: IdTuple, +} + +impl Entity for GiftCardCreateReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardCreateReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardDeleteData { + pub _format: i64, + pub giftCard: IdTuple, +} + +impl Entity for GiftCardDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardGetReturn { + pub _format: i64, + pub maxPerPeriod: i64, + pub period: i64, + pub options: Vec, +} + +impl Entity for GiftCardGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardOption { + pub _id: CustomId, + pub value: i64, +} + +impl Entity for GiftCardOption { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardOption", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardRedeemData { + pub _format: i64, + pub countryCode: String, + #[serde(with = "serde_bytes")] + pub keyHash: Vec, + pub giftCardInfo: GeneratedId, +} + +impl Entity for GiftCardRedeemData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardRedeemData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardRedeemGetReturn { + pub _format: i64, + pub message: String, + pub value: i64, + pub giftCard: IdTuple, +} + +impl Entity for GiftCardRedeemGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardRedeemGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GiftCardsRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for GiftCardsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GiftCardsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Group { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub adminGroupEncGKey: Option>, + pub adminGroupKeyVersion: Option, + pub enabled: bool, + pub external: bool, + pub groupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub pubAdminGroupEncGKey: Option>, + #[serde(rename = "type")] + pub r#type: i64, + pub admin: Option, + pub administratedGroups: Option, + pub archives: Vec, + pub currentKeys: Option, + pub customer: Option, + pub formerGroupKeys: Option, + pub groupInfo: IdTuple, + pub invitations: GeneratedId, + pub members: GeneratedId, + pub storageCounter: Option, + pub user: Option, +} + +impl Entity for Group { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Group", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupInfo { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _listEncSessionKey: Option>, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub created: DateTime, + pub deleted: Option, + pub groupType: Option, + pub mailAddress: Option, + pub name: String, + pub group: GeneratedId, + pub localAdmin: Option, + pub mailAddressAliases: Vec, +} + +impl Entity for GroupInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKey { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub adminGroupEncGKey: Option>, + pub adminGroupKeyVersion: Option, + #[serde(with = "serde_bytes")] + pub ownerEncGKey: Vec, + pub ownerKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub pubAdminGroupEncGKey: Option>, + pub keyPair: Option, +} + +impl Entity for GroupKey { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKey", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyRotationData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub adminGroupEncGroupKey: Option>, + pub adminGroupKeyVersion: Option, + #[serde(with = "serde_bytes")] + pub groupEncPreviousGroupKey: Vec, + pub groupKeyVersion: i64, + pub group: GeneratedId, + pub groupKeyUpdatesForMembers: Vec, + pub groupMembershipUpdateData: Vec, + pub keyPair: Option, +} + +impl Entity for GroupKeyRotationData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyRotationData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyRotationInfoGetOut { + pub _format: i64, + pub userOrAdminGroupKeyRotationScheduled: bool, + pub groupKeyUpdates: Vec, +} + +impl Entity for GroupKeyRotationInfoGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyRotationInfoGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyRotationPostIn { + pub _format: i64, + pub groupKeyUpdates: Vec, +} + +impl Entity for GroupKeyRotationPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyRotationPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyUpdate { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub groupKey: Vec, + pub groupKeyVersion: i64, + pub bucketKey: BucketKey, +} + +impl Entity for GroupKeyUpdate { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyUpdate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyUpdateData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub bucketKeyEncSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub sessionKeyEncGroupKey: Vec, + pub sessionKeyEncGroupKeyVersion: i64, + pub pubEncBucketKeyData: PubEncKeyData, +} + +impl Entity for GroupKeyUpdateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyUpdateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeyUpdatesRef { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for GroupKeyUpdatesRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeyUpdatesRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupKeysRef { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for GroupKeysRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupKeysRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupMember { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub capability: Option, + pub group: GeneratedId, + pub user: GeneratedId, + pub userGroupInfo: IdTuple, +} + +impl Entity for GroupMember { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupMember", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupMembership { + pub _id: CustomId, + pub admin: bool, + pub capability: Option, + pub groupKeyVersion: i64, + pub groupType: Option, + #[serde(with = "serde_bytes")] + pub symEncGKey: Vec, + pub symKeyVersion: i64, + pub group: GeneratedId, + pub groupInfo: IdTuple, + pub groupMember: IdTuple, +} + +impl Entity for GroupMembership { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupMembership", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupMembershipKeyData { + pub _id: CustomId, + pub groupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub symEncGKey: Vec, + pub symKeyVersion: i64, + pub group: GeneratedId, +} + +impl Entity for GroupMembershipKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupMembershipKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupMembershipUpdateData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub userEncGroupKey: Vec, + pub userKeyVersion: i64, + pub userId: GeneratedId, +} + +impl Entity for GroupMembershipUpdateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupMembershipUpdateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupRoot { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub externalGroupInfos: GeneratedId, + pub externalUserAreaGroupInfos: Option, + pub externalUserReferences: GeneratedId, +} + +impl Entity for GroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "GroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct IdTupleWrapper { + pub _id: CustomId, + pub listElementId: GeneratedId, + pub listId: GeneratedId, +} + +impl Entity for IdTupleWrapper { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "IdTupleWrapper", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InstanceSessionKey { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub encryptionAuthStatus: Option>, + pub instanceId: GeneratedId, + pub instanceList: GeneratedId, + #[serde(with = "serde_bytes")] + pub symEncSessionKey: Vec, + pub symKeyVersion: i64, + pub typeInfo: TypeInfo, +} + +impl Entity for InstanceSessionKey { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InstanceSessionKey", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Invoice { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub address: String, + pub adminUser: Option, + pub business: bool, + pub country: String, + pub date: DateTime, + pub grandTotal: i64, + pub paymentMethod: i64, + pub reason: Option, + pub subTotal: i64, + #[serde(rename = "type")] + pub r#type: i64, + pub vat: i64, + pub vatIdNumber: Option, + pub vatRate: i64, + pub bookings: Vec, + pub customer: GeneratedId, + pub items: Vec, +} + +impl Entity for Invoice { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Invoice", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InvoiceDataGetIn { + pub _format: i64, + pub invoiceNumber: String, +} + +impl Entity for InvoiceDataGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InvoiceDataGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InvoiceDataGetOut { + pub _format: i64, + pub address: String, + pub country: String, + pub date: DateTime, + pub grandTotal: i64, + pub invoiceId: GeneratedId, + pub invoiceType: i64, + pub paymentMethod: i64, + pub subTotal: i64, + pub vat: i64, + pub vatIdNumber: Option, + pub vatRate: i64, + pub vatType: i64, + pub items: Vec, +} + +impl Entity for InvoiceDataGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InvoiceDataGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InvoiceDataItem { + pub _id: CustomId, + pub amount: i64, + pub endDate: Option, + pub itemType: i64, + pub singlePrice: Option, + pub startDate: Option, + pub totalPrice: i64, +} + +impl Entity for InvoiceDataItem { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InvoiceDataItem", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InvoiceInfo { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub discountPercentage: Option, + pub extendedPeriodOfPaymentDays: i64, + pub persistentPaymentPeriodExtension: bool, + pub publishInvoices: bool, + pub reminderState: i64, + pub specialPriceBrandingPerUser: Option, + pub specialPriceBusinessPerUser: Option, + pub specialPriceContactFormSingle: Option, + pub specialPriceSharedGroupSingle: Option, + pub specialPriceSharingPerUser: Option, + pub specialPriceUserSingle: Option, + pub specialPriceUserTotal: Option, + pub invoices: GeneratedId, + pub paymentErrorInfo: Option, +} + +impl Entity for InvoiceInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InvoiceInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InvoiceItem { + pub _id: CustomId, + pub amount: i64, + pub endDate: Option, + pub singlePrice: Option, + pub singleType: bool, + pub startDate: Option, + pub totalPrice: i64, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for InvoiceItem { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "InvoiceItem", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct KeyPair { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub pubEccKey: Option>, + #[serde(with = "serde_bytes")] + pub pubKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub pubRsaKey: Option>, + #[serde(with = "serde_bytes")] + pub symEncPrivEccKey: Option>, + #[serde(with = "serde_bytes")] + pub symEncPrivKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub symEncPrivRsaKey: Option>, +} + +impl Entity for KeyPair { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "KeyPair", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct KeyRotation { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub groupKeyRotationType: i64, + pub targetKeyVersion: i64, +} + +impl Entity for KeyRotation { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "KeyRotation", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct KeyRotationsRef { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for KeyRotationsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "KeyRotationsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct LocationServiceGetReturn { + pub _format: i64, + pub country: String, +} + +impl Entity for LocationServiceGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "LocationServiceGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Login { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub time: DateTime, +} + +impl Entity for Login { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Login", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAlias { + pub _id: CustomId, + pub enabled: bool, + pub mailAddress: String, +} + +impl Entity for MailAddressAlias { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAlias", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAliasGetIn { + pub _format: i64, + pub targetGroup: GeneratedId, +} + +impl Entity for MailAddressAliasGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAliasGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAliasServiceData { + pub _format: i64, + pub mailAddress: String, + pub group: GeneratedId, +} + +impl Entity for MailAddressAliasServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAliasServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAliasServiceDataDelete { + pub _format: i64, + pub mailAddress: String, + pub restore: bool, + pub group: GeneratedId, +} + +impl Entity for MailAddressAliasServiceDataDelete { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAliasServiceDataDelete", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAliasServiceReturn { + pub _format: i64, + pub enabledAliases: i64, + pub nbrOfFreeAliases: i64, + pub totalAliases: i64, + pub usedAliases: i64, +} + +impl Entity for MailAddressAliasServiceReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAliasServiceReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressAvailability { + pub _id: CustomId, + pub available: bool, + pub mailAddress: String, +} + +impl Entity for MailAddressAvailability { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressAvailability", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressToGroup { + pub _format: i64, + pub _id: CustomId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub internalGroup: Option, +} + +impl Entity for MailAddressToGroup { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MailAddressToGroup", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MembershipAddData { + pub _format: i64, + pub groupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub symEncGKey: Vec, + pub symKeyVersion: i64, + pub group: GeneratedId, + pub user: GeneratedId, +} + +impl Entity for MembershipAddData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MembershipAddData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MembershipPutIn { + pub _format: i64, + pub groupKeyUpdates: Vec, +} + +impl Entity for MembershipPutIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MembershipPutIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MembershipRemoveData { + pub _format: i64, + pub group: GeneratedId, + pub user: GeneratedId, +} + +impl Entity for MembershipRemoveData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MembershipRemoveData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MissedNotification { + pub _format: i64, + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub changeTime: DateTime, + pub confirmationId: GeneratedId, + pub lastProcessedNotificationId: Option, + pub alarmNotifications: Vec, + pub notificationInfos: Vec, +} + +impl Entity for MissedNotification { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MissedNotification", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MultipleMailAddressAvailabilityData { + pub _format: i64, + pub mailAddresses: Vec, +} + +impl Entity for MultipleMailAddressAvailabilityData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MultipleMailAddressAvailabilityData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MultipleMailAddressAvailabilityReturn { + pub _format: i64, + pub availabilities: Vec, +} + +impl Entity for MultipleMailAddressAvailabilityReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "MultipleMailAddressAvailabilityReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NotificationInfo { + pub _id: CustomId, + pub mailAddress: String, + pub userId: GeneratedId, + pub mailId: Option, +} + +impl Entity for NotificationInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "NotificationInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NotificationMailTemplate { + pub _id: CustomId, + pub body: String, + pub language: String, + pub subject: String, +} + +impl Entity for NotificationMailTemplate { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "NotificationMailTemplate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NotificationSessionKey { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub pushIdentifierSessionEncSessionKey: Vec, + pub pushIdentifier: IdTuple, +} + +impl Entity for NotificationSessionKey { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "NotificationSessionKey", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct OrderProcessingAgreement { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub customerAddress: String, + pub signatureDate: DateTime, + pub version: String, + pub customer: GeneratedId, + pub signerUserGroupInfo: IdTuple, +} + +impl Entity for OrderProcessingAgreement { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "OrderProcessingAgreement", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct OtpChallenge { + pub _id: CustomId, + pub secondFactors: Vec, +} + +impl Entity for OtpChallenge { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "OtpChallenge", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentDataServiceGetData { + pub _format: i64, + pub clientType: Option, +} + +impl Entity for PaymentDataServiceGetData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentDataServiceGetData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentDataServiceGetReturn { + pub _format: i64, + pub loginUrl: String, +} + +impl Entity for PaymentDataServiceGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentDataServiceGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentDataServicePostData { + pub _format: i64, + pub braintree3dsResponse: Braintree3ds2Response, +} + +impl Entity for PaymentDataServicePostData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentDataServicePostData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentDataServicePutData { + pub _format: i64, + pub confirmedCountry: Option, + pub invoiceAddress: String, + pub invoiceCountry: String, + pub invoiceName: String, + pub invoiceVatIdNo: String, + pub paymentInterval: i64, + pub paymentMethod: i64, + pub paymentMethodInfo: Option, + pub paymentToken: Option, + pub creditCard: Option, +} + +impl Entity for PaymentDataServicePutData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentDataServicePutData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentDataServicePutReturn { + pub _format: i64, + pub result: i64, + pub braintree3dsRequest: Option, +} + +impl Entity for PaymentDataServicePutReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentDataServicePutReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PaymentErrorInfo { + pub _id: CustomId, + pub errorCode: String, + pub errorTime: DateTime, + pub thirdPartyErrorId: String, +} + +impl Entity for PaymentErrorInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PaymentErrorInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Permission { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub bucketEncSessionKey: Option>, + pub listElementApplication: Option, + pub listElementTypeId: Option, + pub ops: Option, + #[serde(with = "serde_bytes")] + pub symEncSessionKey: Option>, + pub symKeyVersion: Option, + #[serde(rename = "type")] + pub r#type: i64, + pub bucket: Option, + pub group: Option, +} + +impl Entity for Permission { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Permission", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PlanConfiguration { + pub _id: CustomId, + pub autoResponder: bool, + pub contactList: bool, + pub customDomainType: i64, + pub eventInvites: bool, + pub multiUser: bool, + pub nbrOfAliases: i64, + pub sharing: bool, + pub storageGb: i64, + pub templates: bool, + pub whitelabel: bool, +} + +impl Entity for PlanConfiguration { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PlanConfiguration", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PlanPrices { + pub _id: CustomId, + pub additionalUserPriceMonthly: i64, + pub business: bool, + pub businessPlan: bool, + pub customDomains: i64, + pub firstYearDiscount: i64, + pub includedAliases: i64, + pub includedStorage: i64, + pub monthlyPrice: i64, + pub monthlyReferencePrice: i64, + pub planName: String, + pub sharing: bool, + pub whitelabel: bool, + pub planConfiguration: PlanConfiguration, +} + +impl Entity for PlanPrices { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PlanPrices", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PlanServiceGetOut { + pub _format: i64, + pub config: PlanConfiguration, +} + +impl Entity for PlanServiceGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PlanServiceGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PriceData { + pub _id: CustomId, + pub paymentInterval: i64, + pub price: i64, + pub taxIncluded: bool, + pub items: Vec, +} + +impl Entity for PriceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PriceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PriceItemData { + pub _id: CustomId, + pub count: i64, + pub featureType: i64, + pub price: i64, + pub singleType: bool, +} + +impl Entity for PriceItemData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PriceItemData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PriceRequestData { + pub _id: CustomId, + pub accountType: Option, + pub business: Option, + pub count: i64, + pub featureType: i64, + pub paymentInterval: Option, + pub reactivate: bool, +} + +impl Entity for PriceRequestData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PriceRequestData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PriceServiceData { + pub _format: i64, + pub date: Option, + pub priceRequest: Option, +} + +impl Entity for PriceServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PriceServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PriceServiceReturn { + pub _format: i64, + pub currentPeriodAddedPrice: Option, + pub periodEndDate: DateTime, + pub currentPriceNextPeriod: Option, + pub currentPriceThisPeriod: Option, + pub futurePriceNextPeriod: Option, +} + +impl Entity for PriceServiceReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PriceServiceReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PubEncKeyData { + pub _id: CustomId, + pub mailAddress: String, + pub protocolVersion: i64, + #[serde(with = "serde_bytes")] + pub pubEncBucketKey: Vec, + pub recipientKeyVersion: i64, + pub senderKeyVersion: Option, +} + +impl Entity for PubEncKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PubEncKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PublicKeyGetIn { + pub _format: i64, + pub mailAddress: String, + pub version: Option, +} + +impl Entity for PublicKeyGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PublicKeyGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PublicKeyGetOut { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub pubEccKey: Option>, + pub pubKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub pubKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub pubRsaKey: Option>, +} + +impl Entity for PublicKeyGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PublicKeyGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PublicKeyPutIn { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub pubEccKey: Vec, + #[serde(with = "serde_bytes")] + pub symEncPrivEccKey: Vec, + pub keyGroup: GeneratedId, +} + +impl Entity for PublicKeyPutIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PublicKeyPutIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PushIdentifier { + pub _area: i64, + pub _format: i64, + pub _id: IdTuple, + pub _owner: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub app: i64, + pub disabled: bool, + pub displayName: String, + pub identifier: String, + pub language: String, + pub lastNotificationDate: Option, + pub lastUsageTime: DateTime, + pub pushServiceType: i64, +} + +impl Entity for PushIdentifier { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PushIdentifier", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PushIdentifierList { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for PushIdentifierList { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "PushIdentifierList", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReceivedGroupInvitation { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub capability: i64, + pub groupType: Option, + pub inviteeMailAddress: String, + pub inviterMailAddress: String, + pub inviterName: String, + #[serde(with = "serde_bytes")] + pub sharedGroupKey: Vec, + pub sharedGroupKeyVersion: i64, + pub sharedGroupName: String, + pub sentInvitation: IdTuple, + pub sharedGroup: GeneratedId, +} + +impl Entity for ReceivedGroupInvitation { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ReceivedGroupInvitation", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RecoverCode { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub recoverCodeEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncRecoverCode: Vec, + pub userKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub verifier: Vec, +} + +impl Entity for RecoverCode { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RecoverCode", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RecoverCodeData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub recoveryCodeEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub recoveryCodeVerifier: Vec, + #[serde(with = "serde_bytes")] + pub userEncRecoveryCode: Vec, + pub userKeyVersion: i64, +} + +impl Entity for RecoverCodeData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RecoverCodeData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReferralCodeGetIn { + pub _format: i64, + pub referralCode: GeneratedId, +} + +impl Entity for ReferralCodeGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ReferralCodeGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReferralCodePostIn { + pub _format: i64, +} + +impl Entity for ReferralCodePostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ReferralCodePostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReferralCodePostOut { + pub _format: i64, + pub referralCode: GeneratedId, +} + +impl Entity for ReferralCodePostOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ReferralCodePostOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RegistrationCaptchaServiceData { + pub _format: i64, + pub response: String, + pub token: String, +} + +impl Entity for RegistrationCaptchaServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RegistrationCaptchaServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RegistrationCaptchaServiceGetData { + pub _format: i64, + pub businessUseSelected: bool, + pub mailAddress: String, + pub paidSubscriptionSelected: bool, + pub signupToken: Option, + pub token: Option, +} + +impl Entity for RegistrationCaptchaServiceGetData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RegistrationCaptchaServiceGetData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RegistrationCaptchaServiceReturn { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub challenge: Option>, + pub token: String, +} + +impl Entity for RegistrationCaptchaServiceReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RegistrationCaptchaServiceReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RegistrationReturn { + pub _format: i64, + pub authToken: String, +} + +impl Entity for RegistrationReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RegistrationReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RegistrationServiceData { + pub _format: i64, + pub source: Option, + pub starterDomain: String, + pub state: i64, +} + +impl Entity for RegistrationServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RegistrationServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RejectedSender { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub reason: String, + pub recipientMailAddress: String, + pub senderHostname: String, + pub senderIp: String, + pub senderMailAddress: String, +} + +impl Entity for RejectedSender { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RejectedSender", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RejectedSendersRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for RejectedSendersRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RejectedSendersRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RepeatRule { + pub _id: CustomId, + pub endType: i64, + pub endValue: Option, + pub frequency: i64, + pub interval: i64, + pub timeZone: String, + pub excludedDates: Vec, +} + +impl Entity for RepeatRule { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RepeatRule", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ResetFactorsDeleteData { + pub _format: i64, + pub authVerifier: String, + pub mailAddress: String, + pub recoverCodeVerifier: String, +} + +impl Entity for ResetFactorsDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ResetFactorsDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ResetPasswordPostIn { + pub _format: i64, + pub kdfVersion: i64, + #[serde(with = "serde_bytes")] + pub pwEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub salt: Vec, + pub userGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub verifier: Vec, + pub user: GeneratedId, +} + +impl Entity for ResetPasswordPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "ResetPasswordPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RootInstance { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub reference: GeneratedId, +} + +impl Entity for RootInstance { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "RootInstance", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SaltData { + pub _format: i64, + pub mailAddress: String, +} + +impl Entity for SaltData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SaltData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SaltReturn { + pub _format: i64, + pub kdfVersion: i64, + #[serde(with = "serde_bytes")] + pub salt: Vec, +} + +impl Entity for SaltReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SaltReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactor { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub name: String, + #[serde(with = "serde_bytes")] + pub otpSecret: Option>, + #[serde(rename = "type")] + pub r#type: i64, + pub u2f: Option, +} + +impl Entity for SecondFactor { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactor", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthAllowedReturn { + pub _format: i64, + pub allowed: bool, +} + +impl Entity for SecondFactorAuthAllowedReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthAllowedReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthData { + pub _format: i64, + pub otpCode: Option, + #[serde(rename = "type")] + pub r#type: Option, + pub session: Option, + pub u2f: Option, + pub webauthn: Option, +} + +impl Entity for SecondFactorAuthData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthDeleteData { + pub _format: i64, + pub session: IdTuple, +} + +impl Entity for SecondFactorAuthDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthGetData { + pub _format: i64, + pub accessToken: String, +} + +impl Entity for SecondFactorAuthGetData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthGetData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthGetReturn { + pub _format: i64, + pub secondFactorPending: bool, +} + +impl Entity for SecondFactorAuthGetReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthGetReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecondFactorAuthentication { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub code: String, + pub finished: bool, + pub service: String, + pub verifyCount: i64, +} + +impl Entity for SecondFactorAuthentication { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SecondFactorAuthentication", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SendRegistrationCodeData { + pub _format: i64, + pub accountType: i64, + pub authToken: String, + pub language: String, + pub mobilePhoneNumber: String, +} + +impl Entity for SendRegistrationCodeData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SendRegistrationCodeData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SendRegistrationCodeReturn { + pub _format: i64, + pub authToken: String, +} + +impl Entity for SendRegistrationCodeReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SendRegistrationCodeReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SentGroupInvitation { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub capability: i64, + pub inviteeMailAddress: String, + pub receivedInvitation: Option, + pub sharedGroup: GeneratedId, +} + +impl Entity for SentGroupInvitation { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SentGroupInvitation", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Session { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub accessKey: Option>, + pub clientIdentifier: String, + pub lastAccessTime: DateTime, + pub loginIpAddress: Option, + pub loginTime: DateTime, + pub state: i64, + pub challenges: Vec, + pub user: GeneratedId, +} + +impl Entity for Session { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Session", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SignOrderProcessingAgreementData { + pub _format: i64, + pub customerAddress: String, + pub version: String, +} + +impl Entity for SignOrderProcessingAgreementData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SignOrderProcessingAgreementData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SseConnectData { + pub _format: i64, + pub identifier: String, + pub userIds: Vec, +} + +impl Entity for SseConnectData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SseConnectData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct StringConfigValue { + pub _id: CustomId, + pub name: String, + pub value: String, +} + +impl Entity for StringConfigValue { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "StringConfigValue", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct StringWrapper { + pub _id: CustomId, + pub value: String, +} + +impl Entity for StringWrapper { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "StringWrapper", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SurveyData { + pub _id: CustomId, + pub category: i64, + pub details: Option, + pub reason: i64, + pub version: i64, +} + +impl Entity for SurveyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SurveyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SwitchAccountTypePostIn { + pub _format: i64, + pub accountType: i64, + pub customer: Option, + pub date: Option, + pub plan: i64, + pub specialPriceUserSingle: Option, + pub referralCode: Option, + pub surveyData: Option, +} + +impl Entity for SwitchAccountTypePostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SwitchAccountTypePostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SystemKeysReturn { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub freeGroupKey: Vec, + pub freeGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub premiumGroupKey: Vec, + pub premiumGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub systemAdminPubEccKey: Option>, + pub systemAdminPubKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub systemAdminPubKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub systemAdminPubRsaKey: Option>, + pub freeGroup: Option, + pub premiumGroup: Option, +} + +impl Entity for SystemKeysReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "SystemKeysReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TakeOverDeletedAddressData { + pub _format: i64, + pub authVerifier: String, + pub mailAddress: String, + pub recoverCodeVerifier: Option, + pub targetAccountMailAddress: String, +} + +impl Entity for TakeOverDeletedAddressData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "TakeOverDeletedAddressData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TypeInfo { + pub _id: CustomId, + pub application: String, + pub typeId: i64, +} + +impl Entity for TypeInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "TypeInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct U2fChallenge { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub challenge: Vec, + pub keys: Vec, +} + +impl Entity for U2fChallenge { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "U2fChallenge", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct U2fKey { + pub _id: CustomId, + pub appId: String, + #[serde(with = "serde_bytes")] + pub keyHandle: Vec, + pub secondFactor: IdTuple, +} + +impl Entity for U2fKey { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "U2fKey", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct U2fRegisteredDevice { + pub _id: CustomId, + pub appId: String, + pub compromised: bool, + pub counter: i64, + #[serde(with = "serde_bytes")] + pub keyHandle: Vec, + #[serde(with = "serde_bytes")] + pub publicKey: Vec, +} + +impl Entity for U2fRegisteredDevice { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "U2fRegisteredDevice", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct U2fResponseData { + pub _id: CustomId, + pub clientData: String, + pub keyHandle: String, + pub signatureData: String, +} + +impl Entity for U2fResponseData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "U2fResponseData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UpdatePermissionKeyData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub ownerEncSessionKey: Vec, + pub ownerKeyVersion: i64, + pub bucketPermission: IdTuple, + pub permission: IdTuple, +} + +impl Entity for UpdatePermissionKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UpdatePermissionKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UpdateSessionKeysPostIn { + pub _format: i64, + pub ownerEncSessionKeys: Vec, +} + +impl Entity for UpdateSessionKeysPostIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UpdateSessionKeysPostIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UpgradePriceServiceData { + pub _format: i64, + pub campaign: Option, + pub date: Option, + pub referralCode: Option, +} + +impl Entity for UpgradePriceServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UpgradePriceServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UpgradePriceServiceReturn { + pub _format: i64, + pub bonusMonthsForYearlyPlan: i64, + pub business: bool, + pub messageTextId: Option, + pub advancedPrices: PlanPrices, + pub essentialPrices: PlanPrices, + pub freePrices: PlanPrices, + pub legendaryPrices: PlanPrices, + pub plans: Vec, + pub premiumBusinessPrices: PlanPrices, + pub premiumPrices: PlanPrices, + pub proPrices: PlanPrices, + pub revolutionaryPrices: PlanPrices, + pub teamsBusinessPrices: PlanPrices, + pub teamsPrices: PlanPrices, + pub unlimitedPrices: PlanPrices, +} + +impl Entity for UpgradePriceServiceReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UpgradePriceServiceReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct User { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub accountType: i64, + pub enabled: bool, + pub kdfVersion: i64, + pub requirePasswordUpdate: bool, + #[serde(with = "serde_bytes")] + pub salt: Option>, + #[serde(with = "serde_bytes")] + pub verifier: Vec, + pub alarmInfoList: Option, + pub auth: Option, + pub authenticatedDevices: Vec, + pub customer: Option, + pub externalAuthInfo: Option, + pub failedLogins: GeneratedId, + pub memberships: Vec, + pub pushIdentifierList: Option, + pub secondFactorAuthentications: GeneratedId, + pub successfulLogins: GeneratedId, + pub userGroup: GroupMembership, +} + +impl Entity for User { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "User", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAlarmInfo { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub alarmInfo: AlarmInfo, +} + +impl Entity for UserAlarmInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserAlarmInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAlarmInfoListType { + pub _id: CustomId, + pub alarms: GeneratedId, +} + +impl Entity for UserAlarmInfoListType { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserAlarmInfoListType", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAreaGroups { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for UserAreaGroups { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserAreaGroups", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAuthentication { + pub _id: CustomId, + pub recoverCode: Option, + pub secondFactors: GeneratedId, + pub sessions: GeneratedId, +} + +impl Entity for UserAuthentication { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserAuthentication", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserDataDelete { + pub _format: i64, + pub date: Option, + pub restore: bool, + pub user: GeneratedId, +} + +impl Entity for UserDataDelete { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserDataDelete", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserExternalAuthInfo { + pub _id: CustomId, + pub authUpdateCounter: i64, + pub autoAuthenticationId: GeneratedId, + pub autoTransmitPassword: Option, + #[serde(with = "serde_bytes")] + pub latestSaltHash: Option>, + pub variableAuthInfo: GeneratedId, +} + +impl Entity for UserExternalAuthInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserExternalAuthInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserGroupKeyDistribution { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + #[serde(with = "serde_bytes")] + pub distributionEncUserGroupKey: Vec, + pub userGroupKeyVersion: i64, +} + +impl Entity for UserGroupKeyDistribution { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserGroupKeyDistribution", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserGroupKeyRotationData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub adminGroupEncUserGroupKey: Vec, + pub adminGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub authVerifier: Vec, + #[serde(with = "serde_bytes")] + pub distributionKeyEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub passphraseEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userGroupEncPreviousGroupKey: Vec, + pub userGroupKeyVersion: i64, + pub group: GeneratedId, + pub keyPair: KeyPair, + pub recoverCodeData: Option, +} + +impl Entity for UserGroupKeyRotationData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserGroupKeyRotationData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub groupKeyUpdates: Option, + pub invitations: GeneratedId, + pub keyRotations: Option, +} + +impl Entity for UserGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "UserGroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct VariableExternalAuthInfo { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub authUpdateCounter: i64, + pub lastSentTimestamp: DateTime, + #[serde(with = "serde_bytes")] + pub loggedInIpAddressHash: Option>, + pub loggedInTimestamp: Option, + #[serde(with = "serde_bytes")] + pub loggedInVerifier: Option>, + pub sentCount: i64, +} + +impl Entity for VariableExternalAuthInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "VariableExternalAuthInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct VerifyRegistrationCodeData { + pub _format: i64, + pub authToken: String, + pub code: String, +} + +impl Entity for VerifyRegistrationCodeData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "VerifyRegistrationCodeData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Version { + pub _id: CustomId, + pub operation: String, + pub timestamp: DateTime, + pub version: GeneratedId, + pub author: GeneratedId, + pub authorGroupInfo: IdTuple, +} + +impl Entity for Version { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "Version", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct VersionData { + pub _format: i64, + pub application: String, + pub id: GeneratedId, + pub listId: Option, + pub typeId: i64, +} + +impl Entity for VersionData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "VersionData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct VersionInfo { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub app: String, + pub operation: String, + pub referenceList: Option, + pub timestamp: DateTime, + #[serde(rename = "type")] + pub r#type: i64, + #[serde(with = "serde_bytes")] + pub versionData: Option>, + pub author: GeneratedId, + pub authorGroupInfo: IdTuple, +} + +impl Entity for VersionInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "VersionInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct VersionReturn { + pub _format: i64, + pub versions: Vec, +} + +impl Entity for VersionReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "VersionReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WebauthnResponseData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub authenticatorData: Vec, + #[serde(with = "serde_bytes")] + pub clientData: Vec, + #[serde(with = "serde_bytes")] + pub keyHandle: Vec, + #[serde(with = "serde_bytes")] + pub signature: Vec, +} + +impl Entity for WebauthnResponseData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WebauthnResponseData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WebsocketCounterData { + pub _format: i64, + pub mailGroup: GeneratedId, + pub counterValues: Vec, +} + +impl Entity for WebsocketCounterData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WebsocketCounterData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WebsocketCounterValue { + pub _id: CustomId, + pub count: i64, + pub counterId: GeneratedId, +} + +impl Entity for WebsocketCounterValue { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WebsocketCounterValue", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WebsocketEntityData { + pub _format: i64, + pub eventBatchId: GeneratedId, + pub eventBatchOwner: GeneratedId, + pub eventBatch: Vec, +} + +impl Entity for WebsocketEntityData { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WebsocketEntityData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WebsocketLeaderStatus { + pub _format: i64, + pub leaderStatus: bool, +} + +impl Entity for WebsocketLeaderStatus { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WebsocketLeaderStatus", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WhitelabelChild { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub comment: String, + pub createdDate: DateTime, + pub deletedDate: Option, + pub mailAddress: String, + pub customer: GeneratedId, +} + +impl Entity for WhitelabelChild { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WhitelabelChild", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WhitelabelChildrenRef { + pub _id: CustomId, + pub items: GeneratedId, +} + +impl Entity for WhitelabelChildrenRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WhitelabelChildrenRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WhitelabelConfig { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub germanLanguageCode: Option, + pub imprintUrl: Option, + pub jsonTheme: String, + pub metaTags: String, + pub privacyStatementUrl: Option, + pub whitelabelCode: String, + pub bootstrapCustomizations: Vec, + pub certificateInfo: Option, + pub whitelabelRegistrationDomains: Vec, +} + +impl Entity for WhitelabelConfig { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WhitelabelConfig", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct WhitelabelParent { + pub _id: CustomId, + pub customer: GeneratedId, + pub whitelabelChildInParent: IdTuple, +} + +impl Entity for WhitelabelParent { + fn type_ref() -> TypeRef { + TypeRef { + app: "sys", + type_: "WhitelabelParent", + } + } +} diff --git a/tuta-sdk/rust/src/entities/tutanota.rs b/tuta-sdk/rust/src/entities/tutanota.rs new file mode 100644 index 000000000000..e8286d8b39fd --- /dev/null +++ b/tuta-sdk/rust/src/entities/tutanota.rs @@ -0,0 +1,2398 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct AttachmentKeyData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub bucketEncFileSessionKey: Option>, + #[serde(with = "serde_bytes")] + pub fileSessionKey: Option>, + pub file: IdTuple, +} + +impl Entity for AttachmentKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "AttachmentKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Birthday { + pub _id: CustomId, + pub day: i64, + pub month: i64, + pub year: Option, +} + +impl Entity for Birthday { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Birthday", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Body { + pub _id: CustomId, + pub compressedText: Option>, + pub text: Option, +} + +impl Entity for Body { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Body", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarDeleteData { + pub _format: i64, + pub groupRootId: GeneratedId, +} + +impl Entity for CalendarDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEvent { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub description: String, + pub endTime: DateTime, + #[serde(with = "serde_bytes")] + pub hashedUid: Option>, + pub invitedConfidentially: Option, + pub location: String, + pub recurrenceId: Option, + pub sequence: i64, + pub startTime: DateTime, + pub summary: String, + pub uid: Option, + pub alarmInfos: Vec, + pub attendees: Vec, + pub organizer: Option, + pub repeatRule: Option, +} + +impl Entity for CalendarEvent { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEvent", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventAttendee { + pub _id: CustomId, + pub status: i64, + pub address: EncryptedMailAddress, +} + +impl Entity for CalendarEventAttendee { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEventAttendee", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventIndexRef { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for CalendarEventIndexRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEventIndexRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventUidIndex { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub alteredInstances: Vec, + pub progenitor: Option, +} + +impl Entity for CalendarEventUidIndex { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEventUidIndex", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventUpdate { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub sender: String, + pub file: IdTuple, +} + +impl Entity for CalendarEventUpdate { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEventUpdate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarEventUpdateList { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for CalendarEventUpdateList { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarEventUpdateList", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub index: Option, + pub longEvents: GeneratedId, + pub shortEvents: GeneratedId, +} + +impl Entity for CalendarGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarGroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CalendarRepeatRule { + pub _id: CustomId, + pub endType: i64, + pub endValue: Option, + pub frequency: i64, + pub interval: i64, + pub timeZone: String, + pub excludedDates: Vec, +} + +impl Entity for CalendarRepeatRule { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CalendarRepeatRule", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Contact { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub birthdayIso: Option, + pub comment: String, + pub company: String, + pub department: Option, + pub firstName: String, + pub lastName: String, + pub middleName: Option, + pub nameSuffix: Option, + pub nickname: Option, + pub oldBirthdayDate: Option, + pub phoneticFirst: Option, + pub phoneticLast: Option, + pub phoneticMiddle: Option, + pub presharedPassword: Option, + pub role: String, + pub title: Option, + pub addresses: Vec, + pub customDate: Vec, + pub mailAddresses: Vec, + pub messengerHandles: Vec, + pub oldBirthdayAggregate: Option, + pub phoneNumbers: Vec, + pub photo: Option, + pub pronouns: Vec, + pub relationships: Vec, + pub socialIds: Vec, + pub websites: Vec, +} + +impl Entity for Contact { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Contact", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactAddress { + pub _id: CustomId, + pub address: String, + pub customTypeName: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactAddress { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactAddress", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactCustomDate { + pub _id: CustomId, + pub customTypeName: String, + pub dateIso: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactCustomDate { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactCustomDate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactList { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub contacts: GeneratedId, + pub photos: Option, +} + +impl Entity for ContactList { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactList", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactListEntry { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub emailAddress: String, +} + +impl Entity for ContactListEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactListEntry", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactListGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub entries: GeneratedId, +} + +impl Entity for ContactListGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactListGroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactMailAddress { + pub _id: CustomId, + pub address: String, + pub customTypeName: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactMailAddress { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactMailAddress", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactMessengerHandle { + pub _id: CustomId, + pub customTypeName: String, + pub handle: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactMessengerHandle { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactMessengerHandle", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactPhoneNumber { + pub _id: CustomId, + pub customTypeName: String, + pub number: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactPhoneNumber { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactPhoneNumber", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactPronouns { + pub _id: CustomId, + pub language: String, + pub pronouns: String, +} + +impl Entity for ContactPronouns { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactPronouns", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactRelationship { + pub _id: CustomId, + pub customTypeName: String, + pub person: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactRelationship { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactRelationship", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactSocialId { + pub _id: CustomId, + pub customTypeName: String, + pub socialId: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for ContactSocialId { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactSocialId", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ContactWebsite { + pub _id: CustomId, + pub customTypeName: String, + #[serde(rename = "type")] + pub r#type: i64, + pub url: String, +} + +impl Entity for ContactWebsite { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ContactWebsite", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ConversationEntry { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub conversationType: i64, + pub messageId: String, + pub mail: Option, + pub previous: Option, +} + +impl Entity for ConversationEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ConversationEntry", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateExternalUserGroupData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub externalPwEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub internalUserEncUserGroupKey: Vec, + pub internalUserGroupKeyVersion: i64, + pub mailAddress: String, +} + +impl Entity for CreateExternalUserGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CreateExternalUserGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateGroupPostReturn { + pub _format: i64, + pub group: GeneratedId, +} + +impl Entity for CreateGroupPostReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CreateGroupPostReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateMailFolderData { + pub _format: i64, + pub folderName: String, + #[serde(with = "serde_bytes")] + pub ownerEncSessionKey: Vec, + pub ownerGroup: Option, + pub ownerKeyVersion: i64, + pub parentFolder: Option, +} + +impl Entity for CreateMailFolderData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CreateMailFolderData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateMailFolderReturn { + pub _format: i64, + pub newFolder: IdTuple, +} + +impl Entity for CreateMailFolderReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CreateMailFolderReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CreateMailGroupData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub encryptedName: Vec, + pub mailAddress: String, + #[serde(with = "serde_bytes")] + pub mailEncMailboxSessionKey: Vec, + pub groupData: InternalGroupData, +} + +impl Entity for CreateMailGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CreateMailGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct CustomerAccountCreateData { + pub _format: i64, + pub accountGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub adminEncAccountingInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub adminEncCustomerServerPropertiesSessionKey: Vec, + pub authToken: String, + pub code: String, + pub date: Option, + pub lang: String, + #[serde(with = "serde_bytes")] + pub systemAdminPubEncAccountingInfoSessionKey: Vec, + pub systemAdminPubKeyVersion: i64, + pub systemAdminPublicProtocolVersion: i64, + #[serde(with = "serde_bytes")] + pub userEncAccountGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncAdminGroupKey: Vec, + pub adminGroupData: InternalGroupData, + pub customerGroupData: InternalGroupData, + pub userData: UserAccountUserData, + pub userGroupData: InternalGroupData, +} + +impl Entity for CustomerAccountCreateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "CustomerAccountCreateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DeleteGroupData { + pub _format: i64, + pub restore: bool, + pub group: GeneratedId, +} + +impl Entity for DeleteGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DeleteGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DeleteMailData { + pub _format: i64, + pub folder: Option, + pub mails: Vec, +} + +impl Entity for DeleteMailData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DeleteMailData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DeleteMailFolderData { + pub _format: i64, + pub folders: Vec, +} + +impl Entity for DeleteMailFolderData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DeleteMailFolderData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftAttachment { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub ownerEncFileSessionKey: Vec, + pub ownerKeyVersion: i64, + pub existingFile: Option, + pub newFile: Option, +} + +impl Entity for DraftAttachment { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftAttachment", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftCreateData { + pub _format: i64, + pub conversationType: i64, + #[serde(with = "serde_bytes")] + pub ownerEncSessionKey: Vec, + pub ownerKeyVersion: i64, + pub previousMessageId: Option, + pub draftData: DraftData, +} + +impl Entity for DraftCreateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftCreateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftCreateReturn { + pub _format: i64, + pub draft: IdTuple, +} + +impl Entity for DraftCreateReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftCreateReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftData { + pub _id: CustomId, + pub bodyText: String, + pub compressedBodyText: Option>, + pub confidential: bool, + pub method: i64, + pub senderMailAddress: String, + pub senderName: String, + pub subject: String, + pub addedAttachments: Vec, + pub bccRecipients: Vec, + pub ccRecipients: Vec, + pub removedAttachments: Vec, + pub replyTos: Vec, + pub toRecipients: Vec, +} + +impl Entity for DraftData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftRecipient { + pub _id: CustomId, + pub mailAddress: String, + pub name: String, +} + +impl Entity for DraftRecipient { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftRecipient", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftUpdateData { + pub _format: i64, + pub draft: IdTuple, + pub draftData: DraftData, +} + +impl Entity for DraftUpdateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftUpdateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct DraftUpdateReturn { + pub _format: i64, + pub attachments: Vec, +} + +impl Entity for DraftUpdateReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "DraftUpdateReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EmailTemplate { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub tag: String, + pub title: String, + pub contents: Vec, +} + +impl Entity for EmailTemplate { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "EmailTemplate", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EmailTemplateContent { + pub _id: CustomId, + pub languageCode: String, + pub text: String, +} + +impl Entity for EmailTemplateContent { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "EmailTemplateContent", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EncryptTutanotaPropertiesData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub symEncSessionKey: Vec, + pub symKeyVersion: i64, + pub properties: GeneratedId, +} + +impl Entity for EncryptTutanotaPropertiesData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "EncryptTutanotaPropertiesData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EncryptedMailAddress { + pub _id: CustomId, + pub address: String, + pub name: String, +} + +impl Entity for EncryptedMailAddress { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "EncryptedMailAddress", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct EntropyData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub userEncEntropy: Vec, + pub userKeyVersion: i64, +} + +impl Entity for EntropyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "EntropyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ExternalUserData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub externalMailEncMailBoxSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub externalMailEncMailGroupInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub externalUserEncEntropy: Vec, + #[serde(with = "serde_bytes")] + pub externalUserEncMailGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub externalUserEncTutanotaPropertiesSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub externalUserEncUserGroupInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub internalMailEncMailGroupInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub internalMailEncUserGroupInfoSessionKey: Vec, + pub internalMailGroupKeyVersion: i64, + pub kdfVersion: i64, + #[serde(with = "serde_bytes")] + pub verifier: Vec, + pub userGroupData: CreateExternalUserGroupData, +} + +impl Entity for ExternalUserData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ExternalUserData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TutanotaFile { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub cid: Option, + pub mimeType: Option, + pub name: String, + pub size: i64, + pub blobs: Vec, + pub parent: Option, + pub subFiles: Option, +} + +impl Entity for TutanotaFile { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "TutanotaFile", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct FileSystem { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub files: GeneratedId, +} + +impl Entity for FileSystem { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "FileSystem", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupInvitationDeleteData { + pub _format: i64, + pub receivedInvitation: IdTuple, +} + +impl Entity for GroupInvitationDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "GroupInvitationDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupInvitationPostData { + pub _format: i64, + pub internalKeyData: Vec, + pub sharedGroupData: SharedGroupData, +} + +impl Entity for GroupInvitationPostData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "GroupInvitationPostData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupInvitationPostReturn { + pub _format: i64, + pub existingMailAddresses: Vec, + pub invalidMailAddresses: Vec, + pub invitedMailAddresses: Vec, +} + +impl Entity for GroupInvitationPostReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "GroupInvitationPostReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupInvitationPutData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub sharedGroupEncInviteeGroupInfoKey: Vec, + pub sharedGroupKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub userGroupEncGroupKey: Vec, + pub userGroupKeyVersion: i64, + pub receivedInvitation: IdTuple, +} + +impl Entity for GroupInvitationPutData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "GroupInvitationPutData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct GroupSettings { + pub _id: CustomId, + pub color: String, + pub name: Option, + pub group: GeneratedId, +} + +impl Entity for GroupSettings { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "GroupSettings", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Header { + pub _id: CustomId, + pub compressedHeaders: Option>, + pub headers: Option, +} + +impl Entity for Header { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Header", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ImapFolder { + pub _id: CustomId, + pub lastseenuid: String, + pub name: String, + pub uidvalidity: String, + pub syncInfo: GeneratedId, +} + +impl Entity for ImapFolder { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ImapFolder", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ImapSyncConfiguration { + pub _id: CustomId, + pub host: String, + pub password: String, + pub port: i64, + pub user: String, + pub imapSyncState: Option, +} + +impl Entity for ImapSyncConfiguration { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ImapSyncConfiguration", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ImapSyncState { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub folders: Vec, +} + +impl Entity for ImapSyncState { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ImapSyncState", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InboxRule { + pub _id: CustomId, + #[serde(rename = "type")] + pub r#type: String, + pub value: String, + pub targetFolder: IdTuple, +} + +impl Entity for InboxRule { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "InboxRule", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InternalGroupData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub adminEncGroupKey: Vec, + pub adminKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub groupEncPrivEccKey: Option>, + #[serde(with = "serde_bytes")] + pub groupEncPrivKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub groupEncPrivRsaKey: Option>, + #[serde(with = "serde_bytes")] + pub ownerEncGroupInfoSessionKey: Vec, + pub ownerKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub pubEccKey: Option>, + #[serde(with = "serde_bytes")] + pub pubKyberKey: Option>, + #[serde(with = "serde_bytes")] + pub pubRsaKey: Option>, + pub adminGroup: Option, +} + +impl Entity for InternalGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "InternalGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct InternalRecipientKeyData { + pub _id: CustomId, + pub mailAddress: String, + pub protocolVersion: i64, + #[serde(with = "serde_bytes")] + pub pubEncBucketKey: Vec, + pub recipientKeyVersion: i64, + pub senderKeyVersion: Option, +} + +impl Entity for InternalRecipientKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "InternalRecipientKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct KnowledgeBaseEntry { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub description: String, + pub title: String, + pub keywords: Vec, +} + +impl Entity for KnowledgeBaseEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "KnowledgeBaseEntry", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct KnowledgeBaseEntryKeyword { + pub _id: CustomId, + pub keyword: String, +} + +impl Entity for KnowledgeBaseEntryKeyword { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "KnowledgeBaseEntryKeyword", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ListUnsubscribeData { + pub _format: i64, + pub headers: String, + pub recipient: String, + pub mail: IdTuple, +} + +impl Entity for ListUnsubscribeData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ListUnsubscribeData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Mail { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub authStatus: Option, + pub confidential: bool, + pub differentEnvelopeSender: Option, + pub encryptionAuthStatus: Option, + pub listUnsubscribe: bool, + pub method: i64, + pub movedTime: Option, + pub phishingStatus: i64, + pub receivedDate: DateTime, + pub recipientCount: i64, + pub replyType: i64, + pub state: i64, + pub subject: String, + pub unread: bool, + pub attachments: Vec, + pub bucketKey: Option, + pub conversationEntry: IdTuple, + pub firstRecipient: Option, + pub mailDetails: Option, + pub mailDetailsDraft: Option, + pub sender: MailAddress, + pub sets: Vec, +} + +impl Entity for Mail { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Mail", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddress { + pub _id: CustomId, + pub address: String, + pub name: String, + pub contact: Option, +} + +impl Entity for MailAddress { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailAddress", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailAddressProperties { + pub _id: CustomId, + pub mailAddress: String, + pub senderName: String, +} + +impl Entity for MailAddressProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailAddressProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailBag { + pub _id: CustomId, + pub mails: GeneratedId, +} + +impl Entity for MailBag { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailBag", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailBox { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub lastInfoDate: DateTime, + pub archivedMailBags: Vec, + pub currentMailBag: Option, + pub folders: Option, + pub mailDetailsDrafts: Option, + pub receivedAttachments: GeneratedId, + pub sentAttachments: GeneratedId, + pub spamResults: Option, +} + +impl Entity for MailBox { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailBox", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailDetails { + pub _id: CustomId, + pub authStatus: i64, + pub sentDate: DateTime, + pub body: Body, + pub headers: Option
, + pub recipients: Recipients, + pub replyTos: Vec, +} + +impl Entity for MailDetails { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailDetails", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailDetailsBlob { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub details: MailDetails, +} + +impl Entity for MailDetailsBlob { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailDetailsBlob", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailDetailsDraft { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub details: MailDetails, +} + +impl Entity for MailDetailsDraft { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailDetailsDraft", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailDetailsDraftsRef { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for MailDetailsDraftsRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailDetailsDraftsRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailFolder { + pub _format: i64, + pub _id: IdTuple, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub folderType: i64, + pub isLabel: bool, + pub isMailSet: bool, + pub name: String, + pub entries: GeneratedId, + pub mails: GeneratedId, + pub parentFolder: Option, +} + +impl Entity for MailFolder { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailFolder", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailFolderRef { + pub _id: CustomId, + pub folders: GeneratedId, +} + +impl Entity for MailFolderRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailFolderRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailSetEntry { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub mail: IdTuple, +} + +impl Entity for MailSetEntry { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailSetEntry", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailboxGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub calendarEventUpdates: Option, + pub mailbox: GeneratedId, + pub mailboxProperties: Option, + pub outOfOfficeNotification: Option, + pub outOfOfficeNotificationRecipientList: Option, + pub serverProperties: GeneratedId, + pub whitelistRequests: GeneratedId, +} + +impl Entity for MailboxGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailboxGroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailboxProperties { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub reportMovedMails: i64, + pub mailAddressProperties: Vec, +} + +impl Entity for MailboxProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailboxProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MailboxServerProperties { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub whitelistProtectionEnabled: bool, +} + +impl Entity for MailboxServerProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MailboxServerProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct MoveMailData { + pub _format: i64, + pub mails: Vec, + pub sourceFolder: Option, + pub targetFolder: IdTuple, +} + +impl Entity for MoveMailData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "MoveMailData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NewDraftAttachment { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub encCid: Option>, + #[serde(with = "serde_bytes")] + pub encFileName: Vec, + #[serde(with = "serde_bytes")] + pub encMimeType: Vec, + pub referenceTokens: Vec, +} + +impl Entity for NewDraftAttachment { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "NewDraftAttachment", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NewsId { + pub _id: CustomId, + pub newsItemId: GeneratedId, + pub newsItemName: String, +} + +impl Entity for NewsId { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "NewsId", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NewsIn { + pub _format: i64, + pub newsItemId: Option, +} + +impl Entity for NewsIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "NewsIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NewsOut { + pub _format: i64, + pub newsItemIds: Vec, +} + +impl Entity for NewsOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "NewsOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct NotificationMail { + pub _id: CustomId, + pub bodyText: String, + pub mailboxLink: String, + pub recipientMailAddress: String, + pub recipientName: String, + pub subject: String, +} + +impl Entity for NotificationMail { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "NotificationMail", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct OutOfOfficeNotification { + pub _format: i64, + pub _id: GeneratedId, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub enabled: bool, + pub endDate: Option, + pub startDate: Option, + pub notifications: Vec, +} + +impl Entity for OutOfOfficeNotification { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "OutOfOfficeNotification", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct OutOfOfficeNotificationMessage { + pub _id: CustomId, + pub message: String, + pub subject: String, + #[serde(rename = "type")] + pub r#type: i64, +} + +impl Entity for OutOfOfficeNotificationMessage { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "OutOfOfficeNotificationMessage", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct OutOfOfficeNotificationRecipientList { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for OutOfOfficeNotificationRecipientList { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "OutOfOfficeNotificationRecipientList", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PhishingMarkerWebsocketData { + pub _format: i64, + pub lastId: GeneratedId, + pub markers: Vec, +} + +impl Entity for PhishingMarkerWebsocketData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "PhishingMarkerWebsocketData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct PhotosRef { + pub _id: CustomId, + pub files: GeneratedId, +} + +impl Entity for PhotosRef { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "PhotosRef", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReceiveInfoServiceData { + pub _format: i64, + pub language: String, +} + +impl Entity for ReceiveInfoServiceData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ReceiveInfoServiceData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Recipients { + pub _id: CustomId, + pub bccRecipients: Vec, + pub ccRecipients: Vec, + pub toRecipients: Vec, +} + +impl Entity for Recipients { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Recipients", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct RemoteImapSyncInfo { + pub _format: i64, + pub _id: IdTuple, + pub _ownerGroup: Option, + pub _permissions: GeneratedId, + pub seen: bool, + pub message: IdTuple, +} + +impl Entity for RemoteImapSyncInfo { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "RemoteImapSyncInfo", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReportMailPostData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub mailSessionKey: Vec, + pub reportType: i64, + pub mailId: IdTuple, +} + +impl Entity for ReportMailPostData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ReportMailPostData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct ReportedMailFieldMarker { + pub _id: CustomId, + pub marker: String, + pub status: i64, +} + +impl Entity for ReportedMailFieldMarker { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "ReportedMailFieldMarker", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SecureExternalRecipientKeyData { + pub _id: CustomId, + pub kdfVersion: i64, + pub mailAddress: String, + #[serde(with = "serde_bytes")] + pub ownerEncBucketKey: Vec, + pub ownerKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub passwordVerifier: Vec, + #[serde(with = "serde_bytes")] + pub pwEncCommunicationKey: Option>, + #[serde(with = "serde_bytes")] + pub salt: Option>, + #[serde(with = "serde_bytes")] + pub saltHash: Option>, + pub userGroupKeyVersion: i64, +} + +impl Entity for SecureExternalRecipientKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SecureExternalRecipientKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SendDraftData { + pub _format: i64, + #[serde(with = "serde_bytes")] + pub bucketEncMailSessionKey: Option>, + pub calendarMethod: bool, + pub language: String, + #[serde(with = "serde_bytes")] + pub mailSessionKey: Option>, + pub plaintext: bool, + pub senderNameUnencrypted: Option, + #[serde(with = "serde_bytes")] + pub sessionEncEncryptionAuthStatus: Option>, + pub attachmentKeyData: Vec, + pub internalRecipientKeyData: Vec, + pub mail: IdTuple, + pub secureExternalRecipientKeyData: Vec, + pub symEncInternalRecipientKeyData: Vec, +} + +impl Entity for SendDraftData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SendDraftData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SendDraftReturn { + pub _format: i64, + pub messageId: String, + pub sentDate: DateTime, + pub notifications: Vec, + pub sentMail: IdTuple, +} + +impl Entity for SendDraftReturn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SendDraftReturn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SharedGroupData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub bucketEncInvitationSessionKey: Vec, + pub capability: i64, + #[serde(with = "serde_bytes")] + pub sessionEncInviterName: Vec, + #[serde(with = "serde_bytes")] + pub sessionEncSharedGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub sessionEncSharedGroupName: Vec, + pub sharedGroup: GeneratedId, + #[serde(with = "serde_bytes")] + pub sharedGroupEncInviterGroupInfoKey: Vec, + #[serde(with = "serde_bytes")] + pub sharedGroupEncSharedGroupInfoKey: Vec, + pub sharedGroupKeyVersion: i64, +} + +impl Entity for SharedGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SharedGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SpamResults { + pub _id: CustomId, + pub list: GeneratedId, +} + +impl Entity for SpamResults { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SpamResults", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct Subfiles { + pub _id: CustomId, + pub files: GeneratedId, +} + +impl Entity for Subfiles { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "Subfiles", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct SymEncInternalRecipientKeyData { + pub _id: CustomId, + pub mailAddress: String, + #[serde(with = "serde_bytes")] + pub symEncBucketKey: Vec, + pub symKeyVersion: i64, + pub keyGroup: GeneratedId, +} + +impl Entity for SymEncInternalRecipientKeyData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "SymEncInternalRecipientKeyData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TemplateGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub knowledgeBase: GeneratedId, + pub templates: GeneratedId, +} + +impl Entity for TemplateGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "TemplateGroupRoot", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TranslationGetIn { + pub _format: i64, + pub lang: String, +} + +impl Entity for TranslationGetIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "TranslationGetIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TranslationGetOut { + pub _format: i64, + pub giftCardSubject: String, + pub invitationSubject: String, +} + +impl Entity for TranslationGetOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "TranslationGetOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct TutanotaProperties { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub customEmailSignature: String, + pub defaultSender: Option, + pub defaultUnconfidential: bool, + pub emailSignatureType: i64, + pub lastSeenAnnouncement: i64, + pub noAutomaticContacts: bool, + pub notificationMailLanguage: Option, + pub sendPlaintextOnly: bool, + #[serde(with = "serde_bytes")] + pub userEncEntropy: Option>, + pub userKeyVersion: Option, + pub imapSyncConfig: Vec, + pub inboxRules: Vec, + pub lastPushedMail: Option, +} + +impl Entity for TutanotaProperties { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "TutanotaProperties", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UpdateMailFolderData { + pub _format: i64, + pub folder: IdTuple, + pub newParent: Option, +} + +impl Entity for UpdateMailFolderData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UpdateMailFolderData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAccountCreateData { + pub _format: i64, + pub date: Option, + pub userData: UserAccountUserData, + pub userGroupData: InternalGroupData, +} + +impl Entity for UserAccountCreateData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserAccountCreateData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAccountUserData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub contactEncContactListSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub customerEncContactGroupInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub customerEncFileGroupInfoSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub customerEncMailGroupInfoSessionKey: Vec, + pub customerKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub encryptedName: Vec, + #[serde(with = "serde_bytes")] + pub fileEncFileSystemSessionKey: Vec, + pub kdfVersion: i64, + pub mailAddress: String, + #[serde(with = "serde_bytes")] + pub mailEncMailBoxSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub pwEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub recoverCodeEncUserGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub recoverCodeVerifier: Vec, + #[serde(with = "serde_bytes")] + pub salt: Vec, + #[serde(with = "serde_bytes")] + pub userEncContactGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncCustomerGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncEntropy: Vec, + #[serde(with = "serde_bytes")] + pub userEncFileGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncMailGroupKey: Vec, + #[serde(with = "serde_bytes")] + pub userEncRecoverCode: Vec, + #[serde(with = "serde_bytes")] + pub userEncTutanotaPropertiesSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub verifier: Vec, +} + +impl Entity for UserAccountUserData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserAccountUserData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAreaGroupData { + pub _id: CustomId, + #[serde(with = "serde_bytes")] + pub adminEncGroupKey: Option>, + pub adminKeyVersion: Option, + #[serde(with = "serde_bytes")] + pub customerEncGroupInfoSessionKey: Vec, + pub customerKeyVersion: i64, + #[serde(with = "serde_bytes")] + pub groupEncGroupRootSessionKey: Vec, + #[serde(with = "serde_bytes")] + pub groupInfoEncName: Vec, + #[serde(with = "serde_bytes")] + pub userEncGroupKey: Vec, + pub userKeyVersion: i64, + pub adminGroup: Option, +} + +impl Entity for UserAreaGroupData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserAreaGroupData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAreaGroupDeleteData { + pub _format: i64, + pub group: GeneratedId, +} + +impl Entity for UserAreaGroupDeleteData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserAreaGroupDeleteData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserAreaGroupPostData { + pub _format: i64, + pub groupData: UserAreaGroupData, +} + +impl Entity for UserAreaGroupPostData { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserAreaGroupPostData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UserSettingsGroupRoot { + pub _format: i64, + pub _id: GeneratedId, + #[serde(with = "serde_bytes")] + pub _ownerEncSessionKey: Option>, + pub _ownerGroup: Option, + pub _ownerKeyVersion: Option, + pub _permissions: GeneratedId, + pub startOfTheWeek: i64, + pub timeFormat: i64, + pub usageDataOptedIn: Option, + pub groupSettings: Vec, +} + +impl Entity for UserSettingsGroupRoot { + fn type_ref() -> TypeRef { + TypeRef { + app: "tutanota", + type_: "UserSettingsGroupRoot", + } + } +} diff --git a/tuta-sdk/rust/src/entities/usage.rs b/tuta-sdk/rust/src/entities/usage.rs new file mode 100644 index 000000000000..68f291f86c63 --- /dev/null +++ b/tuta-sdk/rust/src/entities/usage.rs @@ -0,0 +1,146 @@ +#![allow(non_snake_case, unused_imports)] +use super::*; +use serde::{Serialize, Deserialize}; + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestAssignment { + pub _id: CustomId, + pub name: String, + pub sendPings: bool, + pub testId: GeneratedId, + pub variant: Option, + pub stages: Vec, +} + +impl Entity for UsageTestAssignment { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestAssignment", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestAssignmentIn { + pub _format: i64, + pub testDeviceId: Option, +} + +impl Entity for UsageTestAssignmentIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestAssignmentIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestAssignmentOut { + pub _format: i64, + pub testDeviceId: GeneratedId, + pub assignments: Vec, +} + +impl Entity for UsageTestAssignmentOut { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestAssignmentOut", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestMetricConfig { + pub _id: CustomId, + pub name: String, + #[serde(rename = "type")] + pub r#type: i64, + pub configValues: Vec, +} + +impl Entity for UsageTestMetricConfig { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestMetricConfig", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestMetricConfigValue { + pub _id: CustomId, + pub key: String, + pub value: String, +} + +impl Entity for UsageTestMetricConfigValue { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestMetricConfigValue", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestMetricData { + pub _id: CustomId, + pub name: String, + pub value: String, +} + +impl Entity for UsageTestMetricData { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestMetricData", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestParticipationIn { + pub _format: i64, + pub stage: i64, + pub testDeviceId: GeneratedId, + pub testId: GeneratedId, + pub metrics: Vec, +} + +impl Entity for UsageTestParticipationIn { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestParticipationIn", + } + } +} + + +#[derive(uniffi::Record, Clone, Serialize, Deserialize)] +pub struct UsageTestStage { + pub _id: CustomId, + pub maxPings: i64, + pub minPings: i64, + pub name: String, + pub metrics: Vec, +} + +impl Entity for UsageTestStage { + fn type_ref() -> TypeRef { + TypeRef { + app: "usage", + type_: "UsageTestStage", + } + } +} diff --git a/tuta-sdk/rust/src/type_models/accounting.json b/tuta-sdk/rust/src/type_models/accounting.json new file mode 100644 index 000000000000..2e108af3253a --- /dev/null +++ b/tuta-sdk/rust/src/type_models/accounting.json @@ -0,0 +1,140 @@ +{ + "CustomerAccountPosting": { + "name": "CustomerAccountPosting", + "since": 3, + "type": "AGGREGATED_TYPE", + "id": 79, + "rootId": "CmFjY291bnRpbmcATw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 80, + "since": 3, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "amount": { + "final": true, + "name": "amount", + "id": 84, + "since": 3, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "invoiceNumber": { + "final": true, + "name": "invoiceNumber", + "id": 83, + "since": 3, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "type": { + "final": true, + "name": "type", + "id": 81, + "since": 3, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "valueDate": { + "final": true, + "name": "valueDate", + "id": 82, + "since": 3, + "type": "Date", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "accounting", + "version": "7" + }, + "CustomerAccountReturn": { + "name": "CustomerAccountReturn", + "since": 3, + "type": "DATA_TRANSFER_TYPE", + "id": 86, + "rootId": "CmFjY291bnRpbmcAVg", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 87, + "since": 3, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 88, + "since": 3, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerPublicEncSessionKey": { + "final": true, + "name": "_ownerPublicEncSessionKey", + "id": 89, + "since": 3, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_publicCryptoProtocolVersion": { + "final": true, + "name": "_publicCryptoProtocolVersion", + "id": 96, + "since": 7, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "balance": { + "final": true, + "name": "balance", + "id": 94, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "outstandingBookingsPrice": { + "final": false, + "name": "outstandingBookingsPrice", + "id": 92, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "postings": { + "final": false, + "name": "postings", + "id": 90, + "since": 3, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "CustomerAccountPosting", + "dependency": null + } + }, + "app": "accounting", + "version": "7" + } +} diff --git a/tuta-sdk/rust/src/type_models/base.json b/tuta-sdk/rust/src/type_models/base.json new file mode 100644 index 000000000000..7d27712fff45 --- /dev/null +++ b/tuta-sdk/rust/src/type_models/base.json @@ -0,0 +1,43 @@ +{ + "PersistenceResourcePostReturn": { + "name": "PersistenceResourcePostReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 0, + "rootId": "BGJhc2UAAA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "generatedId": { + "final": false, + "name": "generatedId", + "id": 2, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "permissionListId": { + "final": false, + "name": "permissionListId", + "id": 3, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "base", + "version": "1" + } +} diff --git a/tuta-sdk/rust/src/type_models/gossip.json b/tuta-sdk/rust/src/type_models/gossip.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/tuta-sdk/rust/src/type_models/gossip.json @@ -0,0 +1 @@ +{} diff --git a/tuta-sdk/rust/src/type_models/monitor.json b/tuta-sdk/rust/src/type_models/monitor.json new file mode 100644 index 000000000000..01d320adac12 --- /dev/null +++ b/tuta-sdk/rust/src/type_models/monitor.json @@ -0,0 +1,472 @@ +{ + "ApprovalMail": { + "name": "ApprovalMail", + "since": 14, + "type": "LIST_ELEMENT_TYPE", + "id": 221, + "rootId": "B21vbml0b3IAAN0", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 225, + "since": 14, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 223, + "since": 14, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 226, + "since": 14, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 224, + "since": 14, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": true, + "name": "date", + "id": 228, + "since": 14, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "range": { + "final": true, + "name": "range", + "id": 227, + "since": 14, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "text": { + "final": true, + "name": "text", + "id": 229, + "since": 14, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": true, + "name": "customer", + "id": 230, + "since": 14, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + } + }, + "app": "monitor", + "version": "28" + }, + "CounterValue": { + "name": "CounterValue", + "since": 22, + "type": "AGGREGATED_TYPE", + "id": 300, + "rootId": "B21vbml0b3IAASw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 301, + "since": 22, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "counterId": { + "final": false, + "name": "counterId", + "id": 302, + "since": 22, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 303, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "monitor", + "version": "28" + }, + "ErrorReportData": { + "name": "ErrorReportData", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 316, + "rootId": "B21vbml0b3IAATw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 317, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "additionalInfo": { + "final": true, + "name": "additionalInfo", + "id": 326, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "appVersion": { + "final": true, + "name": "appVersion", + "id": 319, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "clientType": { + "final": true, + "name": "clientType", + "id": 320, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "errorClass": { + "final": true, + "name": "errorClass", + "id": 322, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "errorMessage": { + "final": true, + "name": "errorMessage", + "id": 323, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "stackTrace": { + "final": true, + "name": "stackTrace", + "id": 324, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "time": { + "final": true, + "name": "time", + "id": 318, + "since": 23, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "userId": { + "final": true, + "name": "userId", + "id": 321, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "userMessage": { + "final": true, + "name": "userMessage", + "id": 325, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "monitor", + "version": "28" + }, + "ErrorReportFile": { + "name": "ErrorReportFile", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 305, + "rootId": "B21vbml0b3IAATE", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 306, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "content": { + "final": true, + "name": "content", + "id": 308, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 307, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "monitor", + "version": "28" + }, + "ReadCounterData": { + "name": "ReadCounterData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 12, + "rootId": "B21vbml0b3IADA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 13, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "columnName": { + "final": false, + "name": "columnName", + "id": 15, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "counterType": { + "final": false, + "name": "counterType", + "id": 299, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "rowName": { + "final": false, + "name": "rowName", + "id": 14, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "monitor", + "version": "28" + }, + "ReadCounterReturn": { + "name": "ReadCounterReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 16, + "rootId": "B21vbml0b3IAEA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 17, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 18, + "since": 1, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "counterValues": { + "final": false, + "name": "counterValues", + "id": 304, + "since": 22, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "CounterValue", + "dependency": null + } + }, + "app": "monitor", + "version": "28" + }, + "ReportErrorIn": { + "name": "ReportErrorIn", + "since": 23, + "type": "DATA_TRANSFER_TYPE", + "id": 335, + "rootId": "B21vbml0b3IAAU8", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 336, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "data": { + "final": false, + "name": "data", + "id": 337, + "since": 23, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "ErrorReportData", + "dependency": null + }, + "files": { + "final": false, + "name": "files", + "id": 338, + "since": 23, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ErrorReportFile", + "dependency": null + } + }, + "app": "monitor", + "version": "28" + }, + "WriteCounterData": { + "name": "WriteCounterData", + "since": 4, + "type": "DATA_TRANSFER_TYPE", + "id": 49, + "rootId": "B21vbml0b3IAMQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 50, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "column": { + "final": false, + "name": "column", + "id": 52, + "since": 4, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "counterType": { + "final": false, + "name": "counterType", + "id": 215, + "since": 12, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "row": { + "final": false, + "name": "row", + "id": 51, + "since": 4, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 53, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "monitor", + "version": "28" + } +} diff --git a/tuta-sdk/rust/src/type_models/storage.json b/tuta-sdk/rust/src/type_models/storage.json new file mode 100644 index 000000000000..2b821fd28527 --- /dev/null +++ b/tuta-sdk/rust/src/type_models/storage.json @@ -0,0 +1,588 @@ +{ + "BlobAccessTokenPostIn": { + "name": "BlobAccessTokenPostIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 77, + "rootId": "B3N0b3JhZ2UATQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 78, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "archiveDataType": { + "final": false, + "name": "archiveDataType", + "id": 180, + "since": 4, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "read": { + "final": true, + "name": "read", + "id": 181, + "since": 4, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "BlobReadData", + "dependency": null + }, + "write": { + "final": false, + "name": "write", + "id": 80, + "since": 1, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "BlobWriteData", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobAccessTokenPostOut": { + "name": "BlobAccessTokenPostOut", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 81, + "rootId": "B3N0b3JhZ2UAUQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 82, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "blobAccessInfo": { + "final": false, + "name": "blobAccessInfo", + "id": 161, + "since": 4, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "BlobServerAccessInfo", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobArchiveRef": { + "name": "BlobArchiveRef", + "since": 4, + "type": "LIST_ELEMENT_TYPE", + "id": 129, + "rootId": "B3N0b3JhZ2UAAIE", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 133, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 131, + "since": 4, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 134, + "since": 4, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 132, + "since": 4, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "archive": { + "final": false, + "name": "archive", + "id": 135, + "since": 4, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Archive", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobGetIn": { + "name": "BlobGetIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 50, + "rootId": "B3N0b3JhZ2UAMg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 51, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "archiveId": { + "final": false, + "name": "archiveId", + "id": 52, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "blobId": { + "final": false, + "name": "blobId", + "id": 110, + "since": 3, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "blobIds": { + "final": true, + "name": "blobIds", + "id": 193, + "since": 8, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BlobId", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobId": { + "name": "BlobId", + "since": 4, + "type": "AGGREGATED_TYPE", + "id": 144, + "rootId": "B3N0b3JhZ2UAAJA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 145, + "since": 4, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "blobId": { + "final": false, + "name": "blobId", + "id": 146, + "since": 4, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "storage", + "version": "9" + }, + "BlobPostOut": { + "name": "BlobPostOut", + "since": 4, + "type": "DATA_TRANSFER_TYPE", + "id": 125, + "rootId": "B3N0b3JhZ2UAfQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 126, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "blobReferenceToken": { + "final": false, + "name": "blobReferenceToken", + "id": 127, + "since": 4, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "storage", + "version": "9" + }, + "BlobReadData": { + "name": "BlobReadData", + "since": 4, + "type": "AGGREGATED_TYPE", + "id": 175, + "rootId": "B3N0b3JhZ2UAAK8", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 176, + "since": 4, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "archiveId": { + "final": false, + "name": "archiveId", + "id": 177, + "since": 4, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "instanceListId": { + "final": true, + "name": "instanceListId", + "id": 178, + "since": 4, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "instanceIds": { + "final": true, + "name": "instanceIds", + "id": 179, + "since": 4, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InstanceId", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobReferenceDeleteIn": { + "name": "BlobReferenceDeleteIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 100, + "rootId": "B3N0b3JhZ2UAZA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 101, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "archiveDataType": { + "final": false, + "name": "archiveDataType", + "id": 124, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "instanceId": { + "final": false, + "name": "instanceId", + "id": 103, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "instanceListId": { + "final": false, + "name": "instanceListId", + "id": 102, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "blobs": { + "final": true, + "name": "blobs", + "id": 105, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Blob", + "dependency": "sys" + } + }, + "app": "storage", + "version": "9" + }, + "BlobReferencePutIn": { + "name": "BlobReferencePutIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 94, + "rootId": "B3N0b3JhZ2UAXg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 95, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "archiveDataType": { + "final": false, + "name": "archiveDataType", + "id": 123, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "instanceId": { + "final": false, + "name": "instanceId", + "id": 107, + "since": 2, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "instanceListId": { + "final": false, + "name": "instanceListId", + "id": 97, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "referenceTokens": { + "final": true, + "name": "referenceTokens", + "id": 122, + "since": 4, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BlobReferenceTokenWrapper", + "dependency": "sys" + } + }, + "app": "storage", + "version": "9" + }, + "BlobServerAccessInfo": { + "name": "BlobServerAccessInfo", + "since": 4, + "type": "AGGREGATED_TYPE", + "id": 157, + "rootId": "B3N0b3JhZ2UAAJ0", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 158, + "since": 4, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "blobAccessToken": { + "final": false, + "name": "blobAccessToken", + "id": 159, + "since": 4, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "expires": { + "final": false, + "name": "expires", + "id": 192, + "since": 6, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "servers": { + "final": false, + "name": "servers", + "id": 160, + "since": 4, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BlobServerUrl", + "dependency": null + } + }, + "app": "storage", + "version": "9" + }, + "BlobServerUrl": { + "name": "BlobServerUrl", + "since": 4, + "type": "AGGREGATED_TYPE", + "id": 154, + "rootId": "B3N0b3JhZ2UAAJo", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 155, + "since": 4, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "url": { + "final": false, + "name": "url", + "id": 156, + "since": 4, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "storage", + "version": "9" + }, + "BlobWriteData": { + "name": "BlobWriteData", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 73, + "rootId": "B3N0b3JhZ2UASQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 74, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "archiveOwnerGroup": { + "final": false, + "name": "archiveOwnerGroup", + "id": 75, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "storage", + "version": "9" + }, + "InstanceId": { + "name": "InstanceId", + "since": 4, + "type": "AGGREGATED_TYPE", + "id": 172, + "rootId": "B3N0b3JhZ2UAAKw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 173, + "since": 4, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "instanceId": { + "final": true, + "name": "instanceId", + "id": 174, + "since": 4, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "storage", + "version": "9" + } +} diff --git a/tuta-sdk/rust/src/type_models/sys.json b/tuta-sdk/rust/src/type_models/sys.json new file mode 100644 index 000000000000..feb48681e2ad --- /dev/null +++ b/tuta-sdk/rust/src/type_models/sys.json @@ -0,0 +1,14474 @@ +{ + "AccountingInfo": { + "name": "AccountingInfo", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 143, + "rootId": "A3N5cwAAjw", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 147, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 145, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_modified": { + "final": true, + "name": "_modified", + "id": 1499, + "since": 43, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1010, + "since": 17, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1009, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2223, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 146, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "invoiceAddress": { + "final": false, + "name": "invoiceAddress", + "id": 763, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "invoiceCountry": { + "final": false, + "name": "invoiceCountry", + "id": 764, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "invoiceName": { + "final": false, + "name": "invoiceName", + "id": 762, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "invoiceVatIdNo": { + "final": false, + "name": "invoiceVatIdNo", + "id": 766, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "lastInvoiceNbrOfSentSms": { + "final": true, + "name": "lastInvoiceNbrOfSentSms", + "id": 593, + "since": 2, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "lastInvoiceTimestamp": { + "final": true, + "name": "lastInvoiceTimestamp", + "id": 592, + "since": 2, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "paymentAccountIdentifier": { + "final": false, + "name": "paymentAccountIdentifier", + "id": 1060, + "since": 18, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "paymentInterval": { + "final": false, + "name": "paymentInterval", + "id": 769, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "paymentMethod": { + "final": false, + "name": "paymentMethod", + "id": 767, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "paymentMethodInfo": { + "final": false, + "name": "paymentMethodInfo", + "id": 768, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "paymentProviderCustomerId": { + "final": false, + "name": "paymentProviderCustomerId", + "id": 770, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "paypalBillingAgreement": { + "final": false, + "name": "paypalBillingAgreement", + "id": 1312, + "since": 30, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "secondCountryInfo": { + "final": false, + "name": "secondCountryInfo", + "id": 765, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "appStoreSubscription": { + "final": false, + "name": "appStoreSubscription", + "id": 2424, + "since": 103, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "AppStoreSubscription", + "dependency": null + }, + "invoiceInfo": { + "final": true, + "name": "invoiceInfo", + "id": 771, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "InvoiceInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AdminGroupKeyRotationPostIn": { + "name": "AdminGroupKeyRotationPostIn", + "since": 101, + "type": "DATA_TRANSFER_TYPE", + "id": 2364, + "rootId": "A3N5cwAJPA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2365, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "adminGroupKeyData": { + "final": false, + "name": "adminGroupKeyData", + "id": 2366, + "since": 101, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "GroupKeyRotationData", + "dependency": null + }, + "userGroupKeyData": { + "final": false, + "name": "userGroupKeyData", + "id": 2367, + "since": 101, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "UserGroupKeyRotationData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AdministratedGroupsRef": { + "name": "AdministratedGroupsRef", + "since": 27, + "type": "AGGREGATED_TYPE", + "id": 1303, + "rootId": "A3N5cwAFFw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1304, + "since": 27, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1305, + "since": 27, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "AdministratedGroup", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AlarmInfo": { + "name": "AlarmInfo", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1536, + "rootId": "A3N5cwAGAA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1537, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "alarmIdentifier": { + "final": true, + "name": "alarmIdentifier", + "id": 1539, + "since": 48, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "trigger": { + "final": true, + "name": "trigger", + "id": 1538, + "since": 48, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "calendarRef": { + "final": false, + "name": "calendarRef", + "id": 1540, + "since": 48, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "CalendarEventRef", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AlarmNotification": { + "name": "AlarmNotification", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1564, + "rootId": "A3N5cwAGHA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1565, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "eventEnd": { + "final": true, + "name": "eventEnd", + "id": 1569, + "since": 48, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "eventStart": { + "final": true, + "name": "eventStart", + "id": 1568, + "since": 48, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "operation": { + "final": true, + "name": "operation", + "id": 1566, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "summary": { + "final": true, + "name": "summary", + "id": 1567, + "since": 48, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "alarmInfo": { + "final": true, + "name": "alarmInfo", + "id": 1570, + "since": 48, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "AlarmInfo", + "dependency": null + }, + "notificationSessionKeys": { + "final": true, + "name": "notificationSessionKeys", + "id": 1572, + "since": 48, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "NotificationSessionKey", + "dependency": null + }, + "repeatRule": { + "final": true, + "name": "repeatRule", + "id": 1571, + "since": 48, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "RepeatRule", + "dependency": null + }, + "user": { + "final": true, + "name": "user", + "id": 1573, + "since": 48, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AlarmServicePost": { + "name": "AlarmServicePost", + "since": 48, + "type": "DATA_TRANSFER_TYPE", + "id": 1576, + "rootId": "A3N5cwAGKA", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1577, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "alarmNotifications": { + "final": false, + "name": "alarmNotifications", + "id": 1578, + "since": 48, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "AlarmNotification", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ArchiveRef": { + "name": "ArchiveRef", + "since": 69, + "type": "AGGREGATED_TYPE", + "id": 1873, + "rootId": "A3N5cwAHUQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1874, + "since": 69, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "archiveId": { + "final": true, + "name": "archiveId", + "id": 1875, + "since": 69, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ArchiveType": { + "name": "ArchiveType", + "since": 69, + "type": "AGGREGATED_TYPE", + "id": 1876, + "rootId": "A3N5cwAHVA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1877, + "since": 69, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "active": { + "final": false, + "name": "active", + "id": 1879, + "since": 69, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "ArchiveRef", + "dependency": null + }, + "inactive": { + "final": false, + "name": "inactive", + "id": 1880, + "since": 69, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ArchiveRef", + "dependency": null + }, + "type": { + "final": false, + "name": "type", + "id": 1878, + "since": 69, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "TypeInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AuditLogEntry": { + "name": "AuditLogEntry", + "since": 22, + "type": "LIST_ELEMENT_TYPE", + "id": 1101, + "rootId": "A3N5cwAETQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1105, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1103, + "since": 22, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1107, + "since": 22, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1106, + "since": 22, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2227, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1104, + "since": 22, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "action": { + "final": true, + "name": "action", + "id": 1110, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "actorIpAddress": { + "final": true, + "name": "actorIpAddress", + "id": 1109, + "since": 22, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "actorMailAddress": { + "final": true, + "name": "actorMailAddress", + "id": 1108, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "date": { + "final": true, + "name": "date", + "id": 1112, + "since": 22, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "modifiedEntity": { + "final": true, + "name": "modifiedEntity", + "id": 1111, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "groupInfo": { + "final": true, + "name": "groupInfo", + "id": 1113, + "since": 22, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "GroupInfo", + "dependency": null + }, + "modifiedGroupInfo": { + "final": true, + "name": "modifiedGroupInfo", + "id": 1307, + "since": 27, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AuditLogRef": { + "name": "AuditLogRef", + "since": 22, + "type": "AGGREGATED_TYPE", + "id": 1114, + "rootId": "A3N5cwAEWg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1115, + "since": 22, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1116, + "since": 22, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "AuditLogEntry", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AuthenticatedDevice": { + "name": "AuthenticatedDevice", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 43, + "rootId": "A3N5cwAr", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 44, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "authType": { + "final": true, + "name": "authType", + "id": 45, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "deviceKey": { + "final": true, + "name": "deviceKey", + "id": 47, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "deviceToken": { + "final": true, + "name": "deviceToken", + "id": 46, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Authentication": { + "name": "Authentication", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 453, + "rootId": "A3N5cwABxQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 454, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "accessToken": { + "final": true, + "name": "accessToken", + "id": 1239, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "authVerifier": { + "final": false, + "name": "authVerifier", + "id": 456, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "externalAuthToken": { + "final": false, + "name": "externalAuthToken", + "id": 968, + "since": 15, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "userId": { + "final": false, + "name": "userId", + "id": 455, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AutoLoginDataDelete": { + "name": "AutoLoginDataDelete", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 435, + "rootId": "A3N5cwABsw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 436, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "deviceToken": { + "final": false, + "name": "deviceToken", + "id": 437, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "AutoLoginDataGet": { + "name": "AutoLoginDataGet", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 431, + "rootId": "A3N5cwABrw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 432, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "deviceToken": { + "final": false, + "name": "deviceToken", + "id": 434, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "userId": { + "final": false, + "name": "userId", + "id": 433, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "AutoLoginDataReturn": { + "name": "AutoLoginDataReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 438, + "rootId": "A3N5cwABtg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 439, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "deviceKey": { + "final": false, + "name": "deviceKey", + "id": 440, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "AutoLoginPostReturn": { + "name": "AutoLoginPostReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 441, + "rootId": "A3N5cwABuQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 442, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "deviceToken": { + "final": false, + "name": "deviceToken", + "id": 443, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Blob": { + "name": "Blob", + "since": 69, + "type": "AGGREGATED_TYPE", + "id": 1882, + "rootId": "A3N5cwAHWg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1883, + "since": 69, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "archiveId": { + "final": false, + "name": "archiveId", + "id": 1884, + "since": 69, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "blobId": { + "final": false, + "name": "blobId", + "id": 1906, + "since": 72, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "size": { + "final": false, + "name": "size", + "id": 1898, + "since": 70, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "BlobReferenceTokenWrapper": { + "name": "BlobReferenceTokenWrapper", + "since": 74, + "type": "AGGREGATED_TYPE", + "id": 1990, + "rootId": "A3N5cwAHxg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1991, + "since": 74, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "blobReferenceToken": { + "final": true, + "name": "blobReferenceToken", + "id": 1992, + "since": 74, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Booking": { + "name": "Booking", + "since": 9, + "type": "LIST_ELEMENT_TYPE", + "id": 709, + "rootId": "A3N5cwACxQ", + "versioned": false, + "encrypted": false, + "values": { + "_area": { + "final": true, + "name": "_area", + "id": 715, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_format": { + "final": false, + "name": "_format", + "id": 713, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 711, + "since": 9, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_owner": { + "final": true, + "name": "_owner", + "id": 714, + "since": 9, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1004, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 712, + "since": 9, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "bonusMonth": { + "final": false, + "name": "bonusMonth", + "id": 2103, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "createDate": { + "final": false, + "name": "createDate", + "id": 716, + "since": 9, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "endDate": { + "final": false, + "name": "endDate", + "id": 718, + "since": 9, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "paymentInterval": { + "final": false, + "name": "paymentInterval", + "id": 719, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "paymentMonths": { + "final": false, + "name": "paymentMonths", + "id": 717, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": false, + "name": "items", + "id": 721, + "since": 9, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BookingItem", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "BookingItem": { + "name": "BookingItem", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 700, + "rootId": "A3N5cwACvA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 701, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "currentCount": { + "final": false, + "name": "currentCount", + "id": 703, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "currentInvoicedCount": { + "final": false, + "name": "currentInvoicedCount", + "id": 706, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "featureType": { + "final": false, + "name": "featureType", + "id": 702, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "maxCount": { + "final": false, + "name": "maxCount", + "id": 704, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "price": { + "final": false, + "name": "price", + "id": 707, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "priceType": { + "final": false, + "name": "priceType", + "id": 708, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "totalInvoicedCount": { + "final": false, + "name": "totalInvoicedCount", + "id": 705, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "BookingsRef": { + "name": "BookingsRef", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 722, + "rootId": "A3N5cwAC0g", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 723, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 724, + "since": 9, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Booking", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "BootstrapFeature": { + "name": "BootstrapFeature", + "since": 24, + "type": "AGGREGATED_TYPE", + "id": 1249, + "rootId": "A3N5cwAE4Q", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1250, + "since": 24, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "feature": { + "final": false, + "name": "feature", + "id": 1309, + "since": 28, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Braintree3ds2Request": { + "name": "Braintree3ds2Request", + "since": 66, + "type": "AGGREGATED_TYPE", + "id": 1828, + "rootId": "A3N5cwAHJA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1829, + "since": 66, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bin": { + "final": false, + "name": "bin", + "id": 1832, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "clientToken": { + "final": false, + "name": "clientToken", + "id": 1830, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "nonce": { + "final": false, + "name": "nonce", + "id": 1831, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Braintree3ds2Response": { + "name": "Braintree3ds2Response", + "since": 66, + "type": "AGGREGATED_TYPE", + "id": 1833, + "rootId": "A3N5cwAHKQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1834, + "since": 66, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "clientToken": { + "final": false, + "name": "clientToken", + "id": 1835, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "nonce": { + "final": false, + "name": "nonce", + "id": 1836, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "BrandingDomainData": { + "name": "BrandingDomainData", + "since": 22, + "type": "DATA_TRANSFER_TYPE", + "id": 1149, + "rootId": "A3N5cwAEfQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1150, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "domain": { + "final": true, + "name": "domain", + "id": 1151, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "sessionEncPemCertificateChain": { + "final": true, + "name": "sessionEncPemCertificateChain", + "id": 1152, + "since": 22, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "sessionEncPemPrivateKey": { + "final": true, + "name": "sessionEncPemPrivateKey", + "id": 1153, + "since": 22, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "systemAdminPubEncSessionKey": { + "final": true, + "name": "systemAdminPubEncSessionKey", + "id": 1154, + "since": 22, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPubKeyVersion": { + "final": true, + "name": "systemAdminPubKeyVersion", + "id": 2282, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPublicProtocolVersion": { + "final": true, + "name": "systemAdminPublicProtocolVersion", + "id": 2161, + "since": 92, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "BrandingDomainDeleteData": { + "name": "BrandingDomainDeleteData", + "since": 22, + "type": "DATA_TRANSFER_TYPE", + "id": 1155, + "rootId": "A3N5cwAEgw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1156, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "domain": { + "final": true, + "name": "domain", + "id": 1157, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "BrandingDomainGetReturn": { + "name": "BrandingDomainGetReturn", + "since": 56, + "type": "DATA_TRANSFER_TYPE", + "id": 1723, + "rootId": "A3N5cwAGuw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1724, + "since": 56, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "certificateInfo": { + "final": false, + "name": "certificateInfo", + "id": 1725, + "since": 56, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CertificateInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Bucket": { + "name": "Bucket", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 129, + "rootId": "A3N5cwAAgQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 130, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bucketPermissions": { + "final": true, + "name": "bucketPermissions", + "id": 131, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "BucketPermission", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "BucketKey": { + "name": "BucketKey", + "since": 82, + "type": "AGGREGATED_TYPE", + "id": 2043, + "rootId": "A3N5cwAH-w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2044, + "since": 82, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "groupEncBucketKey": { + "final": true, + "name": "groupEncBucketKey", + "id": 2046, + "since": 82, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "protocolVersion": { + "final": true, + "name": "protocolVersion", + "id": 2158, + "since": 92, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEncBucketKey": { + "final": true, + "name": "pubEncBucketKey", + "id": 2045, + "since": 82, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "recipientKeyVersion": { + "final": true, + "name": "recipientKeyVersion", + "id": 2252, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "senderKeyVersion": { + "final": true, + "name": "senderKeyVersion", + "id": 2253, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "bucketEncSessionKeys": { + "final": true, + "name": "bucketEncSessionKeys", + "id": 2048, + "since": 82, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InstanceSessionKey", + "dependency": null + }, + "keyGroup": { + "final": true, + "name": "keyGroup", + "id": 2047, + "since": 82, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "BucketPermission": { + "name": "BucketPermission", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 118, + "rootId": "A3N5cwB2", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 122, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 120, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1000, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 121, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "ownerEncBucketKey": { + "final": true, + "name": "ownerEncBucketKey", + "id": 1001, + "since": 17, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "ownerKeyVersion": { + "final": true, + "name": "ownerKeyVersion", + "id": 2248, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "protocolVersion": { + "final": true, + "name": "protocolVersion", + "id": 2157, + "since": 92, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEncBucketKey": { + "final": false, + "name": "pubEncBucketKey", + "id": 125, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubKeyVersion": { + "final": false, + "name": "pubKeyVersion", + "id": 126, + "since": 1, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "senderKeyVersion": { + "final": true, + "name": "senderKeyVersion", + "id": 2250, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncBucketKey": { + "final": false, + "name": "symEncBucketKey", + "id": 124, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symKeyVersion": { + "final": true, + "name": "symKeyVersion", + "id": 2249, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 123, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 128, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CalendarEventRef": { + "name": "CalendarEventRef", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1532, + "rootId": "A3N5cwAF_A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1533, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "elementId": { + "final": true, + "name": "elementId", + "id": 1534, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "listId": { + "final": true, + "name": "listId", + "id": 1535, + "since": 48, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "CertificateInfo": { + "name": "CertificateInfo", + "since": 44, + "type": "AGGREGATED_TYPE", + "id": 1500, + "rootId": "A3N5cwAF3A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1501, + "since": 44, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "expiryDate": { + "final": true, + "name": "expiryDate", + "id": 1502, + "since": 44, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "state": { + "final": true, + "name": "state", + "id": 1503, + "since": 44, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 1504, + "since": 44, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "certificate": { + "final": true, + "name": "certificate", + "id": 1505, + "since": 44, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "SslCertificate", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Challenge": { + "name": "Challenge", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1187, + "rootId": "A3N5cwAEow", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1188, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 1189, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "otp": { + "final": true, + "name": "otp", + "id": 1247, + "since": 24, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "OtpChallenge", + "dependency": null + }, + "u2f": { + "final": true, + "name": "u2f", + "id": 1190, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "U2fChallenge", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ChangeKdfPostIn": { + "name": "ChangeKdfPostIn", + "since": 95, + "type": "DATA_TRANSFER_TYPE", + "id": 2198, + "rootId": "A3N5cwAIlg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2199, + "since": 95, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 2204, + "since": 95, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "oldVerifier": { + "final": false, + "name": "oldVerifier", + "id": 2203, + "since": 95, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "pwEncUserGroupKey": { + "final": false, + "name": "pwEncUserGroupKey", + "id": 2202, + "since": 95, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "salt": { + "final": false, + "name": "salt", + "id": 2201, + "since": 95, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 2410, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": false, + "name": "verifier", + "id": 2200, + "since": 95, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ChangePasswordPostIn": { + "name": "ChangePasswordPostIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 534, + "rootId": "A3N5cwACFg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 535, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "code": { + "final": false, + "name": "code", + "id": 539, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 2134, + "since": 89, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "oldVerifier": { + "final": false, + "name": "oldVerifier", + "id": 1240, + "since": 23, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pwEncUserGroupKey": { + "final": false, + "name": "pwEncUserGroupKey", + "id": 538, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeVerifier": { + "final": true, + "name": "recoverCodeVerifier", + "id": 1418, + "since": 36, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "salt": { + "final": false, + "name": "salt", + "id": 537, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 2408, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": false, + "name": "verifier", + "id": 536, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Chat": { + "name": "Chat", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 457, + "rootId": "A3N5cwAByQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 458, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "recipient": { + "final": false, + "name": "recipient", + "id": 460, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "sender": { + "final": false, + "name": "sender", + "id": 459, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "text": { + "final": false, + "name": "text", + "id": 461, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "CloseSessionServicePost": { + "name": "CloseSessionServicePost", + "since": 50, + "type": "DATA_TRANSFER_TYPE", + "id": 1595, + "rootId": "A3N5cwAGOw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1596, + "since": 50, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accessToken": { + "final": false, + "name": "accessToken", + "id": 1597, + "since": 50, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "sessionId": { + "final": false, + "name": "sessionId", + "id": 1598, + "since": 50, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Session", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CreateCustomerServerPropertiesData": { + "name": "CreateCustomerServerPropertiesData", + "since": 13, + "type": "DATA_TRANSFER_TYPE", + "id": 961, + "rootId": "A3N5cwADwQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 962, + "since": 13, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "adminGroupEncSessionKey": { + "final": false, + "name": "adminGroupEncSessionKey", + "id": 963, + "since": 13, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "adminGroupKeyVersion": { + "final": false, + "name": "adminGroupKeyVersion", + "id": 2274, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "CreateCustomerServerPropertiesReturn": { + "name": "CreateCustomerServerPropertiesReturn", + "since": 13, + "type": "DATA_TRANSFER_TYPE", + "id": 964, + "rootId": "A3N5cwADxA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 965, + "since": 13, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "id": { + "final": false, + "name": "id", + "id": 966, + "since": 13, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "CustomerServerProperties", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CreateSessionData": { + "name": "CreateSessionData", + "since": 23, + "type": "DATA_TRANSFER_TYPE", + "id": 1211, + "rootId": "A3N5cwAEuw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1212, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accessKey": { + "final": true, + "name": "accessKey", + "id": 1216, + "since": 23, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "authToken": { + "final": true, + "name": "authToken", + "id": 1217, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "authVerifier": { + "final": true, + "name": "authVerifier", + "id": 1214, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "clientIdentifier": { + "final": true, + "name": "clientIdentifier", + "id": 1215, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 1213, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "recoverCodeVerifier": { + "final": true, + "name": "recoverCodeVerifier", + "id": 1417, + "since": 36, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "user": { + "final": true, + "name": "user", + "id": 1218, + "since": 23, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CreateSessionReturn": { + "name": "CreateSessionReturn", + "since": 23, + "type": "DATA_TRANSFER_TYPE", + "id": 1219, + "rootId": "A3N5cwAEww", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1220, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accessToken": { + "final": true, + "name": "accessToken", + "id": 1221, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "challenges": { + "final": true, + "name": "challenges", + "id": 1222, + "since": 23, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Challenge", + "dependency": null + }, + "user": { + "final": true, + "name": "user", + "id": 1223, + "since": 23, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CreditCard": { + "name": "CreditCard", + "since": 30, + "type": "AGGREGATED_TYPE", + "id": 1313, + "rootId": "A3N5cwAFIQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1314, + "since": 30, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "cardHolderName": { + "final": false, + "name": "cardHolderName", + "id": 1315, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "cvv": { + "final": false, + "name": "cvv", + "id": 1317, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "expirationMonth": { + "final": false, + "name": "expirationMonth", + "id": 1318, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "expirationYear": { + "final": false, + "name": "expirationYear", + "id": 1319, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "number": { + "final": false, + "name": "number", + "id": 1316, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "CustomDomainCheckGetIn": { + "name": "CustomDomainCheckGetIn", + "since": 49, + "type": "DATA_TRANSFER_TYPE", + "id": 1586, + "rootId": "A3N5cwAGMg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1587, + "since": 49, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "domain": { + "final": false, + "name": "domain", + "id": 1588, + "since": 49, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": false, + "name": "customer", + "id": 2053, + "since": 83, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomDomainCheckGetOut": { + "name": "CustomDomainCheckGetOut", + "since": 49, + "type": "DATA_TRANSFER_TYPE", + "id": 1589, + "rootId": "A3N5cwAGNQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1590, + "since": 49, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "checkResult": { + "final": false, + "name": "checkResult", + "id": 1591, + "since": 49, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "invalidRecords": { + "final": false, + "name": "invalidRecords", + "id": 1593, + "since": 49, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DnsRecord", + "dependency": null + }, + "missingRecords": { + "final": false, + "name": "missingRecords", + "id": 1592, + "since": 49, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DnsRecord", + "dependency": null + }, + "requiredRecords": { + "final": false, + "name": "requiredRecords", + "id": 1758, + "since": 62, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DnsRecord", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomDomainData": { + "name": "CustomDomainData", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 735, + "rootId": "A3N5cwAC3w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 736, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "domain": { + "final": false, + "name": "domain", + "id": 737, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "catchAllMailGroup": { + "final": false, + "name": "catchAllMailGroup", + "id": 1045, + "since": 18, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomDomainReturn": { + "name": "CustomDomainReturn", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 731, + "rootId": "A3N5cwAC2w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 732, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "validationResult": { + "final": false, + "name": "validationResult", + "id": 733, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "invalidDnsRecords": { + "final": true, + "name": "invalidDnsRecords", + "id": 734, + "since": 9, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "StringWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Customer": { + "name": "Customer", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 31, + "rootId": "A3N5cwAf", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 35, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 33, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 991, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 34, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "approvalStatus": { + "final": false, + "name": "approvalStatus", + "id": 926, + "since": 12, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "businessUse": { + "final": false, + "name": "businessUse", + "id": 1754, + "since": 61, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "orderProcessingAgreementNeeded": { + "final": false, + "name": "orderProcessingAgreementNeeded", + "id": 1347, + "since": 31, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 36, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "adminGroup": { + "final": true, + "name": "adminGroup", + "id": 37, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "adminGroups": { + "final": true, + "name": "adminGroups", + "id": 39, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "auditLog": { + "final": true, + "name": "auditLog", + "id": 1161, + "since": 22, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "AuditLogRef", + "dependency": null + }, + "customerGroup": { + "final": true, + "name": "customerGroup", + "id": 38, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "customerGroups": { + "final": true, + "name": "customerGroups", + "id": 40, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "customerInfo": { + "final": true, + "name": "customerInfo", + "id": 160, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "CustomerInfo", + "dependency": null + }, + "customizations": { + "final": false, + "name": "customizations", + "id": 1256, + "since": 25, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Feature", + "dependency": null + }, + "orderProcessingAgreement": { + "final": true, + "name": "orderProcessingAgreement", + "id": 1348, + "since": 31, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "OrderProcessingAgreement", + "dependency": null + }, + "properties": { + "final": true, + "name": "properties", + "id": 662, + "since": 6, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "CustomerProperties", + "dependency": null + }, + "referralCode": { + "final": false, + "name": "referralCode", + "id": 2061, + "since": 84, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ReferralCode", + "dependency": null + }, + "rejectedSenders": { + "final": true, + "name": "rejectedSenders", + "id": 1750, + "since": 60, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "RejectedSendersRef", + "dependency": null + }, + "serverProperties": { + "final": true, + "name": "serverProperties", + "id": 960, + "since": 13, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "CustomerServerProperties", + "dependency": null + }, + "teamGroups": { + "final": true, + "name": "teamGroups", + "id": 42, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "userAreaGroups": { + "final": true, + "name": "userAreaGroups", + "id": 992, + "since": 17, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "UserAreaGroups", + "dependency": null + }, + "userGroups": { + "final": true, + "name": "userGroups", + "id": 41, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "whitelabelChildren": { + "final": true, + "name": "whitelabelChildren", + "id": 1277, + "since": 26, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "WhitelabelChildrenRef", + "dependency": null + }, + "whitelabelParent": { + "final": true, + "name": "whitelabelParent", + "id": 1276, + "since": 26, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "WhitelabelParent", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerAccountTerminationPostIn": { + "name": "CustomerAccountTerminationPostIn", + "since": 79, + "type": "DATA_TRANSFER_TYPE", + "id": 2015, + "rootId": "A3N5cwAH3w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2016, + "since": 79, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "terminationDate": { + "final": true, + "name": "terminationDate", + "id": 2017, + "since": 79, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "surveyData": { + "final": false, + "name": "surveyData", + "id": 2313, + "since": 98, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "SurveyData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerAccountTerminationPostOut": { + "name": "CustomerAccountTerminationPostOut", + "since": 79, + "type": "DATA_TRANSFER_TYPE", + "id": 2018, + "rootId": "A3N5cwAH4g", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2019, + "since": 79, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "terminationRequest": { + "final": false, + "name": "terminationRequest", + "id": 2020, + "since": 79, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "CustomerAccountTerminationRequest", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerAccountTerminationRequest": { + "name": "CustomerAccountTerminationRequest", + "since": 79, + "type": "LIST_ELEMENT_TYPE", + "id": 2005, + "rootId": "A3N5cwAH1Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2009, + "since": 79, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 2007, + "since": 79, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 2010, + "since": 79, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 2008, + "since": 79, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "terminationDate": { + "final": true, + "name": "terminationDate", + "id": 2012, + "since": 79, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "terminationRequestDate": { + "final": true, + "name": "terminationRequestDate", + "id": 2013, + "since": 79, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": false, + "name": "customer", + "id": 2011, + "since": 79, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerInfo": { + "name": "CustomerInfo", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 148, + "rootId": "A3N5cwAAlA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 152, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 150, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1011, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 151, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "activationTime": { + "final": false, + "name": "activationTime", + "id": 157, + "since": 1, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "company": { + "final": false, + "name": "company", + "id": 153, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "creationTime": { + "final": true, + "name": "creationTime", + "id": 155, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "deletionReason": { + "final": true, + "name": "deletionReason", + "id": 640, + "since": 5, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "deletionTime": { + "final": true, + "name": "deletionTime", + "id": 639, + "since": 5, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "domain": { + "final": true, + "name": "domain", + "id": 154, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "erased": { + "final": true, + "name": "erased", + "id": 1381, + "since": 32, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "includedEmailAliases": { + "final": false, + "name": "includedEmailAliases", + "id": 1067, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "includedStorageCapacity": { + "final": false, + "name": "includedStorageCapacity", + "id": 1068, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "perUserAliasCount": { + "final": false, + "name": "perUserAliasCount", + "id": 2094, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "perUserStorageCapacity": { + "final": false, + "name": "perUserStorageCapacity", + "id": 2093, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "plan": { + "final": false, + "name": "plan", + "id": 2098, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "promotionEmailAliases": { + "final": false, + "name": "promotionEmailAliases", + "id": 976, + "since": 16, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "promotionStorageCapacity": { + "final": false, + "name": "promotionStorageCapacity", + "id": 650, + "since": 6, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "registrationMailAddress": { + "final": true, + "name": "registrationMailAddress", + "id": 597, + "since": 2, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "source": { + "final": false, + "name": "source", + "id": 725, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "testEndTime": { + "final": false, + "name": "testEndTime", + "id": 156, + "since": 1, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "usedSharedEmailAliases": { + "final": true, + "name": "usedSharedEmailAliases", + "id": 977, + "since": 16, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "accountingInfo": { + "final": true, + "name": "accountingInfo", + "id": 159, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "AccountingInfo", + "dependency": null + }, + "bookings": { + "final": true, + "name": "bookings", + "id": 727, + "since": 9, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "BookingsRef", + "dependency": null + }, + "customPlan": { + "final": true, + "name": "customPlan", + "id": 2114, + "since": 87, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PlanConfiguration", + "dependency": null + }, + "customer": { + "final": true, + "name": "customer", + "id": 158, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + }, + "domainInfos": { + "final": true, + "name": "domainInfos", + "id": 726, + "since": 9, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DomainInfo", + "dependency": null + }, + "giftCards": { + "final": true, + "name": "giftCards", + "id": 1794, + "since": 65, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "GiftCardsRef", + "dependency": null + }, + "referredBy": { + "final": false, + "name": "referredBy", + "id": 2072, + "since": 84, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + }, + "supportInfo": { + "final": true, + "name": "supportInfo", + "id": 2197, + "since": 94, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "SupportInfo", + "dependency": null + }, + "takeoverCustomer": { + "final": false, + "name": "takeoverCustomer", + "id": 1076, + "since": 19, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + }, + "terminationRequest": { + "final": false, + "name": "terminationRequest", + "id": 2014, + "since": 79, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "CustomerAccountTerminationRequest", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerProperties": { + "name": "CustomerProperties", + "since": 6, + "type": "ELEMENT_TYPE", + "id": 656, + "rootId": "A3N5cwACkA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 660, + "since": 6, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 658, + "since": 6, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 985, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 659, + "since": 6, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "externalUserWelcomeMessage": { + "final": false, + "name": "externalUserWelcomeMessage", + "id": 661, + "since": 6, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "lastUpgradeReminder": { + "final": false, + "name": "lastUpgradeReminder", + "id": 975, + "since": 15, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "usageDataOptedOut": { + "final": false, + "name": "usageDataOptedOut", + "id": 2025, + "since": 80, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bigLogo": { + "final": false, + "name": "bigLogo", + "id": 923, + "since": 11, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + }, + "notificationMailTemplates": { + "final": false, + "name": "notificationMailTemplates", + "id": 1522, + "since": 45, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "NotificationMailTemplate", + "dependency": null + }, + "smallLogo": { + "final": false, + "name": "smallLogo", + "id": 922, + "since": 11, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "CustomerServerProperties": { + "name": "CustomerServerProperties", + "since": 13, + "type": "ELEMENT_TYPE", + "id": 954, + "rootId": "A3N5cwADug", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 958, + "since": 13, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 956, + "since": 13, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 987, + "since": 17, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 986, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2224, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 957, + "since": 13, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "requirePasswordUpdateAfterReset": { + "final": false, + "name": "requirePasswordUpdateAfterReset", + "id": 1100, + "since": 22, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "saveEncryptedIpAddressInSession": { + "final": false, + "name": "saveEncryptedIpAddressInSession", + "id": 1406, + "since": 35, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "whitelabelCode": { + "final": false, + "name": "whitelabelCode", + "id": 1278, + "since": 26, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "emailSenderList": { + "final": false, + "name": "emailSenderList", + "id": 959, + "since": 13, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EmailSenderListElement", + "dependency": null + }, + "whitelabelRegistrationDomains": { + "final": false, + "name": "whitelabelRegistrationDomains", + "id": 1279, + "since": 26, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "StringWrapper", + "dependency": null + }, + "whitelistedDomains": { + "final": true, + "name": "whitelistedDomains", + "id": 1099, + "since": 21, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "DomainsRef", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "DateWrapper": { + "name": "DateWrapper", + "since": 85, + "type": "AGGREGATED_TYPE", + "id": 2073, + "rootId": "A3N5cwAIGQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2074, + "since": 85, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": true, + "name": "date", + "id": 2075, + "since": 85, + "type": "Date", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "DebitServicePutData": { + "name": "DebitServicePutData", + "since": 18, + "type": "DATA_TRANSFER_TYPE", + "id": 1041, + "rootId": "A3N5cwAEEQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1042, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "invoice": { + "final": false, + "name": "invoice", + "id": 1043, + "since": 18, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "LegacyInvoice", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "DeleteCustomerData": { + "name": "DeleteCustomerData", + "since": 5, + "type": "DATA_TRANSFER_TYPE", + "id": 641, + "rootId": "A3N5cwACgQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 642, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authVerifier": { + "final": false, + "name": "authVerifier", + "id": 1325, + "since": 30, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "reason": { + "final": false, + "name": "reason", + "id": 644, + "since": 5, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "takeoverMailAddress": { + "final": false, + "name": "takeoverMailAddress", + "id": 1077, + "since": 19, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "undelete": { + "final": false, + "name": "undelete", + "id": 643, + "since": 5, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": false, + "name": "customer", + "id": 645, + "since": 5, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + }, + "surveyData": { + "final": false, + "name": "surveyData", + "id": 2312, + "since": 98, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "SurveyData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "DnsRecord": { + "name": "DnsRecord", + "since": 49, + "type": "AGGREGATED_TYPE", + "id": 1581, + "rootId": "A3N5cwAGLQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1582, + "since": 49, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "subdomain": { + "final": false, + "name": "subdomain", + "id": 1583, + "since": 49, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 1584, + "since": 49, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 1585, + "since": 49, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "DomainInfo": { + "name": "DomainInfo", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 696, + "rootId": "A3N5cwACuA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 697, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "domain": { + "final": true, + "name": "domain", + "id": 698, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "validatedMxRecord": { + "final": true, + "name": "validatedMxRecord", + "id": 699, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "catchAllMailGroup": { + "final": true, + "name": "catchAllMailGroup", + "id": 1044, + "since": 18, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + }, + "whitelabelConfig": { + "final": true, + "name": "whitelabelConfig", + "id": 1136, + "since": 22, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "WhitelabelConfig", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "DomainMailAddressAvailabilityData": { + "name": "DomainMailAddressAvailabilityData", + "since": 2, + "type": "DATA_TRANSFER_TYPE", + "id": 599, + "rootId": "A3N5cwACVw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 600, + "since": 2, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 601, + "since": 2, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "DomainMailAddressAvailabilityReturn": { + "name": "DomainMailAddressAvailabilityReturn", + "since": 2, + "type": "DATA_TRANSFER_TYPE", + "id": 602, + "rootId": "A3N5cwACWg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 603, + "since": 2, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "available": { + "final": false, + "name": "available", + "id": 604, + "since": 2, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "DomainsRef": { + "name": "DomainsRef", + "since": 21, + "type": "AGGREGATED_TYPE", + "id": 1096, + "rootId": "A3N5cwAESA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1097, + "since": 21, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1098, + "since": 21, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Domain", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "EmailSenderListElement": { + "name": "EmailSenderListElement", + "since": 13, + "type": "AGGREGATED_TYPE", + "id": 949, + "rootId": "A3N5cwADtQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 950, + "since": 13, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "field": { + "final": false, + "name": "field", + "id": 1705, + "since": 54, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "hashedValue": { + "final": false, + "name": "hashedValue", + "id": 951, + "since": 13, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 953, + "since": 13, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 952, + "since": 13, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "EntityEventBatch": { + "name": "EntityEventBatch", + "since": 20, + "type": "LIST_ELEMENT_TYPE", + "id": 1079, + "rootId": "A3N5cwAENw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1083, + "since": 20, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1081, + "since": 20, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1084, + "since": 20, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1082, + "since": 20, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "events": { + "final": true, + "name": "events", + "id": 1085, + "since": 20, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EntityUpdate", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "EntityUpdate": { + "name": "EntityUpdate", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 462, + "rootId": "A3N5cwABzg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 463, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "application": { + "final": false, + "name": "application", + "id": 464, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "instanceId": { + "final": false, + "name": "instanceId", + "id": 467, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "instanceListId": { + "final": false, + "name": "instanceListId", + "id": 466, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "operation": { + "final": false, + "name": "operation", + "id": 624, + "since": 4, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 465, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Exception": { + "name": "Exception", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 468, + "rootId": "A3N5cwAB1A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 469, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "msg": { + "final": false, + "name": "msg", + "id": 471, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 470, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ExternalPropertiesReturn": { + "name": "ExternalPropertiesReturn", + "since": 6, + "type": "DATA_TRANSFER_TYPE", + "id": 663, + "rootId": "A3N5cwAClw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 664, + "since": 6, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accountType": { + "final": false, + "name": "accountType", + "id": 666, + "since": 6, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "message": { + "final": false, + "name": "message", + "id": 665, + "since": 6, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bigLogo": { + "final": false, + "name": "bigLogo", + "id": 925, + "since": 11, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + }, + "smallLogo": { + "final": false, + "name": "smallLogo", + "id": 924, + "since": 11, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ExternalUserReference": { + "name": "ExternalUserReference", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 103, + "rootId": "A3N5cwBn", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 107, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 105, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 997, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 106, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "user": { + "final": true, + "name": "user", + "id": 108, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + }, + "userGroup": { + "final": true, + "name": "userGroup", + "id": 109, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Feature": { + "name": "Feature", + "since": 25, + "type": "AGGREGATED_TYPE", + "id": 1253, + "rootId": "A3N5cwAE5Q", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1254, + "since": 25, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "feature": { + "final": false, + "name": "feature", + "id": 1255, + "since": 25, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "File": { + "name": "File", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 917, + "rootId": "A3N5cwADlQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 918, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "data": { + "final": false, + "name": "data", + "id": 921, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "mimeType": { + "final": false, + "name": "mimeType", + "id": 920, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 919, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "GeneratedIdWrapper": { + "name": "GeneratedIdWrapper", + "since": 32, + "type": "AGGREGATED_TYPE", + "id": 1349, + "rootId": "A3N5cwAFRQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1350, + "since": 32, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 1351, + "since": 32, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "GiftCard": { + "name": "GiftCard", + "since": 65, + "type": "LIST_ELEMENT_TYPE", + "id": 1769, + "rootId": "A3N5cwAG6Q", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1773, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1771, + "since": 65, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1775, + "since": 65, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1774, + "since": 65, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2238, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1772, + "since": 65, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "message": { + "final": false, + "name": "message", + "id": 1778, + "since": 65, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "migrated": { + "final": false, + "name": "migrated", + "id": 1993, + "since": 75, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "orderDate": { + "final": true, + "name": "orderDate", + "id": 1779, + "since": 65, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "status": { + "final": true, + "name": "status", + "id": 1776, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": true, + "name": "value", + "id": 1777, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "GiftCardCreateData": { + "name": "GiftCardCreateData", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1803, + "rootId": "A3N5cwAHCw", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1804, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "keyHash": { + "final": false, + "name": "keyHash", + "id": 1809, + "since": 65, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "message": { + "final": false, + "name": "message", + "id": 1805, + "since": 65, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "ownerEncSessionKey": { + "final": false, + "name": "ownerEncSessionKey", + "id": 1806, + "since": 65, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": false, + "name": "ownerKeyVersion", + "id": 2275, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 1807, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "GiftCardCreateReturn": { + "name": "GiftCardCreateReturn", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1813, + "rootId": "A3N5cwAHFQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1814, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "giftCard": { + "final": true, + "name": "giftCard", + "id": 1815, + "since": 65, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GiftCard", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GiftCardDeleteData": { + "name": "GiftCardDeleteData", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1810, + "rootId": "A3N5cwAHEg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1811, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "giftCard": { + "final": true, + "name": "giftCard", + "id": 1812, + "since": 65, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GiftCard", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GiftCardGetReturn": { + "name": "GiftCardGetReturn", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1798, + "rootId": "A3N5cwAHBg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1799, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "maxPerPeriod": { + "final": false, + "name": "maxPerPeriod", + "id": 1800, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "period": { + "final": false, + "name": "period", + "id": 1801, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "options": { + "final": false, + "name": "options", + "id": 1802, + "since": 65, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GiftCardOption", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GiftCardOption": { + "name": "GiftCardOption", + "since": 65, + "type": "AGGREGATED_TYPE", + "id": 1795, + "rootId": "A3N5cwAHAw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1796, + "since": 65, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 1797, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "GiftCardRedeemData": { + "name": "GiftCardRedeemData", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1817, + "rootId": "A3N5cwAHGQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1818, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "countryCode": { + "final": false, + "name": "countryCode", + "id": 1995, + "since": 76, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "keyHash": { + "final": false, + "name": "keyHash", + "id": 1820, + "since": 65, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "giftCardInfo": { + "final": true, + "name": "giftCardInfo", + "id": 1819, + "since": 65, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GiftCardInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GiftCardRedeemGetReturn": { + "name": "GiftCardRedeemGetReturn", + "since": 65, + "type": "DATA_TRANSFER_TYPE", + "id": 1821, + "rootId": "A3N5cwAHHQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1822, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "message": { + "final": true, + "name": "message", + "id": 1824, + "since": 65, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "value": { + "final": true, + "name": "value", + "id": 1825, + "since": 65, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "giftCard": { + "final": true, + "name": "giftCard", + "id": 1823, + "since": 65, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GiftCard", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GiftCardsRef": { + "name": "GiftCardsRef", + "since": 65, + "type": "AGGREGATED_TYPE", + "id": 1791, + "rootId": "A3N5cwAG_w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1792, + "since": 65, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1793, + "since": 65, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GiftCard", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Group": { + "name": "Group", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 5, + "rootId": "A3N5cwAF", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 9, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 7, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 981, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 8, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "adminGroupEncGKey": { + "final": true, + "name": "adminGroupEncGKey", + "id": 11, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "adminGroupKeyVersion": { + "final": true, + "name": "adminGroupKeyVersion", + "id": 2270, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "enabled": { + "final": true, + "name": "enabled", + "id": 12, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "external": { + "final": true, + "name": "external", + "id": 982, + "since": 17, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "groupKeyVersion": { + "final": false, + "name": "groupKeyVersion", + "id": 2271, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubAdminGroupEncGKey": { + "final": true, + "name": "pubAdminGroupEncGKey", + "id": 2272, + "since": 96, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 10, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "admin": { + "final": true, + "name": "admin", + "id": 224, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + }, + "administratedGroups": { + "final": true, + "name": "administratedGroups", + "id": 1306, + "since": 27, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "AdministratedGroupsRef", + "dependency": null + }, + "archives": { + "final": true, + "name": "archives", + "id": 1881, + "since": 69, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ArchiveType", + "dependency": null + }, + "currentKeys": { + "final": true, + "name": "currentKeys", + "id": 13, + "since": 1, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "KeyPair", + "dependency": null + }, + "customer": { + "final": true, + "name": "customer", + "id": 226, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + }, + "formerGroupKeys": { + "final": false, + "name": "formerGroupKeys", + "id": 2273, + "since": 96, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "GroupKeysRef", + "dependency": null + }, + "groupInfo": { + "final": true, + "name": "groupInfo", + "id": 227, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "invitations": { + "final": true, + "name": "invitations", + "id": 228, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "SentGroupInvitation", + "dependency": null + }, + "members": { + "final": true, + "name": "members", + "id": 229, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupMember", + "dependency": null + }, + "storageCounter": { + "final": true, + "name": "storageCounter", + "id": 2092, + "since": 86, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "StorageCounter", + "dependency": null + }, + "user": { + "final": true, + "name": "user", + "id": 225, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupInfo": { + "name": "GroupInfo", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 14, + "rootId": "A3N5cwAO", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 18, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 16, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_listEncSessionKey": { + "final": false, + "name": "_listEncSessionKey", + "id": 19, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 984, + "since": 17, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 983, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2225, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 17, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "created": { + "final": true, + "name": "created", + "id": 23, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "deleted": { + "final": true, + "name": "deleted", + "id": 24, + "since": 1, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "groupType": { + "final": true, + "name": "groupType", + "id": 1286, + "since": 27, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 22, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 21, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 20, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "localAdmin": { + "final": true, + "name": "localAdmin", + "id": 1287, + "since": 27, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + }, + "mailAddressAliases": { + "final": true, + "name": "mailAddressAliases", + "id": 687, + "since": 8, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddressAlias", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKey": { + "name": "GroupKey", + "since": 96, + "type": "LIST_ELEMENT_TYPE", + "id": 2255, + "rootId": "A3N5cwAIzw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2259, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 2257, + "since": 96, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 2260, + "since": 96, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 2258, + "since": 96, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "adminGroupEncGKey": { + "final": false, + "name": "adminGroupEncGKey", + "id": 2263, + "since": 96, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "adminGroupKeyVersion": { + "final": false, + "name": "adminGroupKeyVersion", + "id": 2265, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "ownerEncGKey": { + "final": false, + "name": "ownerEncGKey", + "id": 2261, + "since": 96, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": false, + "name": "ownerKeyVersion", + "id": 2262, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubAdminGroupEncGKey": { + "final": false, + "name": "pubAdminGroupEncGKey", + "id": 2264, + "since": 96, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "keyPair": { + "final": false, + "name": "keyPair", + "id": 2266, + "since": 96, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "KeyPair", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyRotationData": { + "name": "GroupKeyRotationData", + "since": 101, + "type": "AGGREGATED_TYPE", + "id": 2328, + "rootId": "A3N5cwAJGA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2329, + "since": 101, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "adminGroupEncGroupKey": { + "final": false, + "name": "adminGroupEncGroupKey", + "id": 2334, + "since": 101, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "adminGroupKeyVersion": { + "final": false, + "name": "adminGroupKeyVersion", + "id": 2335, + "since": 101, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "groupEncPreviousGroupKey": { + "final": false, + "name": "groupEncPreviousGroupKey", + "id": 2333, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "groupKeyVersion": { + "final": false, + "name": "groupKeyVersion", + "id": 2332, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 2336, + "since": 101, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "groupKeyUpdatesForMembers": { + "final": true, + "name": "groupKeyUpdatesForMembers", + "id": 2397, + "since": 102, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupKeyUpdateData", + "dependency": null + }, + "groupMembershipUpdateData": { + "final": true, + "name": "groupMembershipUpdateData", + "id": 2432, + "since": 106, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupMembershipUpdateData", + "dependency": null + }, + "keyPair": { + "final": false, + "name": "keyPair", + "id": 2337, + "since": 101, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "KeyPair", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyRotationInfoGetOut": { + "name": "GroupKeyRotationInfoGetOut", + "since": 101, + "type": "DATA_TRANSFER_TYPE", + "id": 2342, + "rootId": "A3N5cwAJJg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2343, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "userOrAdminGroupKeyRotationScheduled": { + "final": false, + "name": "userOrAdminGroupKeyRotationScheduled", + "id": 2344, + "since": 101, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupKeyUpdates": { + "final": false, + "name": "groupKeyUpdates", + "id": 2407, + "since": 102, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "GroupKeyUpdate", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyRotationPostIn": { + "name": "GroupKeyRotationPostIn", + "since": 101, + "type": "DATA_TRANSFER_TYPE", + "id": 2338, + "rootId": "A3N5cwAJIg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2339, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupKeyUpdates": { + "final": false, + "name": "groupKeyUpdates", + "id": 2340, + "since": 101, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupKeyRotationData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyUpdate": { + "name": "GroupKeyUpdate", + "since": 102, + "type": "LIST_ELEMENT_TYPE", + "id": 2369, + "rootId": "A3N5cwAJQQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2373, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 2371, + "since": 102, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 2375, + "since": 102, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 2374, + "since": 102, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2376, + "since": 102, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 2372, + "since": 102, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "groupKey": { + "final": true, + "name": "groupKey", + "id": 2377, + "since": 102, + "type": "Bytes", + "cardinality": "One", + "encrypted": true + }, + "groupKeyVersion": { + "final": true, + "name": "groupKeyVersion", + "id": 2378, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bucketKey": { + "final": true, + "name": "bucketKey", + "id": 2379, + "since": 102, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "BucketKey", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyUpdateData": { + "name": "GroupKeyUpdateData", + "since": 102, + "type": "AGGREGATED_TYPE", + "id": 2391, + "rootId": "A3N5cwAJVw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2392, + "since": 102, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bucketKeyEncSessionKey": { + "final": false, + "name": "bucketKeyEncSessionKey", + "id": 2395, + "since": 102, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sessionKeyEncGroupKey": { + "final": false, + "name": "sessionKeyEncGroupKey", + "id": 2394, + "since": 102, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sessionKeyEncGroupKeyVersion": { + "final": false, + "name": "sessionKeyEncGroupKeyVersion", + "id": 2393, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "pubEncBucketKeyData": { + "final": true, + "name": "pubEncBucketKeyData", + "id": 2396, + "since": 102, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PubEncKeyData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeyUpdatesRef": { + "name": "GroupKeyUpdatesRef", + "since": 102, + "type": "AGGREGATED_TYPE", + "id": 2380, + "rootId": "A3N5cwAJTA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2381, + "since": 102, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 2382, + "since": 102, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupKeyUpdate", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupKeysRef": { + "name": "GroupKeysRef", + "since": 96, + "type": "AGGREGATED_TYPE", + "id": 2267, + "rootId": "A3N5cwAI2w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2268, + "since": 96, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 2269, + "since": 96, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupKey", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupMember": { + "name": "GroupMember", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 216, + "rootId": "A3N5cwAA2A", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 220, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 218, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1021, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 219, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "capability": { + "final": true, + "name": "capability", + "id": 1625, + "since": 52, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 222, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "user": { + "final": true, + "name": "user", + "id": 223, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + }, + "userGroupInfo": { + "final": true, + "name": "userGroupInfo", + "id": 221, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupMembership": { + "name": "GroupMembership", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 25, + "rootId": "A3N5cwAZ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 26, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "admin": { + "final": true, + "name": "admin", + "id": 28, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "capability": { + "final": true, + "name": "capability", + "id": 1626, + "since": 52, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "groupKeyVersion": { + "final": true, + "name": "groupKeyVersion", + "id": 2246, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "groupType": { + "final": true, + "name": "groupType", + "id": 1030, + "since": 17, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncGKey": { + "final": true, + "name": "symEncGKey", + "id": 27, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": true, + "name": "symKeyVersion", + "id": 2247, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 29, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "groupInfo": { + "final": true, + "name": "groupInfo", + "id": 30, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "groupMember": { + "final": true, + "name": "groupMember", + "id": 230, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupMember", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupMembershipKeyData": { + "name": "GroupMembershipKeyData", + "since": 102, + "type": "AGGREGATED_TYPE", + "id": 2398, + "rootId": "A3N5cwAJXg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2399, + "since": 102, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "groupKeyVersion": { + "final": false, + "name": "groupKeyVersion", + "id": 2401, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "symEncGKey": { + "final": false, + "name": "symEncGKey", + "id": 2403, + "since": 102, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": false, + "name": "symKeyVersion", + "id": 2402, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 2400, + "since": 102, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupMembershipUpdateData": { + "name": "GroupMembershipUpdateData", + "since": 106, + "type": "AGGREGATED_TYPE", + "id": 2427, + "rootId": "A3N5cwAJew", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2428, + "since": 106, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "userEncGroupKey": { + "final": false, + "name": "userEncGroupKey", + "id": 2430, + "since": 106, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userKeyVersion": { + "final": false, + "name": "userKeyVersion", + "id": 2431, + "since": 106, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "userId": { + "final": false, + "name": "userId", + "id": 2429, + "since": 106, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "GroupRoot": { + "name": "GroupRoot", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 110, + "rootId": "A3N5cwBu", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 114, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 112, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 998, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 113, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "externalGroupInfos": { + "final": true, + "name": "externalGroupInfos", + "id": 116, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + }, + "externalUserAreaGroupInfos": { + "final": true, + "name": "externalUserAreaGroupInfos", + "id": 999, + "since": 17, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "UserAreaGroups", + "dependency": null + }, + "externalUserReferences": { + "final": true, + "name": "externalUserReferences", + "id": 117, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "ExternalUserReference", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "IdTupleWrapper": { + "name": "IdTupleWrapper", + "since": 99, + "type": "AGGREGATED_TYPE", + "id": 2315, + "rootId": "A3N5cwAJCw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2316, + "since": 99, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "listElementId": { + "final": true, + "name": "listElementId", + "id": 2318, + "since": 99, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "listId": { + "final": true, + "name": "listId", + "id": 2317, + "since": 99, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "InstanceSessionKey": { + "name": "InstanceSessionKey", + "since": 82, + "type": "AGGREGATED_TYPE", + "id": 2037, + "rootId": "A3N5cwAH9Q", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2038, + "since": 82, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "encryptionAuthStatus": { + "final": true, + "name": "encryptionAuthStatus", + "id": 2159, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "instanceId": { + "final": true, + "name": "instanceId", + "id": 2041, + "since": 82, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "instanceList": { + "final": true, + "name": "instanceList", + "id": 2040, + "since": 82, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "symEncSessionKey": { + "final": true, + "name": "symEncSessionKey", + "id": 2042, + "since": 82, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": true, + "name": "symKeyVersion", + "id": 2254, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "typeInfo": { + "final": false, + "name": "typeInfo", + "id": 2039, + "since": 82, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "TypeInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Invoice": { + "name": "Invoice", + "since": 52, + "type": "ELEMENT_TYPE", + "id": 1650, + "rootId": "A3N5cwAGcg", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1654, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1652, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1656, + "since": 52, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1655, + "since": 52, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2235, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1653, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": false, + "name": "address", + "id": 1661, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "adminUser": { + "final": true, + "name": "adminUser", + "id": 1668, + "since": 52, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "business": { + "final": true, + "name": "business", + "id": 1662, + "since": 52, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "country": { + "final": true, + "name": "country", + "id": 1660, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "date": { + "final": true, + "name": "date", + "id": 1658, + "since": 52, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "grandTotal": { + "final": true, + "name": "grandTotal", + "id": 1667, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "paymentMethod": { + "final": false, + "name": "paymentMethod", + "id": 1659, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "reason": { + "final": false, + "name": "reason", + "id": 1669, + "since": 52, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "subTotal": { + "final": true, + "name": "subTotal", + "id": 1666, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": true, + "name": "type", + "id": 1657, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "vat": { + "final": true, + "name": "vat", + "id": 1665, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "vatIdNumber": { + "final": true, + "name": "vatIdNumber", + "id": 1663, + "since": 52, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "vatRate": { + "final": true, + "name": "vatRate", + "id": 1664, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "bookings": { + "final": true, + "name": "bookings", + "id": 1672, + "since": 52, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "Booking", + "dependency": null + }, + "customer": { + "final": true, + "name": "customer", + "id": 1671, + "since": 52, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + }, + "items": { + "final": true, + "name": "items", + "id": 1670, + "since": 52, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InvoiceItem", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "InvoiceDataGetIn": { + "name": "InvoiceDataGetIn", + "since": 93, + "type": "DATA_TRANSFER_TYPE", + "id": 2185, + "rootId": "A3N5cwAIiQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2186, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "invoiceNumber": { + "final": false, + "name": "invoiceNumber", + "id": 2187, + "since": 93, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "InvoiceDataGetOut": { + "name": "InvoiceDataGetOut", + "since": 93, + "type": "DATA_TRANSFER_TYPE", + "id": 2170, + "rootId": "A3N5cwAIeg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2171, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": false, + "name": "address", + "id": 2177, + "since": 93, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "country": { + "final": true, + "name": "country", + "id": 2176, + "since": 93, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": true, + "name": "date", + "id": 2174, + "since": 93, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "grandTotal": { + "final": true, + "name": "grandTotal", + "id": 2182, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "invoiceId": { + "final": true, + "name": "invoiceId", + "id": 2172, + "since": 93, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "invoiceType": { + "final": true, + "name": "invoiceType", + "id": 2173, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "paymentMethod": { + "final": false, + "name": "paymentMethod", + "id": 2175, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "subTotal": { + "final": true, + "name": "subTotal", + "id": 2181, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "vat": { + "final": true, + "name": "vat", + "id": 2180, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "vatIdNumber": { + "final": true, + "name": "vatIdNumber", + "id": 2178, + "since": 93, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "vatRate": { + "final": true, + "name": "vatRate", + "id": 2179, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "vatType": { + "final": true, + "name": "vatType", + "id": 2183, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 2184, + "since": 93, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InvoiceDataItem", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "InvoiceDataItem": { + "name": "InvoiceDataItem", + "since": 93, + "type": "AGGREGATED_TYPE", + "id": 2162, + "rootId": "A3N5cwAIcg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2163, + "since": 93, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "amount": { + "final": true, + "name": "amount", + "id": 2164, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "endDate": { + "final": true, + "name": "endDate", + "id": 2169, + "since": 93, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "itemType": { + "final": true, + "name": "itemType", + "id": 2165, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "singlePrice": { + "final": true, + "name": "singlePrice", + "id": 2166, + "since": 93, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "startDate": { + "final": true, + "name": "startDate", + "id": 2168, + "since": 93, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "totalPrice": { + "final": true, + "name": "totalPrice", + "id": 2167, + "since": 93, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "InvoiceInfo": { + "name": "InvoiceInfo", + "since": 9, + "type": "ELEMENT_TYPE", + "id": 752, + "rootId": "A3N5cwAC8A", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 756, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 754, + "since": 9, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1008, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 755, + "since": 9, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "discountPercentage": { + "final": false, + "name": "discountPercentage", + "id": 2126, + "since": 88, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "extendedPeriodOfPaymentDays": { + "final": false, + "name": "extendedPeriodOfPaymentDays", + "id": 1638, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "persistentPaymentPeriodExtension": { + "final": false, + "name": "persistentPaymentPeriodExtension", + "id": 1639, + "since": 52, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "publishInvoices": { + "final": false, + "name": "publishInvoices", + "id": 759, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "reminderState": { + "final": false, + "name": "reminderState", + "id": 1637, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "specialPriceBrandingPerUser": { + "final": false, + "name": "specialPriceBrandingPerUser", + "id": 1282, + "since": 26, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceBusinessPerUser": { + "final": false, + "name": "specialPriceBusinessPerUser", + "id": 1864, + "since": 68, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceContactFormSingle": { + "final": false, + "name": "specialPriceContactFormSingle", + "id": 1284, + "since": 26, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceSharedGroupSingle": { + "final": false, + "name": "specialPriceSharedGroupSingle", + "id": 1283, + "since": 26, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceSharingPerUser": { + "final": false, + "name": "specialPriceSharingPerUser", + "id": 1627, + "since": 52, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceUserSingle": { + "final": false, + "name": "specialPriceUserSingle", + "id": 758, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "specialPriceUserTotal": { + "final": false, + "name": "specialPriceUserTotal", + "id": 757, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "invoices": { + "final": true, + "name": "invoices", + "id": 760, + "since": 9, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "LegacyInvoice", + "dependency": null + }, + "paymentErrorInfo": { + "final": true, + "name": "paymentErrorInfo", + "id": 1640, + "since": 52, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PaymentErrorInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "InvoiceItem": { + "name": "InvoiceItem", + "since": 52, + "type": "AGGREGATED_TYPE", + "id": 1641, + "rootId": "A3N5cwAGaQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1642, + "since": 52, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "amount": { + "final": true, + "name": "amount", + "id": 1643, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "endDate": { + "final": true, + "name": "endDate", + "id": 1648, + "since": 52, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "singlePrice": { + "final": true, + "name": "singlePrice", + "id": 1645, + "since": 52, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "singleType": { + "final": true, + "name": "singleType", + "id": 1649, + "since": 52, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "startDate": { + "final": true, + "name": "startDate", + "id": 1647, + "since": 52, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "totalPrice": { + "final": true, + "name": "totalPrice", + "id": 1646, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": true, + "name": "type", + "id": 1644, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "KeyPair": { + "name": "KeyPair", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 0, + "rootId": "A3N5cwAA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "pubEccKey": { + "final": true, + "name": "pubEccKey", + "id": 2144, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubKyberKey": { + "final": true, + "name": "pubKyberKey", + "id": 2146, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubRsaKey": { + "final": true, + "name": "pubRsaKey", + "id": 2, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncPrivEccKey": { + "final": true, + "name": "symEncPrivEccKey", + "id": 2145, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncPrivKyberKey": { + "final": true, + "name": "symEncPrivKyberKey", + "id": 2147, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncPrivRsaKey": { + "final": true, + "name": "symEncPrivRsaKey", + "id": 3, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "KeyRotation": { + "name": "KeyRotation", + "since": 96, + "type": "LIST_ELEMENT_TYPE", + "id": 2283, + "rootId": "A3N5cwAI6w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2287, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 2285, + "since": 96, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 2288, + "since": 96, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 2286, + "since": 96, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "groupKeyRotationType": { + "final": true, + "name": "groupKeyRotationType", + "id": 2290, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "targetKeyVersion": { + "final": true, + "name": "targetKeyVersion", + "id": 2289, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "KeyRotationsRef": { + "name": "KeyRotationsRef", + "since": 96, + "type": "AGGREGATED_TYPE", + "id": 2291, + "rootId": "A3N5cwAI8w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2292, + "since": 96, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 2293, + "since": 96, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "KeyRotation", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "LocationServiceGetReturn": { + "name": "LocationServiceGetReturn", + "since": 30, + "type": "DATA_TRANSFER_TYPE", + "id": 1321, + "rootId": "A3N5cwAFKQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1322, + "since": 30, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "country": { + "final": false, + "name": "country", + "id": 1323, + "since": 30, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Login": { + "name": "Login", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 48, + "rootId": "A3N5cwAw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 52, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 50, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 993, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 51, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "time": { + "final": false, + "name": "time", + "id": 53, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "MailAddressAlias": { + "name": "MailAddressAlias", + "since": 8, + "type": "AGGREGATED_TYPE", + "id": 684, + "rootId": "A3N5cwACrA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 685, + "since": 8, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "enabled": { + "final": true, + "name": "enabled", + "id": 784, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 686, + "since": 8, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "MailAddressAliasGetIn": { + "name": "MailAddressAliasGetIn", + "since": 86, + "type": "DATA_TRANSFER_TYPE", + "id": 2095, + "rootId": "A3N5cwAILw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2096, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "targetGroup": { + "final": false, + "name": "targetGroup", + "id": 2097, + "since": 86, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MailAddressAliasServiceData": { + "name": "MailAddressAliasServiceData", + "since": 8, + "type": "DATA_TRANSFER_TYPE", + "id": 688, + "rootId": "A3N5cwACsA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 689, + "since": 8, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 690, + "since": 8, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 691, + "since": 8, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MailAddressAliasServiceDataDelete": { + "name": "MailAddressAliasServiceDataDelete", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 785, + "rootId": "A3N5cwADEQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 786, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 787, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "restore": { + "final": false, + "name": "restore", + "id": 788, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 789, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MailAddressAliasServiceReturn": { + "name": "MailAddressAliasServiceReturn", + "since": 8, + "type": "DATA_TRANSFER_TYPE", + "id": 692, + "rootId": "A3N5cwACtA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 693, + "since": 8, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "enabledAliases": { + "final": false, + "name": "enabledAliases", + "id": 1071, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "nbrOfFreeAliases": { + "final": false, + "name": "nbrOfFreeAliases", + "id": 694, + "since": 8, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "totalAliases": { + "final": false, + "name": "totalAliases", + "id": 1069, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "usedAliases": { + "final": false, + "name": "usedAliases", + "id": 1070, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "MailAddressAvailability": { + "name": "MailAddressAvailability", + "since": 81, + "type": "AGGREGATED_TYPE", + "id": 2026, + "rootId": "A3N5cwAH6g", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2027, + "since": 81, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "available": { + "final": false, + "name": "available", + "id": 2029, + "since": 81, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 2028, + "since": 81, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "MailAddressToGroup": { + "name": "MailAddressToGroup", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 204, + "rootId": "A3N5cwAAzA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 208, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 206, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1019, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 207, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "internalGroup": { + "final": false, + "name": "internalGroup", + "id": 209, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MembershipAddData": { + "name": "MembershipAddData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 505, + "rootId": "A3N5cwAB-Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 506, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "groupKeyVersion": { + "final": false, + "name": "groupKeyVersion", + "id": 2277, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "symEncGKey": { + "final": false, + "name": "symEncGKey", + "id": 507, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": false, + "name": "symKeyVersion", + "id": 2276, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 509, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "user": { + "final": false, + "name": "user", + "id": 508, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MembershipPutIn": { + "name": "MembershipPutIn", + "since": 102, + "type": "DATA_TRANSFER_TYPE", + "id": 2404, + "rootId": "A3N5cwAJZA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2405, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupKeyUpdates": { + "final": false, + "name": "groupKeyUpdates", + "id": 2406, + "since": 102, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupMembershipKeyData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MembershipRemoveData": { + "name": "MembershipRemoveData", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 867, + "rootId": "A3N5cwADYw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 868, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 870, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "user": { + "final": false, + "name": "user", + "id": 869, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MissedNotification": { + "name": "MissedNotification", + "since": 53, + "type": "ELEMENT_TYPE", + "id": 1693, + "rootId": "A3N5cwAGnQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1697, + "since": 53, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1695, + "since": 53, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1699, + "since": 53, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1698, + "since": 53, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2236, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1696, + "since": 53, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "changeTime": { + "final": true, + "name": "changeTime", + "id": 1701, + "since": 53, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "confirmationId": { + "final": true, + "name": "confirmationId", + "id": 1700, + "since": 53, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "lastProcessedNotificationId": { + "final": true, + "name": "lastProcessedNotificationId", + "id": 1722, + "since": 55, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "alarmNotifications": { + "final": false, + "name": "alarmNotifications", + "id": 1703, + "since": 53, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "AlarmNotification", + "dependency": null + }, + "notificationInfos": { + "final": false, + "name": "notificationInfos", + "id": 1702, + "since": 53, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "NotificationInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MultipleMailAddressAvailabilityData": { + "name": "MultipleMailAddressAvailabilityData", + "since": 81, + "type": "DATA_TRANSFER_TYPE", + "id": 2030, + "rootId": "A3N5cwAH7g", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2031, + "since": 81, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mailAddresses": { + "final": false, + "name": "mailAddresses", + "id": 2032, + "since": 81, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "StringWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "MultipleMailAddressAvailabilityReturn": { + "name": "MultipleMailAddressAvailabilityReturn", + "since": 81, + "type": "DATA_TRANSFER_TYPE", + "id": 2033, + "rootId": "A3N5cwAH8Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2034, + "since": 81, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "availabilities": { + "final": false, + "name": "availabilities", + "id": 2035, + "since": 81, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddressAvailability", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "NotificationInfo": { + "name": "NotificationInfo", + "since": 32, + "type": "AGGREGATED_TYPE", + "id": 1364, + "rootId": "A3N5cwAFVA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1365, + "since": 32, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 1366, + "since": 32, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "userId": { + "final": false, + "name": "userId", + "id": 1368, + "since": 32, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mailId": { + "final": true, + "name": "mailId", + "id": 2319, + "since": 99, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "IdTupleWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "NotificationMailTemplate": { + "name": "NotificationMailTemplate", + "since": 45, + "type": "AGGREGATED_TYPE", + "id": 1517, + "rootId": "A3N5cwAF7Q", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1518, + "since": 45, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "body": { + "final": false, + "name": "body", + "id": 1520, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": false, + "name": "language", + "id": 1519, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "subject": { + "final": false, + "name": "subject", + "id": 1521, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "NotificationSessionKey": { + "name": "NotificationSessionKey", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1553, + "rootId": "A3N5cwAGEQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1554, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "pushIdentifierSessionEncSessionKey": { + "final": false, + "name": "pushIdentifierSessionEncSessionKey", + "id": 1556, + "since": 48, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "pushIdentifier": { + "final": false, + "name": "pushIdentifier", + "id": 1555, + "since": 48, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "PushIdentifier", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "OrderProcessingAgreement": { + "name": "OrderProcessingAgreement", + "since": 31, + "type": "LIST_ELEMENT_TYPE", + "id": 1326, + "rootId": "A3N5cwAFLg", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1330, + "since": 31, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1328, + "since": 31, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1332, + "since": 31, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1331, + "since": 31, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2231, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1329, + "since": 31, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "customerAddress": { + "final": false, + "name": "customerAddress", + "id": 1334, + "since": 31, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "signatureDate": { + "final": false, + "name": "signatureDate", + "id": 1335, + "since": 31, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "version": { + "final": false, + "name": "version", + "id": 1333, + "since": 31, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": true, + "name": "customer", + "id": 1337, + "since": 31, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + }, + "signerUserGroupInfo": { + "final": false, + "name": "signerUserGroupInfo", + "id": 1336, + "since": 31, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "OtpChallenge": { + "name": "OtpChallenge", + "since": 24, + "type": "AGGREGATED_TYPE", + "id": 1244, + "rootId": "A3N5cwAE3A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1245, + "since": 24, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "secondFactors": { + "final": false, + "name": "secondFactors", + "id": 1246, + "since": 24, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "SecondFactor", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PaymentDataServiceGetData": { + "name": "PaymentDataServiceGetData", + "since": 67, + "type": "DATA_TRANSFER_TYPE", + "id": 1861, + "rootId": "A3N5cwAHRQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1862, + "since": 67, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "clientType": { + "final": false, + "name": "clientType", + "id": 1863, + "since": 67, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PaymentDataServiceGetReturn": { + "name": "PaymentDataServiceGetReturn", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 790, + "rootId": "A3N5cwADFg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 791, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "loginUrl": { + "final": false, + "name": "loginUrl", + "id": 792, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PaymentDataServicePostData": { + "name": "PaymentDataServicePostData", + "since": 66, + "type": "DATA_TRANSFER_TYPE", + "id": 1837, + "rootId": "A3N5cwAHLQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1838, + "since": 66, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "braintree3dsResponse": { + "final": false, + "name": "braintree3dsResponse", + "id": 1839, + "since": 66, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "Braintree3ds2Response", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PaymentDataServicePutData": { + "name": "PaymentDataServicePutData", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 793, + "rootId": "A3N5cwADGQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 794, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "confirmedCountry": { + "final": false, + "name": "confirmedCountry", + "id": 804, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "invoiceAddress": { + "final": false, + "name": "invoiceAddress", + "id": 797, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "invoiceCountry": { + "final": false, + "name": "invoiceCountry", + "id": 798, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "invoiceName": { + "final": false, + "name": "invoiceName", + "id": 796, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "invoiceVatIdNo": { + "final": false, + "name": "invoiceVatIdNo", + "id": 799, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "paymentInterval": { + "final": false, + "name": "paymentInterval", + "id": 802, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "paymentMethod": { + "final": false, + "name": "paymentMethod", + "id": 800, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "paymentMethodInfo": { + "final": false, + "name": "paymentMethodInfo", + "id": 801, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "paymentToken": { + "final": false, + "name": "paymentToken", + "id": 803, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": { + "creditCard": { + "final": false, + "name": "creditCard", + "id": 1320, + "since": 30, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CreditCard", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PaymentDataServicePutReturn": { + "name": "PaymentDataServicePutReturn", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 805, + "rootId": "A3N5cwADJQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 806, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "result": { + "final": false, + "name": "result", + "id": 807, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "braintree3dsRequest": { + "final": false, + "name": "braintree3dsRequest", + "id": 1840, + "since": 66, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "Braintree3ds2Request", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PaymentErrorInfo": { + "name": "PaymentErrorInfo", + "since": 52, + "type": "AGGREGATED_TYPE", + "id": 1632, + "rootId": "A3N5cwAGYA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1633, + "since": 52, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "errorCode": { + "final": true, + "name": "errorCode", + "id": 1635, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "errorTime": { + "final": true, + "name": "errorTime", + "id": 1634, + "since": 52, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "thirdPartyErrorId": { + "final": true, + "name": "thirdPartyErrorId", + "id": 1636, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Permission": { + "name": "Permission", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 132, + "rootId": "A3N5cwAAhA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 136, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 134, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1003, + "since": 17, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1002, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2242, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 135, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "bucketEncSessionKey": { + "final": false, + "name": "bucketEncSessionKey", + "id": 139, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "listElementApplication": { + "final": false, + "name": "listElementApplication", + "id": 1524, + "since": 46, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "listElementTypeId": { + "final": false, + "name": "listElementTypeId", + "id": 1523, + "since": 46, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "ops": { + "final": false, + "name": "ops", + "id": 140, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symEncSessionKey": { + "final": false, + "name": "symEncSessionKey", + "id": 138, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "symKeyVersion": { + "final": true, + "name": "symKeyVersion", + "id": 2251, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 137, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bucket": { + "final": false, + "name": "bucket", + "id": 142, + "since": 1, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "Bucket", + "dependency": null + }, + "group": { + "final": false, + "name": "group", + "id": 141, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PlanConfiguration": { + "name": "PlanConfiguration", + "since": 87, + "type": "AGGREGATED_TYPE", + "id": 2104, + "rootId": "A3N5cwAIOA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2105, + "since": 87, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "autoResponder": { + "final": true, + "name": "autoResponder", + "id": 2130, + "since": 88, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "contactList": { + "final": true, + "name": "contactList", + "id": 2136, + "since": 90, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "customDomainType": { + "final": true, + "name": "customDomainType", + "id": 2111, + "since": 87, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "eventInvites": { + "final": true, + "name": "eventInvites", + "id": 2109, + "since": 87, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "multiUser": { + "final": true, + "name": "multiUser", + "id": 2112, + "since": 87, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "nbrOfAliases": { + "final": true, + "name": "nbrOfAliases", + "id": 2106, + "since": 87, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "sharing": { + "final": true, + "name": "sharing", + "id": 2108, + "since": 87, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "storageGb": { + "final": true, + "name": "storageGb", + "id": 2107, + "since": 87, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "templates": { + "final": true, + "name": "templates", + "id": 2113, + "since": 87, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "whitelabel": { + "final": true, + "name": "whitelabel", + "id": 2110, + "since": 87, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PlanPrices": { + "name": "PlanPrices", + "since": 39, + "type": "AGGREGATED_TYPE", + "id": 1460, + "rootId": "A3N5cwAFtA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1461, + "since": 39, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "additionalUserPriceMonthly": { + "final": false, + "name": "additionalUserPriceMonthly", + "id": 1465, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "business": { + "final": false, + "name": "business", + "id": 2100, + "since": 86, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "businessPlan": { + "final": false, + "name": "businessPlan", + "id": 2129, + "since": 88, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "customDomains": { + "final": false, + "name": "customDomains", + "id": 2102, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "firstYearDiscount": { + "final": false, + "name": "firstYearDiscount", + "id": 1464, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "includedAliases": { + "final": false, + "name": "includedAliases", + "id": 1467, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "includedStorage": { + "final": false, + "name": "includedStorage", + "id": 1468, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "monthlyPrice": { + "final": false, + "name": "monthlyPrice", + "id": 1463, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "monthlyReferencePrice": { + "final": false, + "name": "monthlyReferencePrice", + "id": 1462, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "planName": { + "final": false, + "name": "planName", + "id": 2128, + "since": 88, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "sharing": { + "final": false, + "name": "sharing", + "id": 2099, + "since": 86, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "whitelabel": { + "final": false, + "name": "whitelabel", + "id": 2101, + "since": 86, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "planConfiguration": { + "final": false, + "name": "planConfiguration", + "id": 2127, + "since": 88, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanConfiguration", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PlanServiceGetOut": { + "name": "PlanServiceGetOut", + "since": 87, + "type": "DATA_TRANSFER_TYPE", + "id": 2115, + "rootId": "A3N5cwAIQw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2116, + "since": 87, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "config": { + "final": false, + "name": "config", + "id": 2117, + "since": 87, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanConfiguration", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PriceData": { + "name": "PriceData", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 853, + "rootId": "A3N5cwADVQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 854, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "paymentInterval": { + "final": false, + "name": "paymentInterval", + "id": 857, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "price": { + "final": false, + "name": "price", + "id": 855, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "taxIncluded": { + "final": false, + "name": "taxIncluded", + "id": 856, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": false, + "name": "items", + "id": 858, + "since": 9, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "PriceItemData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PriceItemData": { + "name": "PriceItemData", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 847, + "rootId": "A3N5cwADTw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 848, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "count": { + "final": false, + "name": "count", + "id": 850, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "featureType": { + "final": false, + "name": "featureType", + "id": 849, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "price": { + "final": false, + "name": "price", + "id": 851, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "singleType": { + "final": false, + "name": "singleType", + "id": 852, + "since": 9, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PriceRequestData": { + "name": "PriceRequestData", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 836, + "rootId": "A3N5cwADRA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 837, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "accountType": { + "final": false, + "name": "accountType", + "id": 842, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "business": { + "final": false, + "name": "business", + "id": 840, + "since": 9, + "type": "Boolean", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "count": { + "final": false, + "name": "count", + "id": 839, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "featureType": { + "final": false, + "name": "featureType", + "id": 838, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "paymentInterval": { + "final": false, + "name": "paymentInterval", + "id": 841, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "reactivate": { + "final": false, + "name": "reactivate", + "id": 1285, + "since": 26, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PriceServiceData": { + "name": "PriceServiceData", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 843, + "rootId": "A3N5cwADSw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 844, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 846, + "since": 9, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "priceRequest": { + "final": false, + "name": "priceRequest", + "id": 845, + "since": 9, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PriceRequestData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PriceServiceReturn": { + "name": "PriceServiceReturn", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 859, + "rootId": "A3N5cwADWw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 860, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "currentPeriodAddedPrice": { + "final": false, + "name": "currentPeriodAddedPrice", + "id": 862, + "since": 9, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "periodEndDate": { + "final": false, + "name": "periodEndDate", + "id": 861, + "since": 9, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "currentPriceNextPeriod": { + "final": false, + "name": "currentPriceNextPeriod", + "id": 864, + "since": 9, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PriceData", + "dependency": null + }, + "currentPriceThisPeriod": { + "final": false, + "name": "currentPriceThisPeriod", + "id": 863, + "since": 9, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PriceData", + "dependency": null + }, + "futurePriceNextPeriod": { + "final": false, + "name": "futurePriceNextPeriod", + "id": 865, + "since": 9, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PriceData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PubEncKeyData": { + "name": "PubEncKeyData", + "since": 102, + "type": "AGGREGATED_TYPE", + "id": 2384, + "rootId": "A3N5cwAJUA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2385, + "since": 102, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 2386, + "since": 102, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "protocolVersion": { + "final": true, + "name": "protocolVersion", + "id": 2390, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEncBucketKey": { + "final": true, + "name": "pubEncBucketKey", + "id": 2387, + "since": 102, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recipientKeyVersion": { + "final": true, + "name": "recipientKeyVersion", + "id": 2388, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "senderKeyVersion": { + "final": true, + "name": "senderKeyVersion", + "id": 2389, + "since": 102, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PublicKeyGetIn": { + "name": "PublicKeyGetIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 409, + "rootId": "A3N5cwABmQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 410, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 411, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "version": { + "final": false, + "name": "version", + "id": 2244, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PublicKeyGetOut": { + "name": "PublicKeyGetOut", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 412, + "rootId": "A3N5cwABnA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 413, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEccKey": { + "final": true, + "name": "pubEccKey", + "id": 2148, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubKeyVersion": { + "final": false, + "name": "pubKeyVersion", + "id": 415, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubKyberKey": { + "final": true, + "name": "pubKyberKey", + "id": 2149, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubRsaKey": { + "final": false, + "name": "pubRsaKey", + "id": 414, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PublicKeyPutIn": { + "name": "PublicKeyPutIn", + "since": 92, + "type": "DATA_TRANSFER_TYPE", + "id": 2150, + "rootId": "A3N5cwAIZg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2151, + "since": 92, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEccKey": { + "final": true, + "name": "pubEccKey", + "id": 2152, + "since": 92, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symEncPrivEccKey": { + "final": true, + "name": "symEncPrivEccKey", + "id": 2153, + "since": 92, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "keyGroup": { + "final": false, + "name": "keyGroup", + "id": 2154, + "since": 92, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "PushIdentifier": { + "name": "PushIdentifier", + "since": 5, + "type": "LIST_ELEMENT_TYPE", + "id": 625, + "rootId": "A3N5cwACcQ", + "versioned": false, + "encrypted": true, + "values": { + "_area": { + "final": true, + "name": "_area", + "id": 631, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_format": { + "final": false, + "name": "_format", + "id": 629, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 627, + "since": 5, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_owner": { + "final": true, + "name": "_owner", + "id": 630, + "since": 5, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1497, + "since": 43, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1029, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2241, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 628, + "since": 5, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "app": { + "final": true, + "name": "app", + "id": 2426, + "since": 105, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "disabled": { + "final": false, + "name": "disabled", + "id": 1476, + "since": 39, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "displayName": { + "final": false, + "name": "displayName", + "id": 1498, + "since": 43, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "identifier": { + "final": false, + "name": "identifier", + "id": 633, + "since": 5, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": false, + "name": "language", + "id": 634, + "since": 5, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "lastNotificationDate": { + "final": false, + "name": "lastNotificationDate", + "id": 1248, + "since": 24, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "lastUsageTime": { + "final": false, + "name": "lastUsageTime", + "id": 1704, + "since": 53, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "pushServiceType": { + "final": true, + "name": "pushServiceType", + "id": 632, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "PushIdentifierList": { + "name": "PushIdentifierList", + "since": 5, + "type": "AGGREGATED_TYPE", + "id": 635, + "rootId": "A3N5cwACew", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 636, + "since": 5, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 637, + "since": 5, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "PushIdentifier", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ReceivedGroupInvitation": { + "name": "ReceivedGroupInvitation", + "since": 52, + "type": "LIST_ELEMENT_TYPE", + "id": 1602, + "rootId": "A3N5cwAGQg", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1606, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1604, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1608, + "since": 52, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1607, + "since": 52, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2234, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1605, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "capability": { + "final": false, + "name": "capability", + "id": 1614, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "groupType": { + "final": true, + "name": "groupType", + "id": 1868, + "since": 68, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "inviteeMailAddress": { + "final": false, + "name": "inviteeMailAddress", + "id": 1613, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "inviterMailAddress": { + "final": false, + "name": "inviterMailAddress", + "id": 1611, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "inviterName": { + "final": false, + "name": "inviterName", + "id": 1612, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "sharedGroupKey": { + "final": false, + "name": "sharedGroupKey", + "id": 1609, + "since": 52, + "type": "Bytes", + "cardinality": "One", + "encrypted": true + }, + "sharedGroupKeyVersion": { + "final": false, + "name": "sharedGroupKeyVersion", + "id": 2280, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupName": { + "final": false, + "name": "sharedGroupName", + "id": 1610, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "sentInvitation": { + "final": false, + "name": "sentInvitation", + "id": 1616, + "since": 52, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "SentGroupInvitation", + "dependency": null + }, + "sharedGroup": { + "final": false, + "name": "sharedGroup", + "id": 1615, + "since": 52, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "RecoverCode": { + "name": "RecoverCode", + "since": 36, + "type": "ELEMENT_TYPE", + "id": 1407, + "rootId": "A3N5cwAFfw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1411, + "since": 36, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1409, + "since": 36, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1412, + "since": 36, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1410, + "since": 36, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeEncUserGroupKey": { + "final": true, + "name": "recoverCodeEncUserGroupKey", + "id": 1414, + "since": 36, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncRecoverCode": { + "final": true, + "name": "userEncRecoverCode", + "id": 1413, + "since": 36, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userKeyVersion": { + "final": true, + "name": "userKeyVersion", + "id": 2281, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": true, + "name": "verifier", + "id": 1415, + "since": 36, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RecoverCodeData": { + "name": "RecoverCodeData", + "since": 101, + "type": "AGGREGATED_TYPE", + "id": 2346, + "rootId": "A3N5cwAJKg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2347, + "since": 101, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "recoveryCodeEncUserGroupKey": { + "final": false, + "name": "recoveryCodeEncUserGroupKey", + "id": 2349, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recoveryCodeVerifier": { + "final": false, + "name": "recoveryCodeVerifier", + "id": 2351, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncRecoveryCode": { + "final": false, + "name": "userEncRecoveryCode", + "id": 2350, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userKeyVersion": { + "final": false, + "name": "userKeyVersion", + "id": 2348, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ReferralCodeGetIn": { + "name": "ReferralCodeGetIn", + "since": 84, + "type": "DATA_TRANSFER_TYPE", + "id": 2062, + "rootId": "A3N5cwAIDg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2063, + "since": 84, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "referralCode": { + "final": false, + "name": "referralCode", + "id": 2064, + "since": 84, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "ReferralCode", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ReferralCodePostIn": { + "name": "ReferralCodePostIn", + "since": 84, + "type": "DATA_TRANSFER_TYPE", + "id": 2065, + "rootId": "A3N5cwAIEQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2066, + "since": 84, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ReferralCodePostOut": { + "name": "ReferralCodePostOut", + "since": 84, + "type": "DATA_TRANSFER_TYPE", + "id": 2067, + "rootId": "A3N5cwAIEw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2068, + "since": 84, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "referralCode": { + "final": false, + "name": "referralCode", + "id": 2069, + "since": 84, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "ReferralCode", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "RegistrationCaptchaServiceData": { + "name": "RegistrationCaptchaServiceData", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 674, + "rootId": "A3N5cwACog", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 675, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "response": { + "final": false, + "name": "response", + "id": 677, + "since": 7, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "token": { + "final": false, + "name": "token", + "id": 676, + "since": 7, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RegistrationCaptchaServiceGetData": { + "name": "RegistrationCaptchaServiceGetData", + "since": 40, + "type": "DATA_TRANSFER_TYPE", + "id": 1479, + "rootId": "A3N5cwAFxw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1480, + "since": 40, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "businessUseSelected": { + "final": false, + "name": "businessUseSelected", + "id": 1752, + "since": 61, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 1482, + "since": 40, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "paidSubscriptionSelected": { + "final": false, + "name": "paidSubscriptionSelected", + "id": 1751, + "since": 61, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "signupToken": { + "final": false, + "name": "signupToken", + "id": 1731, + "since": 58, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "token": { + "final": false, + "name": "token", + "id": 1481, + "since": 40, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RegistrationCaptchaServiceReturn": { + "name": "RegistrationCaptchaServiceReturn", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 678, + "rootId": "A3N5cwACpg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 679, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "challenge": { + "final": false, + "name": "challenge", + "id": 681, + "since": 7, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "token": { + "final": false, + "name": "token", + "id": 680, + "since": 7, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RegistrationReturn": { + "name": "RegistrationReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 326, + "rootId": "A3N5cwABRg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 327, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authToken": { + "final": false, + "name": "authToken", + "id": 328, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RegistrationServiceData": { + "name": "RegistrationServiceData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 316, + "rootId": "A3N5cwABPA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 317, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "source": { + "final": false, + "name": "source", + "id": 874, + "since": 9, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "starterDomain": { + "final": false, + "name": "starterDomain", + "id": 322, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "state": { + "final": false, + "name": "state", + "id": 325, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RejectedSender": { + "name": "RejectedSender", + "since": 60, + "type": "LIST_ELEMENT_TYPE", + "id": 1736, + "rootId": "A3N5cwAGyA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1740, + "since": 60, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1738, + "since": 60, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1741, + "since": 60, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1739, + "since": 60, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "reason": { + "final": true, + "name": "reason", + "id": 1746, + "since": 60, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recipientMailAddress": { + "final": true, + "name": "recipientMailAddress", + "id": 1745, + "since": 60, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "senderHostname": { + "final": true, + "name": "senderHostname", + "id": 1744, + "since": 60, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "senderIp": { + "final": true, + "name": "senderIp", + "id": 1743, + "since": 60, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "senderMailAddress": { + "final": true, + "name": "senderMailAddress", + "id": 1742, + "since": 60, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "RejectedSendersRef": { + "name": "RejectedSendersRef", + "since": 60, + "type": "AGGREGATED_TYPE", + "id": 1747, + "rootId": "A3N5cwAG0w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1748, + "since": 60, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1749, + "since": 60, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "RejectedSender", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "RepeatRule": { + "name": "RepeatRule", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1557, + "rootId": "A3N5cwAGFQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1558, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "endType": { + "final": false, + "name": "endType", + "id": 1560, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "endValue": { + "final": false, + "name": "endValue", + "id": 1561, + "since": 48, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "frequency": { + "final": false, + "name": "frequency", + "id": 1559, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "interval": { + "final": false, + "name": "interval", + "id": 1562, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "timeZone": { + "final": false, + "name": "timeZone", + "id": 1563, + "since": 48, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "excludedDates": { + "final": true, + "name": "excludedDates", + "id": 2076, + "since": 85, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DateWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "ResetFactorsDeleteData": { + "name": "ResetFactorsDeleteData", + "since": 36, + "type": "DATA_TRANSFER_TYPE", + "id": 1419, + "rootId": "A3N5cwAFiw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1420, + "since": 36, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authVerifier": { + "final": true, + "name": "authVerifier", + "id": 1422, + "since": 36, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 1421, + "since": 36, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeVerifier": { + "final": true, + "name": "recoverCodeVerifier", + "id": 1423, + "since": 36, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "ResetPasswordPostIn": { + "name": "ResetPasswordPostIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 584, + "rootId": "A3N5cwACSA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 585, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 2135, + "since": 89, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pwEncUserGroupKey": { + "final": false, + "name": "pwEncUserGroupKey", + "id": 588, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "salt": { + "final": false, + "name": "salt", + "id": 587, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 2409, + "since": 102, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": false, + "name": "verifier", + "id": 586, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "user": { + "final": false, + "name": "user", + "id": 589, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "RootInstance": { + "name": "RootInstance", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 231, + "rootId": "A3N5cwAA5w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 235, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 233, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1022, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 234, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "reference": { + "final": false, + "name": "reference", + "id": 236, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SaltData": { + "name": "SaltData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 417, + "rootId": "A3N5cwABoQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 418, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 419, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SaltReturn": { + "name": "SaltReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 420, + "rootId": "A3N5cwABpA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 421, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 2133, + "since": 89, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "salt": { + "final": false, + "name": "salt", + "id": 422, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SecondFactor": { + "name": "SecondFactor", + "since": 23, + "type": "LIST_ELEMENT_TYPE", + "id": 1169, + "rootId": "A3N5cwAEkQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1173, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1171, + "since": 23, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1174, + "since": 23, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1172, + "since": 23, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 1176, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "otpSecret": { + "final": true, + "name": "otpSecret", + "id": 1242, + "since": 24, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 1175, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "u2f": { + "final": true, + "name": "u2f", + "id": 1177, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "U2fRegisteredDevice", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthAllowedReturn": { + "name": "SecondFactorAuthAllowedReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 546, + "rootId": "A3N5cwACIg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 547, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "allowed": { + "final": false, + "name": "allowed", + "id": 548, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthData": { + "name": "SecondFactorAuthData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 541, + "rootId": "A3N5cwACHQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 542, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "otpCode": { + "final": true, + "name": "otpCode", + "id": 1243, + "since": 24, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 1230, + "since": 23, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "session": { + "final": true, + "name": "session", + "id": 1232, + "since": 23, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Session", + "dependency": null + }, + "u2f": { + "final": true, + "name": "u2f", + "id": 1231, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "U2fResponseData", + "dependency": null + }, + "webauthn": { + "final": true, + "name": "webauthn", + "id": 1905, + "since": 71, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "WebauthnResponseData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthDeleteData": { + "name": "SecondFactorAuthDeleteData", + "since": 62, + "type": "DATA_TRANSFER_TYPE", + "id": 1755, + "rootId": "A3N5cwAG2w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1756, + "since": 62, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "session": { + "final": true, + "name": "session", + "id": 1757, + "since": 62, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Session", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthGetData": { + "name": "SecondFactorAuthGetData", + "since": 23, + "type": "DATA_TRANSFER_TYPE", + "id": 1233, + "rootId": "A3N5cwAE0Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1234, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accessToken": { + "final": true, + "name": "accessToken", + "id": 1235, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthGetReturn": { + "name": "SecondFactorAuthGetReturn", + "since": 23, + "type": "DATA_TRANSFER_TYPE", + "id": 1236, + "rootId": "A3N5cwAE1A", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1237, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "secondFactorPending": { + "final": true, + "name": "secondFactorPending", + "id": 1238, + "since": 23, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SecondFactorAuthentication": { + "name": "SecondFactorAuthentication", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 54, + "rootId": "A3N5cwA2", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 58, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 56, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 994, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 57, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "code": { + "final": false, + "name": "code", + "id": 59, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "finished": { + "final": false, + "name": "finished", + "id": 61, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "service": { + "final": false, + "name": "service", + "id": 62, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "verifyCount": { + "final": false, + "name": "verifyCount", + "id": 60, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SendRegistrationCodeData": { + "name": "SendRegistrationCodeData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 341, + "rootId": "A3N5cwABVQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 342, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accountType": { + "final": false, + "name": "accountType", + "id": 345, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authToken": { + "final": false, + "name": "authToken", + "id": 343, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": false, + "name": "language", + "id": 344, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mobilePhoneNumber": { + "final": false, + "name": "mobilePhoneNumber", + "id": 346, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SendRegistrationCodeReturn": { + "name": "SendRegistrationCodeReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 347, + "rootId": "A3N5cwABWw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 348, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authToken": { + "final": false, + "name": "authToken", + "id": 349, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SentGroupInvitation": { + "name": "SentGroupInvitation", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 195, + "rootId": "A3N5cwAAww", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 199, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 197, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1018, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 198, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "capability": { + "final": false, + "name": "capability", + "id": 1601, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "inviteeMailAddress": { + "final": false, + "name": "inviteeMailAddress", + "id": 1600, + "since": 52, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "receivedInvitation": { + "final": false, + "name": "receivedInvitation", + "id": 1617, + "since": 52, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ReceivedGroupInvitation", + "dependency": null + }, + "sharedGroup": { + "final": false, + "name": "sharedGroup", + "id": 203, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "Session": { + "name": "Session", + "since": 23, + "type": "LIST_ELEMENT_TYPE", + "id": 1191, + "rootId": "A3N5cwAEpw", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1195, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1193, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1197, + "since": 23, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1196, + "since": 23, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2229, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1194, + "since": 23, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "accessKey": { + "final": true, + "name": "accessKey", + "id": 1202, + "since": 23, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "clientIdentifier": { + "final": false, + "name": "clientIdentifier", + "id": 1198, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "lastAccessTime": { + "final": true, + "name": "lastAccessTime", + "id": 1201, + "since": 23, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "loginIpAddress": { + "final": true, + "name": "loginIpAddress", + "id": 1200, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "loginTime": { + "final": true, + "name": "loginTime", + "id": 1199, + "since": 23, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "state": { + "final": true, + "name": "state", + "id": 1203, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "challenges": { + "final": true, + "name": "challenges", + "id": 1204, + "since": 23, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Challenge", + "dependency": null + }, + "user": { + "final": true, + "name": "user", + "id": 1205, + "since": 23, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "SignOrderProcessingAgreementData": { + "name": "SignOrderProcessingAgreementData", + "since": 31, + "type": "DATA_TRANSFER_TYPE", + "id": 1342, + "rootId": "A3N5cwAFPg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1343, + "since": 31, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "customerAddress": { + "final": false, + "name": "customerAddress", + "id": 1345, + "since": 31, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "version": { + "final": false, + "name": "version", + "id": 1344, + "since": 31, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SseConnectData": { + "name": "SseConnectData", + "since": 32, + "type": "DATA_TRANSFER_TYPE", + "id": 1352, + "rootId": "A3N5cwAFSA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1353, + "since": 32, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "identifier": { + "final": true, + "name": "identifier", + "id": 1354, + "since": 32, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "userIds": { + "final": false, + "name": "userIds", + "id": 1355, + "since": 32, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GeneratedIdWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "StringConfigValue": { + "name": "StringConfigValue", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 515, + "rootId": "A3N5cwACAw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 516, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 517, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 518, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "StringWrapper": { + "name": "StringWrapper", + "since": 9, + "type": "AGGREGATED_TYPE", + "id": 728, + "rootId": "A3N5cwAC2A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 729, + "since": 9, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 730, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SurveyData": { + "name": "SurveyData", + "since": 98, + "type": "AGGREGATED_TYPE", + "id": 2295, + "rootId": "A3N5cwAI9w", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2296, + "since": 98, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "category": { + "final": true, + "name": "category", + "id": 2297, + "since": 98, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "details": { + "final": true, + "name": "details", + "id": 2299, + "since": 98, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "reason": { + "final": true, + "name": "reason", + "id": 2298, + "since": 98, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "version": { + "final": true, + "name": "version", + "id": 2300, + "since": 98, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "SwitchAccountTypePostIn": { + "name": "SwitchAccountTypePostIn", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 772, + "rootId": "A3N5cwADBA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 773, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accountType": { + "final": false, + "name": "accountType", + "id": 774, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "customer": { + "final": false, + "name": "customer", + "id": 2123, + "since": 87, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 775, + "since": 9, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "plan": { + "final": false, + "name": "plan", + "id": 1310, + "since": 30, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "specialPriceUserSingle": { + "final": false, + "name": "specialPriceUserSingle", + "id": 2124, + "since": 87, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "referralCode": { + "final": false, + "name": "referralCode", + "id": 2071, + "since": 84, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ReferralCode", + "dependency": null + }, + "surveyData": { + "final": false, + "name": "surveyData", + "id": 2314, + "since": 98, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "SurveyData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "SystemKeysReturn": { + "name": "SystemKeysReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 301, + "rootId": "A3N5cwABLQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 302, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "freeGroupKey": { + "final": false, + "name": "freeGroupKey", + "id": 305, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "freeGroupKeyVersion": { + "final": false, + "name": "freeGroupKeyVersion", + "id": 2278, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "premiumGroupKey": { + "final": false, + "name": "premiumGroupKey", + "id": 306, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "premiumGroupKeyVersion": { + "final": false, + "name": "premiumGroupKeyVersion", + "id": 2279, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPubEccKey": { + "final": false, + "name": "systemAdminPubEccKey", + "id": 2155, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "systemAdminPubKeyVersion": { + "final": false, + "name": "systemAdminPubKeyVersion", + "id": 304, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPubKyberKey": { + "final": false, + "name": "systemAdminPubKyberKey", + "id": 2156, + "since": 92, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "systemAdminPubRsaKey": { + "final": false, + "name": "systemAdminPubRsaKey", + "id": 303, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "freeGroup": { + "final": false, + "name": "freeGroup", + "id": 880, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + }, + "premiumGroup": { + "final": false, + "name": "premiumGroup", + "id": 881, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "TakeOverDeletedAddressData": { + "name": "TakeOverDeletedAddressData", + "since": 63, + "type": "DATA_TRANSFER_TYPE", + "id": 1759, + "rootId": "A3N5cwAG3w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1760, + "since": 63, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authVerifier": { + "final": false, + "name": "authVerifier", + "id": 1762, + "since": 63, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 1761, + "since": 63, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeVerifier": { + "final": false, + "name": "recoverCodeVerifier", + "id": 1763, + "since": 63, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "targetAccountMailAddress": { + "final": false, + "name": "targetAccountMailAddress", + "id": 1764, + "since": 63, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "TypeInfo": { + "name": "TypeInfo", + "since": 69, + "type": "AGGREGATED_TYPE", + "id": 1869, + "rootId": "A3N5cwAHTQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1870, + "since": 69, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "application": { + "final": false, + "name": "application", + "id": 1871, + "since": 69, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "typeId": { + "final": false, + "name": "typeId", + "id": 1872, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "U2fChallenge": { + "name": "U2fChallenge", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1183, + "rootId": "A3N5cwAEnw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1184, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "challenge": { + "final": true, + "name": "challenge", + "id": 1185, + "since": 23, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "keys": { + "final": true, + "name": "keys", + "id": 1186, + "since": 23, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "U2fKey", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "U2fKey": { + "name": "U2fKey", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1178, + "rootId": "A3N5cwAEmg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1179, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "appId": { + "final": true, + "name": "appId", + "id": 1181, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "keyHandle": { + "final": true, + "name": "keyHandle", + "id": 1180, + "since": 23, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "secondFactor": { + "final": false, + "name": "secondFactor", + "id": 1182, + "since": 23, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "SecondFactor", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "U2fRegisteredDevice": { + "name": "U2fRegisteredDevice", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1162, + "rootId": "A3N5cwAEig", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1163, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "appId": { + "final": true, + "name": "appId", + "id": 1165, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "compromised": { + "final": true, + "name": "compromised", + "id": 1168, + "since": 23, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "counter": { + "final": true, + "name": "counter", + "id": 1167, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "keyHandle": { + "final": true, + "name": "keyHandle", + "id": 1164, + "since": 23, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "publicKey": { + "final": true, + "name": "publicKey", + "id": 1166, + "since": 23, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "U2fResponseData": { + "name": "U2fResponseData", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1225, + "rootId": "A3N5cwAEyQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1226, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "clientData": { + "final": true, + "name": "clientData", + "id": 1228, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "keyHandle": { + "final": true, + "name": "keyHandle", + "id": 1227, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "signatureData": { + "final": true, + "name": "signatureData", + "id": 1229, + "since": 23, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "UpdatePermissionKeyData": { + "name": "UpdatePermissionKeyData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 445, + "rootId": "A3N5cwABvQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 446, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "ownerEncSessionKey": { + "final": false, + "name": "ownerEncSessionKey", + "id": 1031, + "since": 17, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": false, + "name": "ownerKeyVersion", + "id": 2245, + "since": 96, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bucketPermission": { + "final": false, + "name": "bucketPermission", + "id": 451, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "BucketPermission", + "dependency": null + }, + "permission": { + "final": false, + "name": "permission", + "id": 450, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Permission", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UpdateSessionKeysPostIn": { + "name": "UpdateSessionKeysPostIn", + "since": 82, + "type": "DATA_TRANSFER_TYPE", + "id": 2049, + "rootId": "A3N5cwAIAQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2050, + "since": 82, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "ownerEncSessionKeys": { + "final": false, + "name": "ownerEncSessionKeys", + "id": 2051, + "since": 82, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InstanceSessionKey", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UpgradePriceServiceData": { + "name": "UpgradePriceServiceData", + "since": 39, + "type": "DATA_TRANSFER_TYPE", + "id": 1456, + "rootId": "A3N5cwAFsA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1457, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "campaign": { + "final": false, + "name": "campaign", + "id": 1459, + "since": 39, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 1458, + "since": 39, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "referralCode": { + "final": false, + "name": "referralCode", + "id": 2077, + "since": 86, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ReferralCode", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UpgradePriceServiceReturn": { + "name": "UpgradePriceServiceReturn", + "since": 39, + "type": "DATA_TRANSFER_TYPE", + "id": 1469, + "rootId": "A3N5cwAFvQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1470, + "since": 39, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "bonusMonthsForYearlyPlan": { + "final": false, + "name": "bonusMonthsForYearlyPlan", + "id": 2084, + "since": 86, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "business": { + "final": false, + "name": "business", + "id": 1472, + "since": 39, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "messageTextId": { + "final": false, + "name": "messageTextId", + "id": 1471, + "since": 39, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "advancedPrices": { + "final": false, + "name": "advancedPrices", + "id": 2082, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "essentialPrices": { + "final": false, + "name": "essentialPrices", + "id": 2081, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "freePrices": { + "final": false, + "name": "freePrices", + "id": 2078, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "legendaryPrices": { + "final": false, + "name": "legendaryPrices", + "id": 2080, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "plans": { + "final": false, + "name": "plans", + "id": 2131, + "since": 88, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "PlanPrices", + "dependency": null + }, + "premiumBusinessPrices": { + "final": false, + "name": "premiumBusinessPrices", + "id": 1866, + "since": 68, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "premiumPrices": { + "final": false, + "name": "premiumPrices", + "id": 1473, + "since": 39, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "proPrices": { + "final": false, + "name": "proPrices", + "id": 1474, + "since": 39, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "revolutionaryPrices": { + "final": false, + "name": "revolutionaryPrices", + "id": 2079, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "teamsBusinessPrices": { + "final": false, + "name": "teamsBusinessPrices", + "id": 1867, + "since": 68, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "teamsPrices": { + "final": false, + "name": "teamsPrices", + "id": 1729, + "since": 57, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + }, + "unlimitedPrices": { + "final": false, + "name": "unlimitedPrices", + "id": 2083, + "since": 86, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "PlanPrices", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "User": { + "name": "User", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 84, + "rootId": "A3N5cwBU", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 88, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 86, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 996, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 87, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "accountType": { + "final": true, + "name": "accountType", + "id": 92, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "enabled": { + "final": true, + "name": "enabled", + "id": 93, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": true, + "name": "kdfVersion", + "id": 2132, + "since": 89, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "requirePasswordUpdate": { + "final": true, + "name": "requirePasswordUpdate", + "id": 1117, + "since": 22, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "salt": { + "final": true, + "name": "salt", + "id": 90, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "verifier": { + "final": true, + "name": "verifier", + "id": 91, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "alarmInfoList": { + "final": false, + "name": "alarmInfoList", + "id": 1552, + "since": 48, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "UserAlarmInfoListType", + "dependency": null + }, + "auth": { + "final": true, + "name": "auth", + "id": 1210, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "UserAuthentication", + "dependency": null + }, + "authenticatedDevices": { + "final": true, + "name": "authenticatedDevices", + "id": 97, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "AuthenticatedDevice", + "dependency": null + }, + "customer": { + "final": true, + "name": "customer", + "id": 99, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Customer", + "dependency": null + }, + "externalAuthInfo": { + "final": true, + "name": "externalAuthInfo", + "id": 98, + "since": 1, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "UserExternalAuthInfo", + "dependency": null + }, + "failedLogins": { + "final": true, + "name": "failedLogins", + "id": 101, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Login", + "dependency": null + }, + "memberships": { + "final": true, + "name": "memberships", + "id": 96, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupMembership", + "dependency": null + }, + "pushIdentifierList": { + "final": false, + "name": "pushIdentifierList", + "id": 638, + "since": 5, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PushIdentifierList", + "dependency": null + }, + "secondFactorAuthentications": { + "final": true, + "name": "secondFactorAuthentications", + "id": 102, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "SecondFactorAuthentication", + "dependency": null + }, + "successfulLogins": { + "final": true, + "name": "successfulLogins", + "id": 100, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Login", + "dependency": null + }, + "userGroup": { + "final": true, + "name": "userGroup", + "id": 95, + "since": 1, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "GroupMembership", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserAlarmInfo": { + "name": "UserAlarmInfo", + "since": 48, + "type": "LIST_ELEMENT_TYPE", + "id": 1541, + "rootId": "A3N5cwAGBQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1545, + "since": 48, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1543, + "since": 48, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1547, + "since": 48, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1546, + "since": 48, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2233, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1544, + "since": 48, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "alarmInfo": { + "final": false, + "name": "alarmInfo", + "id": 1548, + "since": 48, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "AlarmInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserAlarmInfoListType": { + "name": "UserAlarmInfoListType", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1549, + "rootId": "A3N5cwAGDQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1550, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "alarms": { + "final": true, + "name": "alarms", + "id": 1551, + "since": 48, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "UserAlarmInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserAreaGroups": { + "name": "UserAreaGroups", + "since": 17, + "type": "AGGREGATED_TYPE", + "id": 988, + "rootId": "A3N5cwAD3A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 989, + "since": 17, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 990, + "since": 17, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserAuthentication": { + "name": "UserAuthentication", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 1206, + "rootId": "A3N5cwAEtg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1207, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "recoverCode": { + "final": false, + "name": "recoverCode", + "id": 1416, + "since": 36, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "RecoverCode", + "dependency": null + }, + "secondFactors": { + "final": true, + "name": "secondFactors", + "id": 1209, + "since": 23, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "SecondFactor", + "dependency": null + }, + "sessions": { + "final": true, + "name": "sessions", + "id": 1208, + "since": 23, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Session", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserDataDelete": { + "name": "UserDataDelete", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 404, + "rootId": "A3N5cwABlA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 405, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 879, + "since": 9, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "restore": { + "final": false, + "name": "restore", + "id": 406, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "user": { + "final": false, + "name": "user", + "id": 407, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "User", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserExternalAuthInfo": { + "name": "UserExternalAuthInfo", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 77, + "rootId": "A3N5cwBN", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 78, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "authUpdateCounter": { + "final": false, + "name": "authUpdateCounter", + "id": 82, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "autoAuthenticationId": { + "final": true, + "name": "autoAuthenticationId", + "id": 79, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "autoTransmitPassword": { + "final": false, + "name": "autoTransmitPassword", + "id": 81, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "latestSaltHash": { + "final": false, + "name": "latestSaltHash", + "id": 80, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "variableAuthInfo": { + "final": true, + "name": "variableAuthInfo", + "id": 83, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "VariableExternalAuthInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserGroupKeyDistribution": { + "name": "UserGroupKeyDistribution", + "since": 101, + "type": "ELEMENT_TYPE", + "id": 2320, + "rootId": "A3N5cwAJEA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 2324, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 2322, + "since": 101, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 2325, + "since": 101, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 2323, + "since": 101, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "distributionEncUserGroupKey": { + "final": true, + "name": "distributionEncUserGroupKey", + "id": 2326, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": true, + "name": "userGroupKeyVersion", + "id": 2327, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "UserGroupKeyRotationData": { + "name": "UserGroupKeyRotationData", + "since": 101, + "type": "AGGREGATED_TYPE", + "id": 2352, + "rootId": "A3N5cwAJMA", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 2353, + "since": 101, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "adminGroupEncUserGroupKey": { + "final": false, + "name": "adminGroupEncUserGroupKey", + "id": 2359, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "adminGroupKeyVersion": { + "final": false, + "name": "adminGroupKeyVersion", + "id": 2360, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authVerifier": { + "final": false, + "name": "authVerifier", + "id": 2362, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "distributionKeyEncUserGroupKey": { + "final": false, + "name": "distributionKeyEncUserGroupKey", + "id": 2355, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "passphraseEncUserGroupKey": { + "final": false, + "name": "passphraseEncUserGroupKey", + "id": 2354, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupEncPreviousGroupKey": { + "final": false, + "name": "userGroupEncPreviousGroupKey", + "id": 2357, + "since": 101, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 2356, + "since": 101, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 2361, + "since": 101, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "keyPair": { + "final": false, + "name": "keyPair", + "id": 2358, + "since": 101, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "KeyPair", + "dependency": null + }, + "recoverCodeData": { + "final": false, + "name": "recoverCodeData", + "id": 2363, + "since": 101, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "RecoverCodeData", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "UserGroupRoot": { + "name": "UserGroupRoot", + "since": 52, + "type": "ELEMENT_TYPE", + "id": 1618, + "rootId": "A3N5cwAGUg", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1622, + "since": 52, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1620, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1623, + "since": 52, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1621, + "since": 52, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupKeyUpdates": { + "final": false, + "name": "groupKeyUpdates", + "id": 2383, + "since": 102, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "GroupKeyUpdatesRef", + "dependency": null + }, + "invitations": { + "final": true, + "name": "invitations", + "id": 1624, + "since": 52, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "ReceivedGroupInvitation", + "dependency": null + }, + "keyRotations": { + "final": false, + "name": "keyRotations", + "id": 2294, + "since": 96, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "KeyRotationsRef", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "VariableExternalAuthInfo": { + "name": "VariableExternalAuthInfo", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 66, + "rootId": "A3N5cwBC", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 70, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 68, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 995, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 69, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "authUpdateCounter": { + "final": false, + "name": "authUpdateCounter", + "id": 76, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "lastSentTimestamp": { + "final": false, + "name": "lastSentTimestamp", + "id": 75, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "loggedInIpAddressHash": { + "final": false, + "name": "loggedInIpAddressHash", + "id": 73, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "loggedInTimestamp": { + "final": false, + "name": "loggedInTimestamp", + "id": 72, + "since": 1, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "loggedInVerifier": { + "final": false, + "name": "loggedInVerifier", + "id": 71, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "sentCount": { + "final": false, + "name": "sentCount", + "id": 74, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "VerifyRegistrationCodeData": { + "name": "VerifyRegistrationCodeData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 351, + "rootId": "A3N5cwABXw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 352, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "authToken": { + "final": false, + "name": "authToken", + "id": 353, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "code": { + "final": false, + "name": "code", + "id": 354, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "Version": { + "name": "Version", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 480, + "rootId": "A3N5cwAB4A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 481, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "operation": { + "final": false, + "name": "operation", + "id": 484, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "timestamp": { + "final": false, + "name": "timestamp", + "id": 483, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "version": { + "final": false, + "name": "version", + "id": 482, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "author": { + "final": false, + "name": "author", + "id": 485, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "authorGroupInfo": { + "final": false, + "name": "authorGroupInfo", + "id": 486, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "VersionData": { + "name": "VersionData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 487, + "rootId": "A3N5cwAB5w", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 488, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "application": { + "final": false, + "name": "application", + "id": 489, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "id": { + "final": false, + "name": "id", + "id": 491, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "listId": { + "final": false, + "name": "listId", + "id": 492, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "typeId": { + "final": false, + "name": "typeId", + "id": 490, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "VersionInfo": { + "name": "VersionInfo", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 237, + "rootId": "A3N5cwAA7Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 241, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 239, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1023, + "since": 17, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 240, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "app": { + "final": false, + "name": "app", + "id": 242, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "operation": { + "final": false, + "name": "operation", + "id": 246, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "referenceList": { + "final": false, + "name": "referenceList", + "id": 244, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "timestamp": { + "final": false, + "name": "timestamp", + "id": 245, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 243, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "versionData": { + "final": false, + "name": "versionData", + "id": 247, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "author": { + "final": false, + "name": "author", + "id": 248, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + }, + "authorGroupInfo": { + "final": true, + "name": "authorGroupInfo", + "id": 249, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "GroupInfo", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "VersionReturn": { + "name": "VersionReturn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 493, + "rootId": "A3N5cwAB7Q", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 494, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "versions": { + "final": false, + "name": "versions", + "id": 495, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Version", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WebauthnResponseData": { + "name": "WebauthnResponseData", + "since": 71, + "type": "AGGREGATED_TYPE", + "id": 1899, + "rootId": "A3N5cwAHaw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1900, + "since": 71, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "authenticatorData": { + "final": true, + "name": "authenticatorData", + "id": 1903, + "since": 71, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "clientData": { + "final": true, + "name": "clientData", + "id": 1902, + "since": 71, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "keyHandle": { + "final": true, + "name": "keyHandle", + "id": 1901, + "since": 71, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "signature": { + "final": true, + "name": "signature", + "id": 1904, + "since": 71, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "WebsocketCounterData": { + "name": "WebsocketCounterData", + "since": 41, + "type": "DATA_TRANSFER_TYPE", + "id": 1492, + "rootId": "A3N5cwAF1A", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1493, + "since": 41, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailGroup": { + "final": false, + "name": "mailGroup", + "id": 1494, + "since": 41, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "counterValues": { + "final": false, + "name": "counterValues", + "id": 1495, + "since": 41, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "WebsocketCounterValue", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WebsocketCounterValue": { + "name": "WebsocketCounterValue", + "since": 41, + "type": "AGGREGATED_TYPE", + "id": 1488, + "rootId": "A3N5cwAF0A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1489, + "since": 41, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "count": { + "final": false, + "name": "count", + "id": 1491, + "since": 41, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "counterId": { + "final": false, + "name": "counterId", + "id": 1490, + "since": 41, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "WebsocketEntityData": { + "name": "WebsocketEntityData", + "since": 41, + "type": "DATA_TRANSFER_TYPE", + "id": 1483, + "rootId": "A3N5cwAFyw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1484, + "since": 41, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "eventBatchId": { + "final": false, + "name": "eventBatchId", + "id": 1485, + "since": 41, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "eventBatchOwner": { + "final": false, + "name": "eventBatchOwner", + "id": 1486, + "since": 41, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "eventBatch": { + "final": false, + "name": "eventBatch", + "id": 1487, + "since": 41, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EntityUpdate", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WebsocketLeaderStatus": { + "name": "WebsocketLeaderStatus", + "since": 64, + "type": "DATA_TRANSFER_TYPE", + "id": 1766, + "rootId": "A3N5cwAG5g", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1767, + "since": 64, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "leaderStatus": { + "final": false, + "name": "leaderStatus", + "id": 1768, + "since": 64, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "sys", + "version": "107" + }, + "WhitelabelChild": { + "name": "WhitelabelChild", + "since": 26, + "type": "LIST_ELEMENT_TYPE", + "id": 1257, + "rootId": "A3N5cwAE6Q", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1261, + "since": 26, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1259, + "since": 26, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1263, + "since": 26, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1262, + "since": 26, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 2230, + "since": 96, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1260, + "since": 26, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "comment": { + "final": false, + "name": "comment", + "id": 1267, + "since": 26, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "createdDate": { + "final": true, + "name": "createdDate", + "id": 1265, + "since": 26, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "deletedDate": { + "final": false, + "name": "deletedDate", + "id": 1266, + "since": 26, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 1264, + "since": 26, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": true, + "name": "customer", + "id": 1268, + "since": 26, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WhitelabelChildrenRef": { + "name": "WhitelabelChildrenRef", + "since": 26, + "type": "AGGREGATED_TYPE", + "id": 1269, + "rootId": "A3N5cwAE9Q", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1270, + "since": 26, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "items": { + "final": true, + "name": "items", + "id": 1271, + "since": 26, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "WhitelabelChild", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WhitelabelConfig": { + "name": "WhitelabelConfig", + "since": 22, + "type": "ELEMENT_TYPE", + "id": 1127, + "rootId": "A3N5cwAEZw", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1131, + "since": 22, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1129, + "since": 22, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1132, + "since": 22, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1130, + "since": 22, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "germanLanguageCode": { + "final": false, + "name": "germanLanguageCode", + "id": 1308, + "since": 28, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "imprintUrl": { + "final": false, + "name": "imprintUrl", + "id": 1425, + "since": 37, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "jsonTheme": { + "final": false, + "name": "jsonTheme", + "id": 1133, + "since": 22, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "metaTags": { + "final": false, + "name": "metaTags", + "id": 1281, + "since": 26, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "privacyStatementUrl": { + "final": false, + "name": "privacyStatementUrl", + "id": 1496, + "since": 42, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "whitelabelCode": { + "final": false, + "name": "whitelabelCode", + "id": 1727, + "since": 56, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bootstrapCustomizations": { + "final": false, + "name": "bootstrapCustomizations", + "id": 1252, + "since": 24, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BootstrapFeature", + "dependency": null + }, + "certificateInfo": { + "final": false, + "name": "certificateInfo", + "id": 1506, + "since": 44, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CertificateInfo", + "dependency": null + }, + "whitelabelRegistrationDomains": { + "final": false, + "name": "whitelabelRegistrationDomains", + "id": 1728, + "since": 56, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "StringWrapper", + "dependency": null + } + }, + "app": "sys", + "version": "107" + }, + "WhitelabelParent": { + "name": "WhitelabelParent", + "since": 26, + "type": "AGGREGATED_TYPE", + "id": 1272, + "rootId": "A3N5cwAE-A", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1273, + "since": 26, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "customer": { + "final": true, + "name": "customer", + "id": 1274, + "since": 26, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Customer", + "dependency": null + }, + "whitelabelChildInParent": { + "final": true, + "name": "whitelabelChildInParent", + "id": 1275, + "since": 26, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "WhitelabelChild", + "dependency": null + } + }, + "app": "sys", + "version": "107" + } +} diff --git a/tuta-sdk/rust/src/type_models/tutanota.json b/tuta-sdk/rust/src/type_models/tutanota.json new file mode 100644 index 000000000000..dbc4cf2eb977 --- /dev/null +++ b/tuta-sdk/rust/src/type_models/tutanota.json @@ -0,0 +1,8033 @@ +{ + "AttachmentKeyData": { + "name": "AttachmentKeyData", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 542, + "rootId": "CHR1dGFub3RhAAIe", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 543, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bucketEncFileSessionKey": { + "final": true, + "name": "bucketEncFileSessionKey", + "id": 544, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "fileSessionKey": { + "final": true, + "name": "fileSessionKey", + "id": 545, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "file": { + "final": true, + "name": "file", + "id": 546, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "Birthday": { + "name": "Birthday", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 844, + "rootId": "CHR1dGFub3RhAANM", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 845, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "day": { + "final": false, + "name": "day", + "id": 846, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "month": { + "final": false, + "name": "month", + "id": 847, + "since": 23, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "year": { + "final": false, + "name": "year", + "id": 848, + "since": 23, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "Body": { + "name": "Body", + "since": 58, + "type": "AGGREGATED_TYPE", + "id": 1273, + "rootId": "CHR1dGFub3RhAAT5", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1274, + "since": 58, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "compressedText": { + "final": true, + "name": "compressedText", + "id": 1276, + "since": 58, + "type": "CompressedString", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "text": { + "final": true, + "name": "text", + "id": 1275, + "since": 58, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "CalendarDeleteData": { + "name": "CalendarDeleteData", + "since": 34, + "type": "DATA_TRANSFER_TYPE", + "id": 982, + "rootId": "CHR1dGFub3RhAAPW", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 983, + "since": 34, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupRootId": { + "final": false, + "name": "groupRootId", + "id": 984, + "since": 34, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "CalendarGroupRoot", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEvent": { + "name": "CalendarEvent", + "since": 33, + "type": "LIST_ELEMENT_TYPE", + "id": 933, + "rootId": "CHR1dGFub3RhAAOl", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 937, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 935, + "since": 33, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 939, + "since": 33, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 938, + "since": 33, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1401, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 936, + "since": 33, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "description": { + "final": false, + "name": "description", + "id": 941, + "since": 33, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "endTime": { + "final": false, + "name": "endTime", + "id": 943, + "since": 33, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "hashedUid": { + "final": false, + "name": "hashedUid", + "id": 1088, + "since": 42, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "invitedConfidentially": { + "final": false, + "name": "invitedConfidentially", + "id": 1090, + "since": 42, + "type": "Boolean", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "location": { + "final": false, + "name": "location", + "id": 944, + "since": 33, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "recurrenceId": { + "final": false, + "name": "recurrenceId", + "id": 1320, + "since": 62, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "sequence": { + "final": false, + "name": "sequence", + "id": 1089, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "startTime": { + "final": false, + "name": "startTime", + "id": 942, + "since": 33, + "type": "Date", + "cardinality": "One", + "encrypted": true + }, + "summary": { + "final": false, + "name": "summary", + "id": 940, + "since": 33, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "uid": { + "final": false, + "name": "uid", + "id": 988, + "since": 35, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": { + "alarmInfos": { + "final": false, + "name": "alarmInfos", + "id": 946, + "since": 33, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "UserAlarmInfo", + "dependency": null + }, + "attendees": { + "final": false, + "name": "attendees", + "id": 1091, + "since": 42, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "CalendarEventAttendee", + "dependency": null + }, + "organizer": { + "final": false, + "name": "organizer", + "id": 1092, + "since": 42, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "EncryptedMailAddress", + "dependency": null + }, + "repeatRule": { + "final": false, + "name": "repeatRule", + "id": 945, + "since": 33, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CalendarRepeatRule", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEventAttendee": { + "name": "CalendarEventAttendee", + "since": 42, + "type": "AGGREGATED_TYPE", + "id": 1084, + "rootId": "CHR1dGFub3RhAAQ8", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1085, + "since": 42, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "status": { + "final": false, + "name": "status", + "id": 1086, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "address": { + "final": true, + "name": "address", + "id": 1087, + "since": 42, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "EncryptedMailAddress", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEventIndexRef": { + "name": "CalendarEventIndexRef", + "since": 42, + "type": "AGGREGATED_TYPE", + "id": 1100, + "rootId": "CHR1dGFub3RhAARM", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1101, + "since": 42, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 1102, + "since": 42, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "CalendarEventUidIndex", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEventUidIndex": { + "name": "CalendarEventUidIndex", + "since": 42, + "type": "LIST_ELEMENT_TYPE", + "id": 1093, + "rootId": "CHR1dGFub3RhAARF", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1097, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1095, + "since": 42, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1098, + "since": 42, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1096, + "since": 42, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "alteredInstances": { + "final": false, + "name": "alteredInstances", + "id": 1321, + "since": 62, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "CalendarEvent", + "dependency": null + }, + "progenitor": { + "final": true, + "name": "progenitor", + "id": 1099, + "since": 42, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "CalendarEvent", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEventUpdate": { + "name": "CalendarEventUpdate", + "since": 42, + "type": "LIST_ELEMENT_TYPE", + "id": 1104, + "rootId": "CHR1dGFub3RhAARQ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1108, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1106, + "since": 42, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1110, + "since": 42, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1109, + "since": 42, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1405, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1107, + "since": 42, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "sender": { + "final": true, + "name": "sender", + "id": 1111, + "since": 42, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "file": { + "final": true, + "name": "file", + "id": 1112, + "since": 42, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarEventUpdateList": { + "name": "CalendarEventUpdateList", + "since": 42, + "type": "AGGREGATED_TYPE", + "id": 1113, + "rootId": "CHR1dGFub3RhAARZ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1114, + "since": 42, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 1115, + "since": 42, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "CalendarEventUpdate", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarGroupRoot": { + "name": "CalendarGroupRoot", + "since": 33, + "type": "ELEMENT_TYPE", + "id": 947, + "rootId": "CHR1dGFub3RhAAOz", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 951, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 949, + "since": 33, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 953, + "since": 33, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 952, + "since": 33, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1402, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 950, + "since": 33, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "index": { + "final": true, + "name": "index", + "id": 1103, + "since": 42, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CalendarEventIndexRef", + "dependency": null + }, + "longEvents": { + "final": true, + "name": "longEvents", + "id": 955, + "since": 33, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "CalendarEvent", + "dependency": null + }, + "shortEvents": { + "final": true, + "name": "shortEvents", + "id": 954, + "since": 33, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "CalendarEvent", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CalendarRepeatRule": { + "name": "CalendarRepeatRule", + "since": 33, + "type": "AGGREGATED_TYPE", + "id": 926, + "rootId": "CHR1dGFub3RhAAOe", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 927, + "since": 33, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "endType": { + "final": false, + "name": "endType", + "id": 929, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "endValue": { + "final": false, + "name": "endValue", + "id": 930, + "since": 33, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "frequency": { + "final": false, + "name": "frequency", + "id": 928, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "interval": { + "final": false, + "name": "interval", + "id": 931, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "timeZone": { + "final": false, + "name": "timeZone", + "id": 932, + "since": 33, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "excludedDates": { + "final": true, + "name": "excludedDates", + "id": 1319, + "since": 61, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DateWrapper", + "dependency": "sys" + } + }, + "app": "tutanota", + "version": "74" + }, + "Contact": { + "name": "Contact", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 64, + "rootId": "CHR1dGFub3RhAEA", + "versioned": true, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 68, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 66, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 69, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 585, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1394, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 67, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "birthdayIso": { + "final": false, + "name": "birthdayIso", + "id": 1083, + "since": 41, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "comment": { + "final": false, + "name": "comment", + "id": 77, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "company": { + "final": false, + "name": "company", + "id": 74, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "department": { + "final": false, + "name": "department", + "id": 1385, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "firstName": { + "final": false, + "name": "firstName", + "id": 72, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "lastName": { + "final": false, + "name": "lastName", + "id": 73, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "middleName": { + "final": false, + "name": "middleName", + "id": 1380, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "nameSuffix": { + "final": false, + "name": "nameSuffix", + "id": 1381, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "nickname": { + "final": false, + "name": "nickname", + "id": 849, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "oldBirthdayDate": { + "final": false, + "name": "oldBirthdayDate", + "id": 76, + "since": 1, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "phoneticFirst": { + "final": false, + "name": "phoneticFirst", + "id": 1382, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "phoneticLast": { + "final": false, + "name": "phoneticLast", + "id": 1384, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "phoneticMiddle": { + "final": false, + "name": "phoneticMiddle", + "id": 1383, + "since": 67, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "presharedPassword": { + "final": false, + "name": "presharedPassword", + "id": 79, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "role": { + "final": false, + "name": "role", + "id": 75, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "title": { + "final": false, + "name": "title", + "id": 850, + "since": 23, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": { + "addresses": { + "final": false, + "name": "addresses", + "id": 82, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactAddress", + "dependency": null + }, + "customDate": { + "final": false, + "name": "customDate", + "id": 1386, + "since": 67, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactCustomDate", + "dependency": null + }, + "mailAddresses": { + "final": false, + "name": "mailAddresses", + "id": 80, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactMailAddress", + "dependency": null + }, + "messengerHandles": { + "final": false, + "name": "messengerHandles", + "id": 1389, + "since": 67, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactMessengerHandle", + "dependency": null + }, + "oldBirthdayAggregate": { + "final": false, + "name": "oldBirthdayAggregate", + "id": 851, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "Birthday", + "dependency": null + }, + "phoneNumbers": { + "final": false, + "name": "phoneNumbers", + "id": 81, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactPhoneNumber", + "dependency": null + }, + "photo": { + "final": false, + "name": "photo", + "id": 852, + "since": 23, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + }, + "pronouns": { + "final": false, + "name": "pronouns", + "id": 1390, + "since": 67, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactPronouns", + "dependency": null + }, + "relationships": { + "final": false, + "name": "relationships", + "id": 1388, + "since": 67, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactRelationship", + "dependency": null + }, + "socialIds": { + "final": false, + "name": "socialIds", + "id": 83, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactSocialId", + "dependency": null + }, + "websites": { + "final": false, + "name": "websites", + "id": 1387, + "since": 67, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ContactWebsite", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ContactAddress": { + "name": "ContactAddress", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 54, + "rootId": "CHR1dGFub3RhADY", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 55, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": false, + "name": "address", + "id": 57, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 58, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 56, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactCustomDate": { + "name": "ContactCustomDate", + "since": 67, + "type": "AGGREGATED_TYPE", + "id": 1356, + "rootId": "CHR1dGFub3RhAAVM", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1357, + "since": 67, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 1359, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "dateIso": { + "final": false, + "name": "dateIso", + "id": 1360, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 1358, + "since": 67, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactList": { + "name": "ContactList", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 153, + "rootId": "CHR1dGFub3RhAACZ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 157, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 155, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 593, + "since": 13, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 592, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1397, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 156, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "contacts": { + "final": true, + "name": "contacts", + "id": 160, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Contact", + "dependency": null + }, + "photos": { + "final": false, + "name": "photos", + "id": 856, + "since": 23, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "PhotosRef", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ContactListEntry": { + "name": "ContactListEntry", + "since": 64, + "type": "LIST_ELEMENT_TYPE", + "id": 1325, + "rootId": "CHR1dGFub3RhAAUt", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1329, + "since": 64, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1327, + "since": 64, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1331, + "since": 64, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1330, + "since": 64, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1409, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1328, + "since": 64, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "emailAddress": { + "final": false, + "name": "emailAddress", + "id": 1332, + "since": 64, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactListGroupRoot": { + "name": "ContactListGroupRoot", + "since": 64, + "type": "ELEMENT_TYPE", + "id": 1333, + "rootId": "CHR1dGFub3RhAAU1", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1337, + "since": 64, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1335, + "since": 64, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1339, + "since": 64, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1338, + "since": 64, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1410, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1336, + "since": 64, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "entries": { + "final": true, + "name": "entries", + "id": 1340, + "since": 64, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "ContactListEntry", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ContactMailAddress": { + "name": "ContactMailAddress", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 44, + "rootId": "CHR1dGFub3RhACw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 45, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": false, + "name": "address", + "id": 47, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 48, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 46, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactMessengerHandle": { + "name": "ContactMessengerHandle", + "since": 67, + "type": "AGGREGATED_TYPE", + "id": 1371, + "rootId": "CHR1dGFub3RhAAVb", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1372, + "since": 67, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 1374, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "handle": { + "final": false, + "name": "handle", + "id": 1375, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 1373, + "since": 67, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactPhoneNumber": { + "name": "ContactPhoneNumber", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 49, + "rootId": "CHR1dGFub3RhADE", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 50, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 53, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "number": { + "final": false, + "name": "number", + "id": 52, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 51, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactPronouns": { + "name": "ContactPronouns", + "since": 67, + "type": "AGGREGATED_TYPE", + "id": 1376, + "rootId": "CHR1dGFub3RhAAVg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1377, + "since": 67, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": false, + "name": "language", + "id": 1378, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "pronouns": { + "final": false, + "name": "pronouns", + "id": 1379, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactRelationship": { + "name": "ContactRelationship", + "since": 67, + "type": "AGGREGATED_TYPE", + "id": 1366, + "rootId": "CHR1dGFub3RhAAVW", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1367, + "since": 67, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 1369, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "person": { + "final": false, + "name": "person", + "id": 1370, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 1368, + "since": 67, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactSocialId": { + "name": "ContactSocialId", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 59, + "rootId": "CHR1dGFub3RhADs", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 60, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 63, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "socialId": { + "final": false, + "name": "socialId", + "id": 62, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 61, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ContactWebsite": { + "name": "ContactWebsite", + "since": 67, + "type": "AGGREGATED_TYPE", + "id": 1361, + "rootId": "CHR1dGFub3RhAAVR", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1362, + "since": 67, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "customTypeName": { + "final": false, + "name": "customTypeName", + "id": 1364, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "type": { + "final": false, + "name": "type", + "id": 1363, + "since": 67, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "url": { + "final": false, + "name": "url", + "id": 1365, + "since": 67, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ConversationEntry": { + "name": "ConversationEntry", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 84, + "rootId": "CHR1dGFub3RhAFQ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 120, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 118, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 588, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 119, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "conversationType": { + "final": true, + "name": "conversationType", + "id": 122, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "messageId": { + "final": true, + "name": "messageId", + "id": 121, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mail": { + "final": true, + "name": "mail", + "id": 124, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Mail", + "dependency": null + }, + "previous": { + "final": true, + "name": "previous", + "id": 123, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ConversationEntry", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CreateExternalUserGroupData": { + "name": "CreateExternalUserGroupData", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 138, + "rootId": "CHR1dGFub3RhAACK", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 139, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "externalPwEncUserGroupKey": { + "final": false, + "name": "externalPwEncUserGroupKey", + "id": 142, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "internalUserEncUserGroupKey": { + "final": false, + "name": "internalUserEncUserGroupKey", + "id": 143, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "internalUserGroupKeyVersion": { + "final": false, + "name": "internalUserGroupKeyVersion", + "id": 1433, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 141, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "CreateGroupPostReturn": { + "name": "CreateGroupPostReturn", + "since": 34, + "type": "DATA_TRANSFER_TYPE", + "id": 985, + "rootId": "CHR1dGFub3RhAAPZ", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 986, + "since": 34, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 987, + "since": 34, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CreateMailFolderData": { + "name": "CreateMailFolderData", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 450, + "rootId": "CHR1dGFub3RhAAHC", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 451, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "folderName": { + "final": true, + "name": "folderName", + "id": 453, + "since": 7, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "ownerEncSessionKey": { + "final": true, + "name": "ownerEncSessionKey", + "id": 454, + "since": 7, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerGroup": { + "final": true, + "name": "ownerGroup", + "id": 1268, + "since": 57, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "ownerKeyVersion": { + "final": true, + "name": "ownerKeyVersion", + "id": 1414, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "parentFolder": { + "final": true, + "name": "parentFolder", + "id": 452, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CreateMailFolderReturn": { + "name": "CreateMailFolderReturn", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 455, + "rootId": "CHR1dGFub3RhAAHH", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 456, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "newFolder": { + "final": false, + "name": "newFolder", + "id": 457, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CreateMailGroupData": { + "name": "CreateMailGroupData", + "since": 19, + "type": "DATA_TRANSFER_TYPE", + "id": 707, + "rootId": "CHR1dGFub3RhAALD", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 708, + "since": 19, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "encryptedName": { + "final": false, + "name": "encryptedName", + "id": 710, + "since": 19, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 709, + "since": 19, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailEncMailboxSessionKey": { + "final": false, + "name": "mailEncMailboxSessionKey", + "id": 711, + "since": 19, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupData": { + "final": false, + "name": "groupData", + "id": 712, + "since": 19, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "InternalGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "CustomerAccountCreateData": { + "name": "CustomerAccountCreateData", + "since": 16, + "type": "DATA_TRANSFER_TYPE", + "id": 648, + "rootId": "CHR1dGFub3RhAAKI", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 649, + "since": 16, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "accountGroupKeyVersion": { + "final": false, + "name": "accountGroupKeyVersion", + "id": 1421, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "adminEncAccountingInfoSessionKey": { + "final": false, + "name": "adminEncAccountingInfoSessionKey", + "id": 659, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "adminEncCustomerServerPropertiesSessionKey": { + "final": false, + "name": "adminEncCustomerServerPropertiesSessionKey", + "id": 661, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "authToken": { + "final": false, + "name": "authToken", + "id": 650, + "since": 16, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "code": { + "final": false, + "name": "code", + "id": 873, + "since": 24, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 651, + "since": 16, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "lang": { + "final": false, + "name": "lang", + "id": 652, + "since": 16, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPubEncAccountingInfoSessionKey": { + "final": false, + "name": "systemAdminPubEncAccountingInfoSessionKey", + "id": 660, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPubKeyVersion": { + "final": false, + "name": "systemAdminPubKeyVersion", + "id": 1422, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "systemAdminPublicProtocolVersion": { + "final": true, + "name": "systemAdminPublicProtocolVersion", + "id": 1355, + "since": 66, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "userEncAccountGroupKey": { + "final": false, + "name": "userEncAccountGroupKey", + "id": 655, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncAdminGroupKey": { + "final": false, + "name": "userEncAdminGroupKey", + "id": 654, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "adminGroupData": { + "final": false, + "name": "adminGroupData", + "id": 657, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "InternalGroupData", + "dependency": null + }, + "customerGroupData": { + "final": false, + "name": "customerGroupData", + "id": 658, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "InternalGroupData", + "dependency": null + }, + "userData": { + "final": false, + "name": "userData", + "id": 653, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "UserAccountUserData", + "dependency": null + }, + "userGroupData": { + "final": false, + "name": "userGroupData", + "id": 656, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "InternalGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DeleteGroupData": { + "name": "DeleteGroupData", + "since": 19, + "type": "DATA_TRANSFER_TYPE", + "id": 713, + "rootId": "CHR1dGFub3RhAALJ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 714, + "since": 19, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "restore": { + "final": false, + "name": "restore", + "id": 715, + "since": 19, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 716, + "since": 19, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DeleteMailData": { + "name": "DeleteMailData", + "since": 5, + "type": "DATA_TRANSFER_TYPE", + "id": 419, + "rootId": "CHR1dGFub3RhAAGj", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 420, + "since": 5, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "folder": { + "final": true, + "name": "folder", + "id": 724, + "since": 19, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + }, + "mails": { + "final": false, + "name": "mails", + "id": 421, + "since": 5, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DeleteMailFolderData": { + "name": "DeleteMailFolderData", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 458, + "rootId": "CHR1dGFub3RhAAHK", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 459, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "folders": { + "final": false, + "name": "folders", + "id": 460, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftAttachment": { + "name": "DraftAttachment", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 491, + "rootId": "CHR1dGFub3RhAAHr", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 492, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "ownerEncFileSessionKey": { + "final": true, + "name": "ownerEncFileSessionKey", + "id": 493, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": true, + "name": "ownerKeyVersion", + "id": 1430, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "existingFile": { + "final": true, + "name": "existingFile", + "id": 495, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + }, + "newFile": { + "final": true, + "name": "newFile", + "id": 494, + "since": 11, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "NewDraftAttachment", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftCreateData": { + "name": "DraftCreateData", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 508, + "rootId": "CHR1dGFub3RhAAH8", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 509, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "conversationType": { + "final": true, + "name": "conversationType", + "id": 511, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "ownerEncSessionKey": { + "final": true, + "name": "ownerEncSessionKey", + "id": 512, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": false, + "name": "ownerKeyVersion", + "id": 1427, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "previousMessageId": { + "final": true, + "name": "previousMessageId", + "id": 510, + "since": 11, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "draftData": { + "final": false, + "name": "draftData", + "id": 515, + "since": 11, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "DraftData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftCreateReturn": { + "name": "DraftCreateReturn", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 516, + "rootId": "CHR1dGFub3RhAAIE", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 517, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "draft": { + "final": false, + "name": "draft", + "id": 518, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftData": { + "name": "DraftData", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 496, + "rootId": "CHR1dGFub3RhAAHw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 497, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bodyText": { + "final": true, + "name": "bodyText", + "id": 499, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "compressedBodyText": { + "final": true, + "name": "compressedBodyText", + "id": 1194, + "since": 46, + "type": "CompressedString", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "confidential": { + "final": true, + "name": "confidential", + "id": 502, + "since": 11, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "method": { + "final": true, + "name": "method", + "id": 1116, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "senderMailAddress": { + "final": true, + "name": "senderMailAddress", + "id": 500, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "senderName": { + "final": true, + "name": "senderName", + "id": 501, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "subject": { + "final": true, + "name": "subject", + "id": 498, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "addedAttachments": { + "final": true, + "name": "addedAttachments", + "id": 506, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DraftAttachment", + "dependency": null + }, + "bccRecipients": { + "final": true, + "name": "bccRecipients", + "id": 505, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DraftRecipient", + "dependency": null + }, + "ccRecipients": { + "final": true, + "name": "ccRecipients", + "id": 504, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DraftRecipient", + "dependency": null + }, + "removedAttachments": { + "final": true, + "name": "removedAttachments", + "id": 507, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "File", + "dependency": null + }, + "replyTos": { + "final": false, + "name": "replyTos", + "id": 819, + "since": 21, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EncryptedMailAddress", + "dependency": null + }, + "toRecipients": { + "final": true, + "name": "toRecipients", + "id": 503, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "DraftRecipient", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftRecipient": { + "name": "DraftRecipient", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 482, + "rootId": "CHR1dGFub3RhAAHi", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 483, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 485, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 484, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "DraftUpdateData": { + "name": "DraftUpdateData", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 519, + "rootId": "CHR1dGFub3RhAAIH", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 520, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "draft": { + "final": false, + "name": "draft", + "id": 522, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + }, + "draftData": { + "final": false, + "name": "draftData", + "id": 521, + "since": 11, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "DraftData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "DraftUpdateReturn": { + "name": "DraftUpdateReturn", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 523, + "rootId": "CHR1dGFub3RhAAIL", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 524, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "attachments": { + "final": true, + "name": "attachments", + "id": 525, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "EmailTemplate": { + "name": "EmailTemplate", + "since": 45, + "type": "LIST_ELEMENT_TYPE", + "id": 1158, + "rootId": "CHR1dGFub3RhAASG", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1162, + "since": 45, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1160, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1164, + "since": 45, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1163, + "since": 45, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1406, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1161, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "tag": { + "final": false, + "name": "tag", + "id": 1166, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "title": { + "final": false, + "name": "title", + "id": 1165, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "contents": { + "final": false, + "name": "contents", + "id": 1167, + "since": 45, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EmailTemplateContent", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "EmailTemplateContent": { + "name": "EmailTemplateContent", + "since": 45, + "type": "AGGREGATED_TYPE", + "id": 1154, + "rootId": "CHR1dGFub3RhAASC", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1155, + "since": 45, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "languageCode": { + "final": false, + "name": "languageCode", + "id": 1157, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "text": { + "final": false, + "name": "text", + "id": 1156, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "EncryptTutanotaPropertiesData": { + "name": "EncryptTutanotaPropertiesData", + "since": 9, + "type": "DATA_TRANSFER_TYPE", + "id": 473, + "rootId": "CHR1dGFub3RhAAHZ", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 474, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "symEncSessionKey": { + "final": false, + "name": "symEncSessionKey", + "id": 476, + "since": 9, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": false, + "name": "symKeyVersion", + "id": 1428, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "properties": { + "final": false, + "name": "properties", + "id": 475, + "since": 9, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "TutanotaProperties", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "EncryptedMailAddress": { + "name": "EncryptedMailAddress", + "since": 14, + "type": "AGGREGATED_TYPE", + "id": 612, + "rootId": "CHR1dGFub3RhAAJk", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 613, + "since": 14, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": true, + "name": "address", + "id": 615, + "since": 14, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "name": { + "final": true, + "name": "name", + "id": 614, + "since": 14, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "EntropyData": { + "name": "EntropyData", + "since": 43, + "type": "DATA_TRANSFER_TYPE", + "id": 1122, + "rootId": "CHR1dGFub3RhAARi", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1123, + "since": 43, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "userEncEntropy": { + "final": false, + "name": "userEncEntropy", + "id": 1124, + "since": 43, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userKeyVersion": { + "final": false, + "name": "userKeyVersion", + "id": 1432, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ExternalUserData": { + "name": "ExternalUserData", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 145, + "rootId": "CHR1dGFub3RhAACR", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 146, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "externalMailEncMailBoxSessionKey": { + "final": false, + "name": "externalMailEncMailBoxSessionKey", + "id": 673, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "externalMailEncMailGroupInfoSessionKey": { + "final": false, + "name": "externalMailEncMailGroupInfoSessionKey", + "id": 670, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "externalUserEncEntropy": { + "final": false, + "name": "externalUserEncEntropy", + "id": 412, + "since": 2, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "externalUserEncMailGroupKey": { + "final": false, + "name": "externalUserEncMailGroupKey", + "id": 148, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "externalUserEncTutanotaPropertiesSessionKey": { + "final": false, + "name": "externalUserEncTutanotaPropertiesSessionKey", + "id": 672, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "externalUserEncUserGroupInfoSessionKey": { + "final": false, + "name": "externalUserEncUserGroupInfoSessionKey", + "id": 150, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "internalMailEncMailGroupInfoSessionKey": { + "final": false, + "name": "internalMailEncMailGroupInfoSessionKey", + "id": 671, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "internalMailEncUserGroupInfoSessionKey": { + "final": false, + "name": "internalMailEncUserGroupInfoSessionKey", + "id": 669, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "internalMailGroupKeyVersion": { + "final": false, + "name": "internalMailGroupKeyVersion", + "id": 1429, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 1323, + "since": 63, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": false, + "name": "verifier", + "id": 149, + "since": 1, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "userGroupData": { + "final": false, + "name": "userGroupData", + "id": 151, + "since": 1, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "CreateExternalUserGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "File": { + "name": "File", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 13, + "rootId": "CHR1dGFub3RhAA0", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 17, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 15, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 18, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 580, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1391, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 16, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "cid": { + "final": true, + "name": "cid", + "id": 924, + "since": 32, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "mimeType": { + "final": true, + "name": "mimeType", + "id": 23, + "since": 1, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "name": { + "final": false, + "name": "name", + "id": 21, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "size": { + "final": true, + "name": "size", + "id": 22, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "blobs": { + "final": true, + "name": "blobs", + "id": 1225, + "since": 52, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "Blob", + "dependency": "sys" + }, + "parent": { + "final": true, + "name": "parent", + "id": 25, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "File", + "dependency": null + }, + "subFiles": { + "final": true, + "name": "subFiles", + "id": 26, + "since": 1, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "Subfiles", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "FileSystem": { + "name": "FileSystem", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 28, + "rootId": "CHR1dGFub3RhABw", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 32, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 30, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 582, + "since": 13, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 581, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1392, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 31, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "files": { + "final": true, + "name": "files", + "id": 35, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "GroupInvitationDeleteData": { + "name": "GroupInvitationDeleteData", + "since": 38, + "type": "DATA_TRANSFER_TYPE", + "id": 1016, + "rootId": "CHR1dGFub3RhAAP4", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1017, + "since": 38, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "receivedInvitation": { + "final": false, + "name": "receivedInvitation", + "id": 1018, + "since": 38, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "ReceivedGroupInvitation", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "GroupInvitationPostData": { + "name": "GroupInvitationPostData", + "since": 38, + "type": "DATA_TRANSFER_TYPE", + "id": 1002, + "rootId": "CHR1dGFub3RhAAPq", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1003, + "since": 38, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "internalKeyData": { + "final": false, + "name": "internalKeyData", + "id": 1005, + "since": 38, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InternalRecipientKeyData", + "dependency": null + }, + "sharedGroupData": { + "final": false, + "name": "sharedGroupData", + "id": 1004, + "since": 38, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "SharedGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "GroupInvitationPostReturn": { + "name": "GroupInvitationPostReturn", + "since": 38, + "type": "DATA_TRANSFER_TYPE", + "id": 1006, + "rootId": "CHR1dGFub3RhAAPu", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1007, + "since": 38, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "existingMailAddresses": { + "final": false, + "name": "existingMailAddresses", + "id": 1008, + "since": 38, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + }, + "invalidMailAddresses": { + "final": false, + "name": "invalidMailAddresses", + "id": 1009, + "since": 38, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + }, + "invitedMailAddresses": { + "final": false, + "name": "invitedMailAddresses", + "id": 1010, + "since": 38, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "GroupInvitationPutData": { + "name": "GroupInvitationPutData", + "since": 38, + "type": "DATA_TRANSFER_TYPE", + "id": 1011, + "rootId": "CHR1dGFub3RhAAPz", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1012, + "since": 38, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupEncInviteeGroupInfoKey": { + "final": true, + "name": "sharedGroupEncInviteeGroupInfoKey", + "id": 1014, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupKeyVersion": { + "final": true, + "name": "sharedGroupKeyVersion", + "id": 1419, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "userGroupEncGroupKey": { + "final": true, + "name": "userGroupEncGroupKey", + "id": 1013, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 1418, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "receivedInvitation": { + "final": false, + "name": "receivedInvitation", + "id": 1015, + "since": 38, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "ReceivedGroupInvitation", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "GroupSettings": { + "name": "GroupSettings", + "since": 34, + "type": "AGGREGATED_TYPE", + "id": 968, + "rootId": "CHR1dGFub3RhAAPI", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 969, + "since": 34, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "color": { + "final": false, + "name": "color", + "id": 971, + "since": 34, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "name": { + "final": false, + "name": "name", + "id": 1020, + "since": 39, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": { + "group": { + "final": true, + "name": "group", + "id": 970, + "since": 34, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "Header": { + "name": "Header", + "since": 58, + "type": "AGGREGATED_TYPE", + "id": 1269, + "rootId": "CHR1dGFub3RhAAT1", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1270, + "since": 58, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "compressedHeaders": { + "final": true, + "name": "compressedHeaders", + "id": 1272, + "since": 58, + "type": "CompressedString", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "headers": { + "final": true, + "name": "headers", + "id": 1271, + "since": 58, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ImapFolder": { + "name": "ImapFolder", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 190, + "rootId": "CHR1dGFub3RhAAC-", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 191, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "lastseenuid": { + "final": false, + "name": "lastseenuid", + "id": 193, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 192, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "uidvalidity": { + "final": false, + "name": "uidvalidity", + "id": 194, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "syncInfo": { + "final": true, + "name": "syncInfo", + "id": 195, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "RemoteImapSyncInfo", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ImapSyncConfiguration": { + "name": "ImapSyncConfiguration", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 209, + "rootId": "CHR1dGFub3RhAADR", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 210, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "host": { + "final": false, + "name": "host", + "id": 211, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "password": { + "final": false, + "name": "password", + "id": 214, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "port": { + "final": false, + "name": "port", + "id": 212, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "user": { + "final": false, + "name": "user", + "id": 213, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "imapSyncState": { + "final": false, + "name": "imapSyncState", + "id": 215, + "since": 1, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "ImapSyncState", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ImapSyncState": { + "name": "ImapSyncState", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 196, + "rootId": "CHR1dGFub3RhAADE", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 200, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 198, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 595, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 199, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "folders": { + "final": false, + "name": "folders", + "id": 201, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ImapFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "InboxRule": { + "name": "InboxRule", + "since": 12, + "type": "AGGREGATED_TYPE", + "id": 573, + "rootId": "CHR1dGFub3RhAAI9", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 574, + "since": 12, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 575, + "since": 12, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "value": { + "final": false, + "name": "value", + "id": 576, + "since": 12, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "targetFolder": { + "final": false, + "name": "targetFolder", + "id": 577, + "since": 12, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "InternalGroupData": { + "name": "InternalGroupData", + "since": 16, + "type": "AGGREGATED_TYPE", + "id": 642, + "rootId": "CHR1dGFub3RhAAKC", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 643, + "since": 16, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "adminEncGroupKey": { + "final": false, + "name": "adminEncGroupKey", + "id": 646, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "adminKeyVersion": { + "final": false, + "name": "adminKeyVersion", + "id": 1415, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "groupEncPrivEccKey": { + "final": true, + "name": "groupEncPrivEccKey", + "id": 1343, + "since": 66, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "groupEncPrivKyberKey": { + "final": true, + "name": "groupEncPrivKyberKey", + "id": 1345, + "since": 66, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "groupEncPrivRsaKey": { + "final": false, + "name": "groupEncPrivRsaKey", + "id": 645, + "since": 16, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "ownerEncGroupInfoSessionKey": { + "final": false, + "name": "ownerEncGroupInfoSessionKey", + "id": 647, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": false, + "name": "ownerKeyVersion", + "id": 1416, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEccKey": { + "final": true, + "name": "pubEccKey", + "id": 1342, + "since": 66, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubKyberKey": { + "final": true, + "name": "pubKyberKey", + "id": 1344, + "since": 66, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "pubRsaKey": { + "final": false, + "name": "pubRsaKey", + "id": 644, + "since": 16, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "adminGroup": { + "final": true, + "name": "adminGroup", + "id": 874, + "since": 25, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "InternalRecipientKeyData": { + "name": "InternalRecipientKeyData", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 527, + "rootId": "CHR1dGFub3RhAAIP", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 528, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 529, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "protocolVersion": { + "final": true, + "name": "protocolVersion", + "id": 1352, + "since": 66, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "pubEncBucketKey": { + "final": true, + "name": "pubEncBucketKey", + "id": 530, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recipientKeyVersion": { + "final": true, + "name": "recipientKeyVersion", + "id": 531, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "senderKeyVersion": { + "final": true, + "name": "senderKeyVersion", + "id": 1431, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "KnowledgeBaseEntry": { + "name": "KnowledgeBaseEntry", + "since": 45, + "type": "LIST_ELEMENT_TYPE", + "id": 1171, + "rootId": "CHR1dGFub3RhAAST", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1175, + "since": 45, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1173, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1177, + "since": 45, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1176, + "since": 45, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1413, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1174, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "description": { + "final": false, + "name": "description", + "id": 1179, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "title": { + "final": false, + "name": "title", + "id": 1178, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "keywords": { + "final": false, + "name": "keywords", + "id": 1180, + "since": 45, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "KnowledgeBaseEntryKeyword", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "KnowledgeBaseEntryKeyword": { + "name": "KnowledgeBaseEntryKeyword", + "since": 45, + "type": "AGGREGATED_TYPE", + "id": 1168, + "rootId": "CHR1dGFub3RhAASQ", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1169, + "since": 45, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "keyword": { + "final": false, + "name": "keyword", + "id": 1170, + "since": 45, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "ListUnsubscribeData": { + "name": "ListUnsubscribeData", + "since": 24, + "type": "DATA_TRANSFER_TYPE", + "id": 867, + "rootId": "CHR1dGFub3RhAANj", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 868, + "since": 24, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "headers": { + "final": false, + "name": "headers", + "id": 871, + "since": 24, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recipient": { + "final": false, + "name": "recipient", + "id": 870, + "since": 24, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mail": { + "final": false, + "name": "mail", + "id": 869, + "since": 24, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "Mail": { + "name": "Mail", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 97, + "rootId": "CHR1dGFub3RhAGE", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 101, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 99, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 102, + "since": 1, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 587, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1395, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 100, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "authStatus": { + "final": false, + "name": "authStatus", + "id": 1022, + "since": 40, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "confidential": { + "final": true, + "name": "confidential", + "id": 426, + "since": 6, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "differentEnvelopeSender": { + "final": true, + "name": "differentEnvelopeSender", + "id": 617, + "since": 14, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "encryptionAuthStatus": { + "final": true, + "name": "encryptionAuthStatus", + "id": 1346, + "since": 66, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": true + }, + "listUnsubscribe": { + "final": true, + "name": "listUnsubscribe", + "id": 866, + "since": 24, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "method": { + "final": true, + "name": "method", + "id": 1120, + "since": 42, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "movedTime": { + "final": true, + "name": "movedTime", + "id": 896, + "since": 30, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "phishingStatus": { + "final": false, + "name": "phishingStatus", + "id": 1021, + "since": 40, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "receivedDate": { + "final": true, + "name": "receivedDate", + "id": 107, + "since": 1, + "type": "Date", + "cardinality": "One", + "encrypted": false + }, + "recipientCount": { + "final": true, + "name": "recipientCount", + "id": 1307, + "since": 58, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "replyType": { + "final": false, + "name": "replyType", + "id": 466, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "state": { + "final": true, + "name": "state", + "id": 108, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "subject": { + "final": true, + "name": "subject", + "id": 105, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "unread": { + "final": false, + "name": "unread", + "id": 109, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "attachments": { + "final": true, + "name": "attachments", + "id": 115, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "File", + "dependency": null + }, + "bucketKey": { + "final": true, + "name": "bucketKey", + "id": 1310, + "since": 58, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "BucketKey", + "dependency": "sys" + }, + "conversationEntry": { + "final": true, + "name": "conversationEntry", + "id": 117, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "ConversationEntry", + "dependency": null + }, + "firstRecipient": { + "final": true, + "name": "firstRecipient", + "id": 1306, + "since": 58, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailAddress", + "dependency": null + }, + "mailDetails": { + "final": true, + "name": "mailDetails", + "id": 1308, + "since": 58, + "type": "BLOB_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailDetailsBlob", + "dependency": null + }, + "mailDetailsDraft": { + "final": true, + "name": "mailDetailsDraft", + "id": 1309, + "since": 58, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailDetailsDraft", + "dependency": null + }, + "sender": { + "final": true, + "name": "sender", + "id": 111, + "since": 1, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "MailAddress", + "dependency": null + }, + "sets": { + "final": false, + "name": "sets", + "id": 1461, + "since": 74, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailAddress": { + "name": "MailAddress", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 92, + "rootId": "CHR1dGFub3RhAFw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 93, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "address": { + "final": true, + "name": "address", + "id": 95, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 94, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "contact": { + "final": false, + "name": "contact", + "id": 96, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Contact", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailAddressProperties": { + "name": "MailAddressProperties", + "since": 56, + "type": "AGGREGATED_TYPE", + "id": 1263, + "rootId": "CHR1dGFub3RhAATv", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1264, + "since": 56, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 1265, + "since": 56, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "senderName": { + "final": false, + "name": "senderName", + "id": 1266, + "since": 56, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "MailBag": { + "name": "MailBag", + "since": 74, + "type": "AGGREGATED_TYPE", + "id": 1456, + "rootId": "CHR1dGFub3RhAAWw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1457, + "since": 74, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mails": { + "final": true, + "name": "mails", + "id": 1458, + "since": 74, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailBox": { + "name": "MailBox", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 125, + "rootId": "CHR1dGFub3RhAH0", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 129, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 127, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 591, + "since": 13, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 590, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1396, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 128, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "lastInfoDate": { + "final": true, + "name": "lastInfoDate", + "id": 569, + "since": 12, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "archivedMailBags": { + "final": false, + "name": "archivedMailBags", + "id": 1459, + "since": 74, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailBag", + "dependency": null + }, + "currentMailBag": { + "final": false, + "name": "currentMailBag", + "id": 1460, + "since": 74, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailBag", + "dependency": null + }, + "folders": { + "final": true, + "name": "folders", + "id": 443, + "since": 7, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolderRef", + "dependency": null + }, + "mailDetailsDrafts": { + "final": false, + "name": "mailDetailsDrafts", + "id": 1318, + "since": 60, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "MailDetailsDraftsRef", + "dependency": null + }, + "receivedAttachments": { + "final": true, + "name": "receivedAttachments", + "id": 134, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + }, + "sentAttachments": { + "final": true, + "name": "sentAttachments", + "id": 133, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + }, + "spamResults": { + "final": true, + "name": "spamResults", + "id": 1220, + "since": 48, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "SpamResults", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailDetails": { + "name": "MailDetails", + "since": 58, + "type": "AGGREGATED_TYPE", + "id": 1282, + "rootId": "CHR1dGFub3RhAAUC", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1283, + "since": 58, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "authStatus": { + "final": false, + "name": "authStatus", + "id": 1289, + "since": 58, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "sentDate": { + "final": true, + "name": "sentDate", + "id": 1284, + "since": 58, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "body": { + "final": true, + "name": "body", + "id": 1288, + "since": 58, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "Body", + "dependency": null + }, + "headers": { + "final": true, + "name": "headers", + "id": 1287, + "since": 58, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "Header", + "dependency": null + }, + "recipients": { + "final": true, + "name": "recipients", + "id": 1286, + "since": 58, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "Recipients", + "dependency": null + }, + "replyTos": { + "final": true, + "name": "replyTos", + "id": 1285, + "since": 58, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "EncryptedMailAddress", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailDetailsBlob": { + "name": "MailDetailsBlob", + "since": 58, + "type": "BLOB_ELEMENT_TYPE", + "id": 1298, + "rootId": "CHR1dGFub3RhAAUS", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1302, + "since": 58, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1300, + "since": 58, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1304, + "since": 58, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1303, + "since": 58, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1408, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1301, + "since": 58, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "details": { + "final": true, + "name": "details", + "id": 1305, + "since": 58, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "MailDetails", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailDetailsDraft": { + "name": "MailDetailsDraft", + "since": 58, + "type": "LIST_ELEMENT_TYPE", + "id": 1290, + "rootId": "CHR1dGFub3RhAAUK", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1294, + "since": 58, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1292, + "since": 58, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1296, + "since": 58, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1295, + "since": 58, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1407, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1293, + "since": 58, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "details": { + "final": true, + "name": "details", + "id": 1297, + "since": 58, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "MailDetails", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailDetailsDraftsRef": { + "name": "MailDetailsDraftsRef", + "since": 60, + "type": "AGGREGATED_TYPE", + "id": 1315, + "rootId": "CHR1dGFub3RhAAUj", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1316, + "since": 60, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 1317, + "since": 60, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "MailDetailsDraft", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailFolder": { + "name": "MailFolder", + "since": 7, + "type": "LIST_ELEMENT_TYPE", + "id": 429, + "rootId": "CHR1dGFub3RhAAGt", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 433, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 431, + "since": 7, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 434, + "since": 7, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 589, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1399, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 432, + "since": 7, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "folderType": { + "final": true, + "name": "folderType", + "id": 436, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "isLabel": { + "final": false, + "name": "isLabel", + "id": 1453, + "since": 74, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "isMailSet": { + "final": false, + "name": "isMailSet", + "id": 1454, + "since": 74, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 435, + "since": 7, + "type": "String", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "entries": { + "final": false, + "name": "entries", + "id": 1455, + "since": 74, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "MailSetEntry", + "dependency": null + }, + "mails": { + "final": true, + "name": "mails", + "id": 437, + "since": 7, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + }, + "parentFolder": { + "final": true, + "name": "parentFolder", + "id": 439, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailFolderRef": { + "name": "MailFolderRef", + "since": 7, + "type": "AGGREGATED_TYPE", + "id": 440, + "rootId": "CHR1dGFub3RhAAG4", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 441, + "since": 7, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "folders": { + "final": true, + "name": "folders", + "id": 442, + "since": 7, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailSetEntry": { + "name": "MailSetEntry", + "since": 74, + "type": "LIST_ELEMENT_TYPE", + "id": 1446, + "rootId": "CHR1dGFub3RhAAWm", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1450, + "since": 74, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1448, + "since": 74, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1451, + "since": 74, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1449, + "since": 74, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mail": { + "final": true, + "name": "mail", + "id": 1452, + "since": 74, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailboxGroupRoot": { + "name": "MailboxGroupRoot", + "since": 18, + "type": "ELEMENT_TYPE", + "id": 693, + "rootId": "CHR1dGFub3RhAAK1", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 697, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 695, + "since": 18, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 698, + "since": 18, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 696, + "since": 18, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "calendarEventUpdates": { + "final": true, + "name": "calendarEventUpdates", + "id": 1119, + "since": 42, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "CalendarEventUpdateList", + "dependency": null + }, + "mailbox": { + "final": true, + "name": "mailbox", + "id": 699, + "since": 18, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailBox", + "dependency": null + }, + "mailboxProperties": { + "final": true, + "name": "mailboxProperties", + "id": 1203, + "since": 47, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailboxProperties", + "dependency": null + }, + "outOfOfficeNotification": { + "final": true, + "name": "outOfOfficeNotification", + "id": 1150, + "since": 44, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "OutOfOfficeNotification", + "dependency": null + }, + "outOfOfficeNotificationRecipientList": { + "final": true, + "name": "outOfOfficeNotificationRecipientList", + "id": 1151, + "since": 44, + "type": "AGGREGATION", + "cardinality": "ZeroOrOne", + "refType": "OutOfOfficeNotificationRecipientList", + "dependency": null + }, + "serverProperties": { + "final": true, + "name": "serverProperties", + "id": 700, + "since": 18, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailboxServerProperties", + "dependency": null + }, + "whitelistRequests": { + "final": true, + "name": "whitelistRequests", + "id": 701, + "since": 18, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "WhitelistRequest", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailboxProperties": { + "name": "MailboxProperties", + "since": 47, + "type": "ELEMENT_TYPE", + "id": 1195, + "rootId": "CHR1dGFub3RhAASr", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1199, + "since": 47, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1197, + "since": 47, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1201, + "since": 47, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1200, + "since": 47, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1411, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1198, + "since": 47, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "reportMovedMails": { + "final": false, + "name": "reportMovedMails", + "id": 1202, + "since": 47, + "type": "Number", + "cardinality": "One", + "encrypted": true + } + }, + "associations": { + "mailAddressProperties": { + "final": false, + "name": "mailAddressProperties", + "id": 1267, + "since": 56, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddressProperties", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "MailboxServerProperties": { + "name": "MailboxServerProperties", + "since": 18, + "type": "ELEMENT_TYPE", + "id": 677, + "rootId": "CHR1dGFub3RhAAKl", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 681, + "since": 18, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 679, + "since": 18, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 682, + "since": 18, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 680, + "since": 18, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "whitelistProtectionEnabled": { + "final": false, + "name": "whitelistProtectionEnabled", + "id": 683, + "since": 18, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "MoveMailData": { + "name": "MoveMailData", + "since": 7, + "type": "DATA_TRANSFER_TYPE", + "id": 445, + "rootId": "CHR1dGFub3RhAAG9", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 446, + "since": 7, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mails": { + "final": false, + "name": "mails", + "id": 448, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "Any", + "refType": "Mail", + "dependency": null + }, + "sourceFolder": { + "final": false, + "name": "sourceFolder", + "id": 1462, + "since": 74, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + }, + "targetFolder": { + "final": false, + "name": "targetFolder", + "id": 447, + "since": 7, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "NewDraftAttachment": { + "name": "NewDraftAttachment", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 486, + "rootId": "CHR1dGFub3RhAAHm", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 487, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "encCid": { + "final": true, + "name": "encCid", + "id": 925, + "since": 32, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "encFileName": { + "final": true, + "name": "encFileName", + "id": 488, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "encMimeType": { + "final": true, + "name": "encMimeType", + "id": 489, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "referenceTokens": { + "final": true, + "name": "referenceTokens", + "id": 1226, + "since": 52, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "BlobReferenceTokenWrapper", + "dependency": "sys" + } + }, + "app": "tutanota", + "version": "74" + }, + "NewsId": { + "name": "NewsId", + "since": 55, + "type": "AGGREGATED_TYPE", + "id": 1245, + "rootId": "CHR1dGFub3RhAATd", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1246, + "since": 55, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "newsItemId": { + "final": false, + "name": "newsItemId", + "id": 1248, + "since": 55, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "newsItemName": { + "final": false, + "name": "newsItemName", + "id": 1247, + "since": 55, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "NewsIn": { + "name": "NewsIn", + "since": 55, + "type": "DATA_TRANSFER_TYPE", + "id": 1259, + "rootId": "CHR1dGFub3RhAATr", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1260, + "since": 55, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "newsItemId": { + "final": false, + "name": "newsItemId", + "id": 1261, + "since": 55, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "NewsOut": { + "name": "NewsOut", + "since": 55, + "type": "DATA_TRANSFER_TYPE", + "id": 1256, + "rootId": "CHR1dGFub3RhAATo", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1257, + "since": 55, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "newsItemIds": { + "final": false, + "name": "newsItemIds", + "id": 1258, + "since": 55, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "NewsId", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "NotificationMail": { + "name": "NotificationMail", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 223, + "rootId": "CHR1dGFub3RhAADf", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 224, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bodyText": { + "final": false, + "name": "bodyText", + "id": 226, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailboxLink": { + "final": false, + "name": "mailboxLink", + "id": 417, + "since": 3, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recipientMailAddress": { + "final": false, + "name": "recipientMailAddress", + "id": 227, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "recipientName": { + "final": false, + "name": "recipientName", + "id": 228, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "subject": { + "final": false, + "name": "subject", + "id": 225, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "OutOfOfficeNotification": { + "name": "OutOfOfficeNotification", + "since": 44, + "type": "ELEMENT_TYPE", + "id": 1131, + "rootId": "CHR1dGFub3RhAARr", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1135, + "since": 44, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1133, + "since": 44, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1136, + "since": 44, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1134, + "since": 44, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "enabled": { + "final": false, + "name": "enabled", + "id": 1137, + "since": 44, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "endDate": { + "final": false, + "name": "endDate", + "id": 1139, + "since": 44, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "startDate": { + "final": false, + "name": "startDate", + "id": 1138, + "since": 44, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "notifications": { + "final": false, + "name": "notifications", + "id": 1140, + "since": 44, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "OutOfOfficeNotificationMessage", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "OutOfOfficeNotificationMessage": { + "name": "OutOfOfficeNotificationMessage", + "since": 44, + "type": "AGGREGATED_TYPE", + "id": 1126, + "rootId": "CHR1dGFub3RhAARm", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1127, + "since": 44, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "message": { + "final": false, + "name": "message", + "id": 1129, + "since": 44, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "subject": { + "final": false, + "name": "subject", + "id": 1128, + "since": 44, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": false, + "name": "type", + "id": 1130, + "since": 44, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "OutOfOfficeNotificationRecipientList": { + "name": "OutOfOfficeNotificationRecipientList", + "since": 44, + "type": "AGGREGATED_TYPE", + "id": 1147, + "rootId": "CHR1dGFub3RhAAR7", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1148, + "since": 44, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 1149, + "since": 44, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "OutOfOfficeNotificationRecipient", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "PhishingMarkerWebsocketData": { + "name": "PhishingMarkerWebsocketData", + "since": 40, + "type": "DATA_TRANSFER_TYPE", + "id": 1034, + "rootId": "CHR1dGFub3RhAAQK", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1035, + "since": 40, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "lastId": { + "final": false, + "name": "lastId", + "id": 1036, + "since": 40, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "markers": { + "final": false, + "name": "markers", + "id": 1037, + "since": 40, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ReportedMailFieldMarker", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "PhotosRef": { + "name": "PhotosRef", + "since": 23, + "type": "AGGREGATED_TYPE", + "id": 853, + "rootId": "CHR1dGFub3RhAANV", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 854, + "since": 23, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "files": { + "final": true, + "name": "files", + "id": 855, + "since": 23, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ReceiveInfoServiceData": { + "name": "ReceiveInfoServiceData", + "since": 12, + "type": "DATA_TRANSFER_TYPE", + "id": 570, + "rootId": "CHR1dGFub3RhAAI6", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 571, + "since": 12, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": true, + "name": "language", + "id": 1121, + "since": 42, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "Recipients": { + "name": "Recipients", + "since": 58, + "type": "AGGREGATED_TYPE", + "id": 1277, + "rootId": "CHR1dGFub3RhAAT9", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1278, + "since": 58, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "bccRecipients": { + "final": true, + "name": "bccRecipients", + "id": 1281, + "since": 58, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + }, + "ccRecipients": { + "final": true, + "name": "ccRecipients", + "id": 1280, + "since": 58, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + }, + "toRecipients": { + "final": true, + "name": "toRecipients", + "id": 1279, + "since": 58, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "MailAddress", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "RemoteImapSyncInfo": { + "name": "RemoteImapSyncInfo", + "since": 1, + "type": "LIST_ELEMENT_TYPE", + "id": 183, + "rootId": "CHR1dGFub3RhAAC3", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 187, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 185, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 594, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 186, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "seen": { + "final": false, + "name": "seen", + "id": 189, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "message": { + "final": false, + "name": "message", + "id": 188, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ReportMailPostData": { + "name": "ReportMailPostData", + "since": 40, + "type": "DATA_TRANSFER_TYPE", + "id": 1066, + "rootId": "CHR1dGFub3RhAAQq", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1067, + "since": 40, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailSessionKey": { + "final": false, + "name": "mailSessionKey", + "id": 1068, + "since": 40, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "reportType": { + "final": false, + "name": "reportType", + "id": 1082, + "since": 41, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "mailId": { + "final": false, + "name": "mailId", + "id": 1069, + "since": 40, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "ReportedMailFieldMarker": { + "name": "ReportedMailFieldMarker", + "since": 40, + "type": "AGGREGATED_TYPE", + "id": 1023, + "rootId": "CHR1dGFub3RhAAP_", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1024, + "since": 40, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "marker": { + "final": false, + "name": "marker", + "id": 1025, + "since": 40, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "status": { + "final": false, + "name": "status", + "id": 1026, + "since": 40, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "SecureExternalRecipientKeyData": { + "name": "SecureExternalRecipientKeyData", + "since": 11, + "type": "AGGREGATED_TYPE", + "id": 532, + "rootId": "CHR1dGFub3RhAAIU", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 533, + "since": 11, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": true, + "name": "kdfVersion", + "id": 1324, + "since": 63, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 534, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "ownerEncBucketKey": { + "final": true, + "name": "ownerEncBucketKey", + "id": 599, + "since": 13, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "ownerKeyVersion": { + "final": true, + "name": "ownerKeyVersion", + "id": 1417, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "passwordVerifier": { + "final": true, + "name": "passwordVerifier", + "id": 536, + "since": 11, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "pwEncCommunicationKey": { + "final": true, + "name": "pwEncCommunicationKey", + "id": 540, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "salt": { + "final": true, + "name": "salt", + "id": 538, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "saltHash": { + "final": true, + "name": "saltHash", + "id": 539, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "userGroupKeyVersion": { + "final": false, + "name": "userGroupKeyVersion", + "id": 1445, + "since": 72, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "SendDraftData": { + "name": "SendDraftData", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 547, + "rootId": "CHR1dGFub3RhAAIj", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 548, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "bucketEncMailSessionKey": { + "final": true, + "name": "bucketEncMailSessionKey", + "id": 551, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "calendarMethod": { + "final": false, + "name": "calendarMethod", + "id": 1117, + "since": 42, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "language": { + "final": true, + "name": "language", + "id": 549, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailSessionKey": { + "final": true, + "name": "mailSessionKey", + "id": 550, + "since": 11, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "plaintext": { + "final": true, + "name": "plaintext", + "id": 675, + "since": 18, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "senderNameUnencrypted": { + "final": true, + "name": "senderNameUnencrypted", + "id": 552, + "since": 11, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "sessionEncEncryptionAuthStatus": { + "final": true, + "name": "sessionEncEncryptionAuthStatus", + "id": 1444, + "since": 71, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "attachmentKeyData": { + "final": true, + "name": "attachmentKeyData", + "id": 555, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "AttachmentKeyData", + "dependency": null + }, + "internalRecipientKeyData": { + "final": true, + "name": "internalRecipientKeyData", + "id": 553, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InternalRecipientKeyData", + "dependency": null + }, + "mail": { + "final": true, + "name": "mail", + "id": 556, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + }, + "secureExternalRecipientKeyData": { + "final": true, + "name": "secureExternalRecipientKeyData", + "id": 554, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "SecureExternalRecipientKeyData", + "dependency": null + }, + "symEncInternalRecipientKeyData": { + "final": true, + "name": "symEncInternalRecipientKeyData", + "id": 1353, + "since": 66, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "SymEncInternalRecipientKeyData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "SendDraftReturn": { + "name": "SendDraftReturn", + "since": 11, + "type": "DATA_TRANSFER_TYPE", + "id": 557, + "rootId": "CHR1dGFub3RhAAIt", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 558, + "since": 11, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "messageId": { + "final": false, + "name": "messageId", + "id": 559, + "since": 11, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "sentDate": { + "final": false, + "name": "sentDate", + "id": 560, + "since": 11, + "type": "Date", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "notifications": { + "final": false, + "name": "notifications", + "id": 561, + "since": 11, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "NotificationMail", + "dependency": null + }, + "sentMail": { + "final": true, + "name": "sentMail", + "id": 562, + "since": 11, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "SharedGroupData": { + "name": "SharedGroupData", + "since": 38, + "type": "AGGREGATED_TYPE", + "id": 992, + "rootId": "CHR1dGFub3RhAAPg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 993, + "since": 38, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "bucketEncInvitationSessionKey": { + "final": false, + "name": "bucketEncInvitationSessionKey", + "id": 998, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "capability": { + "final": false, + "name": "capability", + "id": 994, + "since": 38, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "sessionEncInviterName": { + "final": false, + "name": "sessionEncInviterName", + "id": 997, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sessionEncSharedGroupKey": { + "final": false, + "name": "sessionEncSharedGroupKey", + "id": 995, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sessionEncSharedGroupName": { + "final": false, + "name": "sessionEncSharedGroupName", + "id": 996, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sharedGroup": { + "final": false, + "name": "sharedGroup", + "id": 1001, + "since": 38, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupEncInviterGroupInfoKey": { + "final": true, + "name": "sharedGroupEncInviterGroupInfoKey", + "id": 999, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupEncSharedGroupInfoKey": { + "final": true, + "name": "sharedGroupEncSharedGroupInfoKey", + "id": 1000, + "since": 38, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "sharedGroupKeyVersion": { + "final": true, + "name": "sharedGroupKeyVersion", + "id": 1420, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "SpamResults": { + "name": "SpamResults", + "since": 48, + "type": "AGGREGATED_TYPE", + "id": 1217, + "rootId": "CHR1dGFub3RhAATB", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1218, + "since": 48, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "list": { + "final": true, + "name": "list", + "id": 1219, + "since": 48, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "SpamResult", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "Subfiles": { + "name": "Subfiles", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 11, + "rootId": "CHR1dGFub3RhAAs", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 12, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "files": { + "final": true, + "name": "files", + "id": 27, + "since": 1, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "File", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "SymEncInternalRecipientKeyData": { + "name": "SymEncInternalRecipientKeyData", + "since": 66, + "type": "AGGREGATED_TYPE", + "id": 1347, + "rootId": "CHR1dGFub3RhAAVD", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 1348, + "since": 66, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": true, + "name": "mailAddress", + "id": 1349, + "since": 66, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "symEncBucketKey": { + "final": true, + "name": "symEncBucketKey", + "id": 1350, + "since": 66, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "symKeyVersion": { + "final": false, + "name": "symKeyVersion", + "id": 1435, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "keyGroup": { + "final": true, + "name": "keyGroup", + "id": 1351, + "since": 66, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "TemplateGroupRoot": { + "name": "TemplateGroupRoot", + "since": 45, + "type": "ELEMENT_TYPE", + "id": 1181, + "rootId": "CHR1dGFub3RhAASd", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1185, + "since": 45, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 1183, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 1187, + "since": 45, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 1186, + "since": 45, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1412, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 1184, + "since": 45, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "knowledgeBase": { + "final": true, + "name": "knowledgeBase", + "id": 1189, + "since": 45, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "KnowledgeBaseEntry", + "dependency": null + }, + "templates": { + "final": true, + "name": "templates", + "id": 1188, + "since": 45, + "type": "LIST_ASSOCIATION", + "cardinality": "One", + "refType": "EmailTemplate", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "TranslationGetIn": { + "name": "TranslationGetIn", + "since": 70, + "type": "DATA_TRANSFER_TYPE", + "id": 1436, + "rootId": "CHR1dGFub3RhAAWc", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1437, + "since": 70, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "lang": { + "final": true, + "name": "lang", + "id": 1438, + "since": 70, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "TranslationGetOut": { + "name": "TranslationGetOut", + "since": 70, + "type": "DATA_TRANSFER_TYPE", + "id": 1439, + "rootId": "CHR1dGFub3RhAAWf", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1440, + "since": 70, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "giftCardSubject": { + "final": false, + "name": "giftCardSubject", + "id": 1441, + "since": 70, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "invitationSubject": { + "final": false, + "name": "invitationSubject", + "id": 1442, + "since": 70, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "TutanotaProperties": { + "name": "TutanotaProperties", + "since": 1, + "type": "ELEMENT_TYPE", + "id": 216, + "rootId": "CHR1dGFub3RhAADY", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 220, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 218, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 598, + "since": 13, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 597, + "since": 13, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1398, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 219, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "customEmailSignature": { + "final": false, + "name": "customEmailSignature", + "id": 471, + "since": 9, + "type": "String", + "cardinality": "One", + "encrypted": true + }, + "defaultSender": { + "final": false, + "name": "defaultSender", + "id": 469, + "since": 8, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "defaultUnconfidential": { + "final": false, + "name": "defaultUnconfidential", + "id": 470, + "since": 8, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "emailSignatureType": { + "final": false, + "name": "emailSignatureType", + "id": 472, + "since": 9, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "lastSeenAnnouncement": { + "final": false, + "name": "lastSeenAnnouncement", + "id": 897, + "since": 30, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "noAutomaticContacts": { + "final": false, + "name": "noAutomaticContacts", + "id": 568, + "since": 11, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "notificationMailLanguage": { + "final": false, + "name": "notificationMailLanguage", + "id": 418, + "since": 4, + "type": "String", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "sendPlaintextOnly": { + "final": false, + "name": "sendPlaintextOnly", + "id": 676, + "since": 18, + "type": "Boolean", + "cardinality": "One", + "encrypted": true + }, + "userEncEntropy": { + "final": false, + "name": "userEncEntropy", + "id": 410, + "since": 2, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "userKeyVersion": { + "final": false, + "name": "userKeyVersion", + "id": 1434, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "imapSyncConfig": { + "final": false, + "name": "imapSyncConfig", + "id": 222, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "ImapSyncConfiguration", + "dependency": null + }, + "inboxRules": { + "final": false, + "name": "inboxRules", + "id": 578, + "since": 12, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "InboxRule", + "dependency": null + }, + "lastPushedMail": { + "final": false, + "name": "lastPushedMail", + "id": 221, + "since": 1, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Mail", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UpdateMailFolderData": { + "name": "UpdateMailFolderData", + "since": 59, + "type": "DATA_TRANSFER_TYPE", + "id": 1311, + "rootId": "CHR1dGFub3RhAAUf", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1312, + "since": 59, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "folder": { + "final": false, + "name": "folder", + "id": 1313, + "since": 59, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "MailFolder", + "dependency": null + }, + "newParent": { + "final": false, + "name": "newParent", + "id": 1314, + "since": 59, + "type": "LIST_ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "MailFolder", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UserAccountCreateData": { + "name": "UserAccountCreateData", + "since": 16, + "type": "DATA_TRANSFER_TYPE", + "id": 663, + "rootId": "CHR1dGFub3RhAAKX", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 664, + "since": 16, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "date": { + "final": false, + "name": "date", + "id": 665, + "since": 16, + "type": "Date", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "userData": { + "final": false, + "name": "userData", + "id": 666, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "UserAccountUserData", + "dependency": null + }, + "userGroupData": { + "final": false, + "name": "userGroupData", + "id": 667, + "since": 16, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "InternalGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UserAccountUserData": { + "name": "UserAccountUserData", + "since": 16, + "type": "AGGREGATED_TYPE", + "id": 622, + "rootId": "CHR1dGFub3RhAAJu", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 623, + "since": 16, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "contactEncContactListSessionKey": { + "final": false, + "name": "contactEncContactListSessionKey", + "id": 637, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "customerEncContactGroupInfoSessionKey": { + "final": false, + "name": "customerEncContactGroupInfoSessionKey", + "id": 640, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "customerEncFileGroupInfoSessionKey": { + "final": false, + "name": "customerEncFileGroupInfoSessionKey", + "id": 641, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "customerEncMailGroupInfoSessionKey": { + "final": false, + "name": "customerEncMailGroupInfoSessionKey", + "id": 639, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "customerKeyVersion": { + "final": false, + "name": "customerKeyVersion", + "id": 1426, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "encryptedName": { + "final": false, + "name": "encryptedName", + "id": 625, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "fileEncFileSystemSessionKey": { + "final": false, + "name": "fileEncFileSystemSessionKey", + "id": 638, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "kdfVersion": { + "final": false, + "name": "kdfVersion", + "id": 1322, + "since": 63, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "mailAddress": { + "final": false, + "name": "mailAddress", + "id": 624, + "since": 16, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "mailEncMailBoxSessionKey": { + "final": false, + "name": "mailEncMailBoxSessionKey", + "id": 636, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "pwEncUserGroupKey": { + "final": false, + "name": "pwEncUserGroupKey", + "id": 629, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeEncUserGroupKey": { + "final": false, + "name": "recoverCodeEncUserGroupKey", + "id": 893, + "since": 29, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "recoverCodeVerifier": { + "final": false, + "name": "recoverCodeVerifier", + "id": 894, + "since": 29, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "salt": { + "final": false, + "name": "salt", + "id": 626, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncContactGroupKey": { + "final": false, + "name": "userEncContactGroupKey", + "id": 632, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncCustomerGroupKey": { + "final": false, + "name": "userEncCustomerGroupKey", + "id": 630, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncEntropy": { + "final": false, + "name": "userEncEntropy", + "id": 634, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncFileGroupKey": { + "final": false, + "name": "userEncFileGroupKey", + "id": 633, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncMailGroupKey": { + "final": false, + "name": "userEncMailGroupKey", + "id": 631, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncRecoverCode": { + "final": false, + "name": "userEncRecoverCode", + "id": 892, + "since": 29, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncTutanotaPropertiesSessionKey": { + "final": false, + "name": "userEncTutanotaPropertiesSessionKey", + "id": 635, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "verifier": { + "final": false, + "name": "verifier", + "id": 627, + "since": 16, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "tutanota", + "version": "74" + }, + "UserAreaGroupData": { + "name": "UserAreaGroupData", + "since": 33, + "type": "AGGREGATED_TYPE", + "id": 956, + "rootId": "CHR1dGFub3RhAAO8", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 957, + "since": 33, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "adminEncGroupKey": { + "final": false, + "name": "adminEncGroupKey", + "id": 959, + "since": 33, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "adminKeyVersion": { + "final": false, + "name": "adminKeyVersion", + "id": 1423, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "customerEncGroupInfoSessionKey": { + "final": false, + "name": "customerEncGroupInfoSessionKey", + "id": 960, + "since": 33, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "customerKeyVersion": { + "final": false, + "name": "customerKeyVersion", + "id": 1424, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "groupEncGroupRootSessionKey": { + "final": false, + "name": "groupEncGroupRootSessionKey", + "id": 958, + "since": 33, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "groupInfoEncName": { + "final": false, + "name": "groupInfoEncName", + "id": 962, + "since": 33, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userEncGroupKey": { + "final": false, + "name": "userEncGroupKey", + "id": 961, + "since": 33, + "type": "Bytes", + "cardinality": "One", + "encrypted": false + }, + "userKeyVersion": { + "final": false, + "name": "userKeyVersion", + "id": 1425, + "since": 69, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "adminGroup": { + "final": true, + "name": "adminGroup", + "id": 963, + "since": 33, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "ZeroOrOne", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UserAreaGroupDeleteData": { + "name": "UserAreaGroupDeleteData", + "since": 45, + "type": "DATA_TRANSFER_TYPE", + "id": 1190, + "rootId": "CHR1dGFub3RhAASm", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 1191, + "since": 45, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "group": { + "final": false, + "name": "group", + "id": 1192, + "since": 45, + "type": "ELEMENT_ASSOCIATION", + "cardinality": "One", + "refType": "Group", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UserAreaGroupPostData": { + "name": "UserAreaGroupPostData", + "since": 33, + "type": "DATA_TRANSFER_TYPE", + "id": 964, + "rootId": "CHR1dGFub3RhAAPE", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 965, + "since": 33, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "groupData": { + "final": false, + "name": "groupData", + "id": 966, + "since": 33, + "type": "AGGREGATION", + "cardinality": "One", + "refType": "UserAreaGroupData", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + }, + "UserSettingsGroupRoot": { + "name": "UserSettingsGroupRoot", + "since": 34, + "type": "ELEMENT_TYPE", + "id": 972, + "rootId": "CHR1dGFub3RhAAPM", + "versioned": false, + "encrypted": true, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 976, + "since": 34, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "_id": { + "final": true, + "name": "_id", + "id": 974, + "since": 34, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "_ownerEncSessionKey": { + "final": true, + "name": "_ownerEncSessionKey", + "id": 978, + "since": 34, + "type": "Bytes", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerGroup": { + "final": true, + "name": "_ownerGroup", + "id": 977, + "since": 34, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_ownerKeyVersion": { + "final": true, + "name": "_ownerKeyVersion", + "id": 1403, + "since": 69, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + }, + "_permissions": { + "final": true, + "name": "_permissions", + "id": 975, + "since": 34, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "startOfTheWeek": { + "final": false, + "name": "startOfTheWeek", + "id": 981, + "since": 34, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "timeFormat": { + "final": false, + "name": "timeFormat", + "id": 980, + "since": 34, + "type": "Number", + "cardinality": "One", + "encrypted": true + }, + "usageDataOptedIn": { + "final": false, + "name": "usageDataOptedIn", + "id": 1234, + "since": 54, + "type": "Boolean", + "cardinality": "ZeroOrOne", + "encrypted": true + } + }, + "associations": { + "groupSettings": { + "final": false, + "name": "groupSettings", + "id": 979, + "since": 34, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "GroupSettings", + "dependency": null + } + }, + "app": "tutanota", + "version": "74" + } +} diff --git a/tuta-sdk/rust/src/type_models/usage.json b/tuta-sdk/rust/src/type_models/usage.json new file mode 100644 index 000000000000..73c048d2fb4d --- /dev/null +++ b/tuta-sdk/rust/src/type_models/usage.json @@ -0,0 +1,403 @@ +{ + "UsageTestAssignment": { + "name": "UsageTestAssignment", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 56, + "rootId": "BXVzYWdlADg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 57, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 59, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "sendPings": { + "final": false, + "name": "sendPings", + "id": 61, + "since": 1, + "type": "Boolean", + "cardinality": "One", + "encrypted": false + }, + "testId": { + "final": true, + "name": "testId", + "id": 58, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "variant": { + "final": true, + "name": "variant", + "id": 60, + "since": 1, + "type": "Number", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": { + "stages": { + "final": false, + "name": "stages", + "id": 62, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "UsageTestStage", + "dependency": null + } + }, + "app": "usage", + "version": "2" + }, + "UsageTestAssignmentIn": { + "name": "UsageTestAssignmentIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 53, + "rootId": "BXVzYWdlADU", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 54, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "testDeviceId": { + "final": false, + "name": "testDeviceId", + "id": 55, + "since": 1, + "type": "GeneratedId", + "cardinality": "ZeroOrOne", + "encrypted": false + } + }, + "associations": {}, + "app": "usage", + "version": "2" + }, + "UsageTestAssignmentOut": { + "name": "UsageTestAssignmentOut", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 63, + "rootId": "BXVzYWdlAD8", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 64, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "testDeviceId": { + "final": false, + "name": "testDeviceId", + "id": 65, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "assignments": { + "final": false, + "name": "assignments", + "id": 66, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "UsageTestAssignment", + "dependency": null + } + }, + "app": "usage", + "version": "2" + }, + "UsageTestMetricConfig": { + "name": "UsageTestMetricConfig", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 12, + "rootId": "BXVzYWdlAAw", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 13, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 14, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "type": { + "final": true, + "name": "type", + "id": 15, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "configValues": { + "final": false, + "name": "configValues", + "id": 16, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "UsageTestMetricConfigValue", + "dependency": null + } + }, + "app": "usage", + "version": "2" + }, + "UsageTestMetricConfigValue": { + "name": "UsageTestMetricConfigValue", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 8, + "rootId": "BXVzYWdlAAg", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 9, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "key": { + "final": false, + "name": "key", + "id": 10, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": false, + "name": "value", + "id": 11, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "usage", + "version": "2" + }, + "UsageTestMetricData": { + "name": "UsageTestMetricData", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 17, + "rootId": "BXVzYWdlABE", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 18, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": true, + "name": "name", + "id": 19, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + }, + "value": { + "final": true, + "name": "value", + "id": 20, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": {}, + "app": "usage", + "version": "2" + }, + "UsageTestParticipationIn": { + "name": "UsageTestParticipationIn", + "since": 1, + "type": "DATA_TRANSFER_TYPE", + "id": 80, + "rootId": "BXVzYWdlAFA", + "versioned": false, + "encrypted": false, + "values": { + "_format": { + "final": false, + "name": "_format", + "id": 81, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "stage": { + "final": false, + "name": "stage", + "id": 83, + "since": 1, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "testDeviceId": { + "final": false, + "name": "testDeviceId", + "id": 84, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + }, + "testId": { + "final": false, + "name": "testId", + "id": 82, + "since": 1, + "type": "GeneratedId", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "metrics": { + "final": false, + "name": "metrics", + "id": 85, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "UsageTestMetricData", + "dependency": null + } + }, + "app": "usage", + "version": "2" + }, + "UsageTestStage": { + "name": "UsageTestStage", + "since": 1, + "type": "AGGREGATED_TYPE", + "id": 35, + "rootId": "BXVzYWdlACM", + "versioned": false, + "encrypted": false, + "values": { + "_id": { + "final": true, + "name": "_id", + "id": 36, + "since": 1, + "type": "CustomId", + "cardinality": "One", + "encrypted": false + }, + "maxPings": { + "final": false, + "name": "maxPings", + "id": 88, + "since": 2, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "minPings": { + "final": false, + "name": "minPings", + "id": 87, + "since": 2, + "type": "Number", + "cardinality": "One", + "encrypted": false + }, + "name": { + "final": false, + "name": "name", + "id": 37, + "since": 1, + "type": "String", + "cardinality": "One", + "encrypted": false + } + }, + "associations": { + "metrics": { + "final": false, + "name": "metrics", + "id": 38, + "since": 1, + "type": "AGGREGATION", + "cardinality": "Any", + "refType": "UsageTestMetricConfig", + "dependency": null + } + }, + "app": "usage", + "version": "2" + } +}