@secrecy/lib 1.0.0-dev.21 → 1.0.0-dev.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/README.md +0 -1
  3. package/__tests__/client/client.test.ts +81 -0
  4. package/__tests__/client/folder.test.ts +302 -0
  5. package/__tests__/client/mail.test.ts +476 -0
  6. package/__tests__/client/timing.test.ts +35 -0
  7. package/__tests__/client/utils.ts +41 -0
  8. package/__tests__/client/vFile.test.ts +207 -0
  9. package/__tests__/index.test.ts +171 -0
  10. package/commitlint.config.cjs +3 -0
  11. package/dist/index.d.ts +3857 -0
  12. package/dist/index.js +255 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/index.mjs +255 -0
  15. package/dist/index.mjs.map +1 -0
  16. package/docs/assets/css/main.css +2660 -0
  17. package/docs/assets/images/icons.png +0 -0
  18. package/docs/assets/images/icons@2x.png +0 -0
  19. package/docs/assets/images/widgets.png +0 -0
  20. package/docs/assets/images/widgets@2x.png +0 -0
  21. package/docs/assets/js/main.js +248 -0
  22. package/docs/assets/js/search.js +1 -0
  23. package/docs/classes/baseclient.baseclient-1.html +1165 -0
  24. package/docs/classes/client.secrecyclient.html +2527 -0
  25. package/docs/enums/index.sodium.base64_variants.html +205 -0
  26. package/docs/index.html +198 -0
  27. package/docs/interfaces/client_types.draftmail.html +335 -0
  28. package/docs/interfaces/client_types.filecontentbase.html +231 -0
  29. package/docs/interfaces/client_types.filecontentcloud.html +244 -0
  30. package/docs/interfaces/client_types.filecontentreceivedmail.html +244 -0
  31. package/docs/interfaces/client_types.filecontentsentmail.html +230 -0
  32. package/docs/interfaces/client_types.receivedmail.html +363 -0
  33. package/docs/interfaces/client_types.sentmail.html +335 -0
  34. package/docs/interfaces/crypto.keypair.html +202 -0
  35. package/docs/interfaces/index.sodium.cryptobox.html +185 -0
  36. package/docs/interfaces/index.sodium.cryptokx.html +185 -0
  37. package/docs/interfaces/index.sodium.keypair.html +199 -0
  38. package/docs/interfaces/index.sodium.messagetag.html +185 -0
  39. package/docs/interfaces/index.sodium.secretbox.html +185 -0
  40. package/docs/interfaces/index.sodium.stateaddress.html +171 -0
  41. package/docs/interfaces/index.sodium.stringcryptobox.html +185 -0
  42. package/docs/interfaces/index.sodium.stringcryptokx.html +185 -0
  43. package/docs/interfaces/index.sodium.stringkeypair.html +199 -0
  44. package/docs/interfaces/index.sodium.stringmessagetag.html +185 -0
  45. package/docs/interfaces/index.sodium.stringsecretbox.html +185 -0
  46. package/docs/interfaces/utils_store_buddy.storebuddy.html +333 -0
  47. package/docs/modules/baseclient.html +929 -0
  48. package/docs/modules/cache.html +185 -0
  49. package/docs/modules/client.html +207 -0
  50. package/docs/modules/client_convert_file.html +216 -0
  51. package/docs/modules/client_convert_folder.html +303 -0
  52. package/docs/modules/client_convert_vfile.html +216 -0
  53. package/docs/modules/client_helpers.html +311 -0
  54. package/docs/modules/client_storage.html +167 -0
  55. package/docs/modules/client_types.html +1227 -0
  56. package/docs/modules/client_types_file.html +233 -0
  57. package/docs/modules/client_types_filesonusersonapplications.html +168 -0
  58. package/docs/modules/client_types_folder.html +383 -0
  59. package/docs/modules/client_types_inputs.html +263 -0
  60. package/docs/modules/client_types_mail.html +181 -0
  61. package/docs/modules/client_types_queries.html +199 -0
  62. package/docs/modules/client_types_userappsettings.html +163 -0
  63. package/docs/modules/client_types_vfile.html +364 -0
  64. package/docs/modules/crypto.html +366 -0
  65. package/docs/modules/crypto_file.html +344 -0
  66. package/docs/modules/index.html +779 -0
  67. package/docs/modules/index.sodium.html +6039 -0
  68. package/docs/modules/minify.html +183 -0
  69. package/docs/modules/minify_lz4.html +279 -0
  70. package/docs/modules/popuptools.html +259 -0
  71. package/docs/modules/sodium.html +167 -0
  72. package/docs/modules/utils.html +219 -0
  73. package/docs/modules/utils_store_buddy.html +208 -0
  74. package/docs/modules/utils_time.html +330 -0
  75. package/docs/modules/worker_md5.html +156 -0
  76. package/docs/modules/worker_sodium.html +231 -0
  77. package/docs/modules/worker_workercodes.html +157 -0
  78. package/docs/modules.html +235 -0
  79. package/index.html +21 -0
  80. package/jest.config.ts +27 -0
  81. package/jest.setup.ts +6 -0
  82. package/package.json +39 -47
  83. package/release.config.cjs +15 -0
  84. package/tsup.config.ts +23 -0
  85. package/lib/BaseClient.d.ts +0 -274
  86. package/lib/BaseClient.js +0 -1837
  87. package/lib/PopupTools.d.ts +0 -17
  88. package/lib/PopupTools.js +0 -213
  89. package/lib/ZeusThunder.d.ts +0 -2
  90. package/lib/ZeusThunder.js +0 -112
  91. package/lib/cache.d.ts +0 -7
  92. package/lib/cache.js +0 -5
  93. package/lib/client/admin/index.d.ts +0 -11
  94. package/lib/client/admin/index.js +0 -163
  95. package/lib/client/convert/file.d.ts +0 -5
  96. package/lib/client/convert/file.js +0 -39
  97. package/lib/client/convert/folder.d.ts +0 -8
  98. package/lib/client/convert/folder.js +0 -264
  99. package/lib/client/convert/mail.d.ts +0 -3
  100. package/lib/client/convert/mail.js +0 -46
  101. package/lib/client/convert/vFile.d.ts +0 -5
  102. package/lib/client/convert/vFile.js +0 -164
  103. package/lib/client/helpers.d.ts +0 -23
  104. package/lib/client/helpers.js +0 -116
  105. package/lib/client/index.d.ts +0 -172
  106. package/lib/client/index.js +0 -4501
  107. package/lib/client/storage.d.ts +0 -7
  108. package/lib/client/storage.js +0 -12
  109. package/lib/client/types/File.d.ts +0 -21
  110. package/lib/client/types/File.js +0 -3
  111. package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  112. package/lib/client/types/FilesOnUsersOnApplications.js +0 -3
  113. package/lib/client/types/Folder.d.ts +0 -68
  114. package/lib/client/types/Folder.js +0 -7
  115. package/lib/client/types/Inputs.d.ts +0 -21
  116. package/lib/client/types/Inputs.js +0 -3
  117. package/lib/client/types/UserAppNotifications.d.ts +0 -6
  118. package/lib/client/types/UserAppNotifications.js +0 -3
  119. package/lib/client/types/UserAppSettings.d.ts +0 -7
  120. package/lib/client/types/UserAppSettings.js +0 -3
  121. package/lib/client/types/VFile.d.ts +0 -62
  122. package/lib/client/types/VFile.js +0 -4
  123. package/lib/client/types/index.d.ts +0 -154
  124. package/lib/client/types/index.js +0 -10
  125. package/lib/client/types/queries.d.ts +0 -535
  126. package/lib/client/types/queries.js +0 -192
  127. package/lib/crypto/file.d.ts +0 -14
  128. package/lib/crypto/file.js +0 -291
  129. package/lib/crypto/index.d.ts +0 -12
  130. package/lib/crypto/index.js +0 -37
  131. package/lib/error.d.ts +0 -30
  132. package/lib/error.js +0 -3
  133. package/lib/index.d.ts +0 -13
  134. package/lib/index.js +0 -42
  135. package/lib/minify/index.d.ts +0 -2
  136. package/lib/minify/index.js +0 -28
  137. package/lib/minify/lz4.d.ts +0 -5
  138. package/lib/minify/lz4.js +0 -633
  139. package/lib/sodium.d.ts +0 -3
  140. package/lib/sodium.js +0 -28
  141. package/lib/utils/store-buddy.d.ts +0 -14
  142. package/lib/utils/store-buddy.js +0 -69
  143. package/lib/utils/time.d.ts +0 -10
  144. package/lib/utils/time.js +0 -22
  145. package/lib/utils.d.ts +0 -4
  146. package/lib/utils.js +0 -188
  147. package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
  148. package/lib/worker/__mock__/sodium.worker.js +0 -46
  149. package/lib/worker/md5.d.ts +0 -1
  150. package/lib/worker/md5.js +0 -43
  151. package/lib/worker/sodium.d.ts +0 -3
  152. package/lib/worker/sodium.js +0 -155
  153. package/lib/worker/workerCodes.d.ts +0 -2
  154. package/lib/worker/workerCodes.js +0 -3
  155. package/lib/zeus/const.d.ts +0 -2
  156. package/lib/zeus/const.js +0 -1895
  157. package/lib/zeus/index.d.ts +0 -2798
  158. package/lib/zeus/index.js +0 -549
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/index.ts","../src/BaseClient.ts","../src/cache.ts","../src/utils/store-buddy.ts","../src/client/storage.ts","../src/zeus/const.ts","../src/zeus/index.ts","../src/ZeusThunder.ts","../src/sodium.ts","../src/crypto/file.ts","../src/utils.ts","../src/minify/lz4.ts","../src/minify/index.ts","../src/crypto/index.ts","../src/client/convert/file.ts","../src/client/convert/vFile.ts","../src/client/convert/folder.ts","../src/worker/workerCodes.ts","../src/worker/md5.ts","../src/worker/sodium.ts","../src/client/types/queries.ts","../src/client/convert/mail.ts","../src/client/admin/index.ts","../src/client/types/Folder.ts","../src/client/types/VFile.ts","../src/PopupTools.ts","../src/client/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { MailType } from \"./../zeus/index\";\nimport type { DownloadProgress } from \"ky\";\nimport ky from \"ky\";\nimport axios from \"axios\";\nimport type { SuccessResponse } from \"../BaseClient.js\";\nimport { BaseClient } from \"../BaseClient.js\";\nimport { vFilesCache, foldersCache, filesCache, usersCache } from \"../cache.js\";\nimport type { Progress } from \"../crypto/file.js\";\nimport { secretstreamKeygen, encryptSecretstream } from \"../crypto/file.js\";\nimport { compress, uncompress } from \"../minify/index.js\";\nimport {\n gqlFolderToExternal,\n gqlFolderToExternalFolderFull\n} from \"./convert/folder.js\";\nimport {\n gqlVFileToExternal,\n gqlVFileToInternal,\n internalVFileToVFile\n} from \"./convert/vFile.js\";\nimport type {\n MailFileInput,\n ReceivedMail,\n SentMail,\n Folder,\n VFileWithFolder,\n FolderFull,\n UserAppSettings,\n UserAppNotifications,\n File as SecrecyFile,\n WaitingReceivedMail,\n DraftMail,\n MailRecipientInput,\n VFile,\n ShareFoldersInput,\n NameKeyInput,\n NameKeyInputFolders,\n Mail,\n ShareFileInHistoryInput,\n FilePartResponse,\n FileContentPart\n} from \"./types/index.js\";\nimport { gqlFileToExternal } from \"./convert/file.js\";\nimport { sodium } from \"../sodium.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport { decryptCryptoBox, encryptCryptoBox } from \"../crypto/index.js\";\nimport type { SecrecyEnv } from \"./helpers.js\";\nimport { generate } from \"shortid\";\nimport { md5 } from \"../worker/md5.js\";\nimport { encrypt, decrypt } from \"../worker/sodium.js\";\nimport { chunks, concatenate, enumerate, promiseAllLimit } from \"../utils.js\";\nimport {\n gqlFileQuery,\n gqlFolderQuery,\n gqlFolderFullQuery,\n gqlMailQuery,\n gqlVFileQuery,\n gqlVFileWithFolderQuery\n} from \"./types/queries.js\";\nimport type { Rights } from \"../zeus/index.js\";\nimport { convertInternalMailToExternal } from \"./convert/mail.js\";\n// import { md5 } from \"../worker/index.js\";\n// import { firstValueFrom, of } from \"rxjs\";\n\nimport type {\n ErrorAccessDenied,\n ErrorNotFound,\n ErrorBasic,\n ErrorNotExist,\n ErrorLimit\n} from \"../error.js\";\n\nexport type NewMail = {\n body: string;\n subject: string;\n files: { id: string; name: string }[];\n recipientsIds: string[];\n replyTo?: string | null | undefined;\n};\nexport type ProgressCallback = (progress: Progress) => Promise<void>;\n\nconst encryptName = async (name: string, nameKey: string): Promise<string> => {\n const { data } = await encryptSecretstream(\n sodium.from_hex(nameKey),\n sodium.from_string(name)\n );\n const nameEncrypted = sodium.to_hex(data);\n return nameEncrypted;\n};\n\nexport class SecrecyClient extends BaseClient {\n jwt: string;\n\n #keys: KeyPair;\n\n constructor(\n uaSession: string,\n uaKeys: KeyPair,\n uaJwt: string,\n env: SecrecyEnv\n ) {\n super(uaSession, env);\n this.jwt = uaJwt;\n this.#keys = uaKeys;\n }\n\n get publicKey(): string {\n return this.#keys.publicKey;\n }\n\n async addFileToHistory({\n fileId,\n vFileId\n }: {\n fileId: string;\n vFileId: string;\n }): Promise<\n SuccessResponse<VFile> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { addFileToHistory } = await this.client(\"mutation\")({\n addFileToHistory: [\n {\n fileId,\n vFileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on AddFileToHistoryResponse\": {\n __typename: true,\n addFileToHistory: {\n gqlVFileQuery\n }\n }\n }\n ]\n });\n\n if (!addFileToHistory) {\n return null;\n }\n\n if (addFileToHistory.__typename === \"ErrorAccessDenied\") {\n return addFileToHistory;\n }\n\n if (addFileToHistory.__typename === \"ErrorNotExist\") {\n return addFileToHistory;\n }\n\n const vFile = await gqlVFileToInternal(\n addFileToHistory.addFileToHistory,\n this.#keys\n );\n const file = vFile.history.find(f => f.id === fileId);\n if (file) {\n const users = vFile.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n );\n const input: ShareFileInHistoryInput = {\n fileId: file.id,\n users: users.map(([u]) => ({\n id: u.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n // TODO: cette erreur\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n sodium.from_hex(file.user!.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n }))\n };\n\n await this.client(\"mutation\")({\n shareFileInHistory: [\n { input, vFileId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareFileInHistoryResponse\": {\n __typename: true,\n shareFileInHistory: true\n }\n }\n ]\n });\n }\n const result = internalVFileToVFile(vFile);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<string>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | null\n > {\n const fileKey = secretstreamKeygen();\n const fileBuffer =\n file instanceof File ? new Uint8Array(await file.arrayBuffer()) : file;\n const compressed = compress(fileBuffer);\n\n const {\n data: encryptedFile,\n md5: md5File,\n md5Encrypted\n } = await encrypt(fileKey, compressed, encryptProgress, signal);\n\n const encryptedFileKey = encryptCryptoBox(\n fileKey,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const { uploadFile } = await this.client(\"mutation\")({\n uploadFile: [\n {\n fileSize: encryptedFile.byteLength,\n fileSizeBefore: fileBuffer.byteLength,\n fileKey: sodium.to_hex(encryptedFileKey),\n md5Encrypted,\n md5: md5File\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileResponse\": {\n __typename: true,\n uploadFile: {\n fileId: true,\n filePartSize: true,\n parts: {\n fields: true,\n order: true,\n url: true\n }\n }\n }\n }\n ]\n });\n\n if (!uploadFile) {\n return null;\n }\n\n if (uploadFile.__typename === \"ErrorAccessDenied\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorLimit\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorNotFound\") {\n return uploadFile;\n }\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: 0,\n percent: 0\n });\n\n if (uploadFile.uploadFile.parts.length === 0) {\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: encryptedFile.byteLength,\n percent: 1\n });\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFile.uploadFile.fileId\n };\n }\n\n const uploadPartEnded = async (\n md5: string,\n order: number\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFilePartEnd } = await this.client(\"mutation\")({\n uploadFilePartEnd: [\n {\n fileId: uploadFile.uploadFile.fileId,\n md5,\n order\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UploadFilePartEndResponse\": {\n __typename: true,\n uploadFilePartEnd: true\n }\n }\n ]\n });\n\n if (!uploadFilePartEnd) {\n return null;\n }\n\n if (uploadFilePartEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFilePartEnd;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFilePartEnd.uploadFilePartEnd\n };\n };\n\n const uploadEnded = async (): Promise<\n SuccessResponse<string> | ErrorAccessDenied | ErrorNotFound | null\n > => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFileEnd } = await this.client(\"mutation\")({\n uploadFileEnd: [\n {\n fileId: uploadFile.uploadFile.fileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileEndResponse\": {\n __typename: true,\n uploadFileEnd: true\n }\n }\n ]\n });\n\n if (!uploadFileEnd) {\n return null;\n }\n\n if (uploadFileEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFileEnd;\n }\n\n if (uploadFileEnd.__typename === \"ErrorNotFound\") {\n return uploadFileEnd;\n }\n\n if (!uploadFileEnd.uploadFileEnd) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFileEnd.uploadFileEnd\n };\n };\n\n const chunkParts = new Array<{\n order: number;\n data: Uint8Array;\n md5: string;\n }>();\n\n for (const [index, chunk] of enumerate(\n chunks(encryptedFile, Number(uploadFile.uploadFile.filePartSize))\n )) {\n chunkParts.push({\n order: index + 1,\n data: chunk,\n md5: await md5(chunk)\n });\n }\n\n const progressParts: Record<number, ProgressEvent> = {};\n const onProgress = (part: number, progressEvent: ProgressEvent): void => {\n progressParts[part] = progressEvent;\n const current = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.loaded,\n 0\n );\n uploadProgress?.({\n percent: current / encryptedFile.byteLength,\n total: encryptedFile.byteLength,\n current\n });\n };\n\n const byPart = async (part: FilePartResponse): Promise<void> => {\n if (!uploadFile.uploadFile) {\n return;\n }\n const formData = new FormData();\n const chunk = chunkParts.find(p => p.order === part.order);\n if (!chunk) {\n return;\n }\n for (const [key, value] of Object.entries(part.fields)) {\n formData.append(key, value);\n }\n formData.append(\n \"file\",\n new Blob([chunk.data]),\n `${uploadFile.uploadFile.fileId}-${chunk.order}`\n );\n\n await axios.post(part.url, formData, {\n onUploadProgress: progressEvent =>\n onProgress(part.order, progressEvent),\n signal\n });\n\n await uploadPartEnded(chunk.md5, chunk.order);\n // if ((e as any).response.status === 0) {\n // // TODO https://github.com/sindresorhus/ky/issues/305\n // } else {\n // throw e;\n // }\n };\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n await promiseAllLimit(\n 3,\n uploadFile.uploadFile.parts.map(p => (): Promise<void> => byPart(p))\n );\n\n const result = await uploadEnded();\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async uploadFileInCloud({\n file,\n name,\n folderId,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n name: string;\n folderId?: string;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<VFileWithFolder<SecrecyFile>>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | ErrorBasic\n | ErrorNotExist\n | null\n > {\n const fileId = await this.uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n });\n\n if (!fileId) {\n return null;\n }\n\n if (fileId.__typename === \"ErrorAccessDenied\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorLimit\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorNotFound\") {\n return fileId;\n }\n\n const result = await this.saveInCloud({\n fileId: fileId.data,\n name,\n folderId\n });\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorBasic\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotExist\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async logout(sessionId?: string | null | undefined): Promise<void> {\n vFilesCache.clear();\n filesCache.clear();\n foldersCache.clear();\n await super.logout(sessionId);\n }\n\n async createFolder({\n name,\n parentFolderId\n }: {\n name: string;\n parentFolderId?: string | null;\n }): Promise<\n SuccessResponse<FolderFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const key = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(key));\n const encryptedKey = encryptCryptoBox(\n key,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n const { createFolder } = await this.client(\"mutation\")({\n createFolder: [\n {\n name: encryptedName,\n parentFolderId,\n key: sodium.to_hex(encryptedKey)\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on CreateFolderResponse\": {\n __typename: true,\n createFolder: gqlFolderFullQuery\n }\n }\n ]\n });\n if (!createFolder) {\n //throw new Error(`Can't create folder`);\n return null;\n }\n\n if (createFolder.__typename === \"ErrorAccessDenied\") {\n return createFolder;\n }\n\n if (createFolder.__typename === \"ErrorNotExist\") {\n return createFolder;\n }\n\n if (!createFolder.createFolder) {\n return null;\n }\n\n const folder = await gqlFolderToExternalFolderFull(\n createFolder.createFolder,\n this.#keys\n );\n\n const users =\n folder.parentFolder?.users?.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n if (users.length) {\n await Promise.all(\n users.map(([u, rights]) =>\n this.shareFolder({\n folderId: folder.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folder\n };\n }\n\n async folder({\n id,\n deleted\n }: {\n id?: string | null | undefined;\n deleted?: boolean | null | undefined;\n } = {}): Promise<SuccessResponse<FolderFull> | ErrorAccessDenied | null> {\n const { folder } = await this.client(\"query\")({\n folder: [\n { deleted, id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FolderResponse\": {\n __typename: true,\n folder: gqlFolderFullQuery\n }\n }\n ]\n });\n if (!folder) {\n return null;\n }\n\n if (folder.__typename === \"ErrorAccessDenied\") {\n return folder;\n }\n if (!folder.folder) {\n return null;\n }\n const result = await gqlFolderToExternalFolderFull(\n folder.folder,\n this.#keys\n );\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async file({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<SecrecyFile> | ErrorAccessDenied | null> {\n const { file } = await this.client(\"query\")({\n file: [\n {\n id\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FileQueryResponse\": {\n __typename: true,\n file: gqlFileQuery\n }\n }\n ]\n });\n if (!file) {\n return null;\n }\n\n if (file.__typename === \"ErrorAccessDenied\") {\n return file;\n }\n\n if (!file.file) {\n return null;\n }\n\n const result = gqlFileToExternal(file.file, this.#keys);\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async vFile({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<VFileWithFolder> | ErrorAccessDenied | null> {\n const { vFile } = await this.client(\"query\")({\n vFile: [\n {\n id\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on VFileResponse\": {\n __typename: true,\n vFile: gqlVFileWithFolderQuery\n }\n }\n ]\n });\n if (!vFile) {\n return null;\n }\n\n if (vFile.__typename === \"ErrorAccessDenied\") {\n return vFile;\n }\n\n if (!vFile.vFile) {\n return null;\n }\n\n const result = await gqlVFileToExternal(vFile.vFile, this.#keys);\n\n return {\n __typename: \"SuccessResponse\",\n data: result as VFileWithFolder\n };\n }\n\n async mail({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<Mail> | ErrorAccessDenied | null> {\n const { mail } = await this.client(\"query\")({\n mail: [\n {\n id\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on QueryMailResponse\": {\n __typename: true,\n mail: gqlMailQuery\n }\n }\n ]\n });\n\n if (!mail) {\n return null;\n }\n\n if (mail.__typename === \"ErrorAccessDenied\") {\n return mail;\n }\n\n if (!mail.mail) {\n return null;\n }\n\n const result = convertInternalMailToExternal(mail.mail, this.#keys);\n\n if (!result) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async shareVFile({\n vFileId,\n userId,\n rights\n }: {\n vFileId: string;\n userId: string;\n rights: Rights;\n }): Promise<\n | SuccessResponse<boolean>\n | ErrorAccessDenied\n | ErrorNotExist\n | ErrorNotFound\n | null\n > {\n let vFile = vFilesCache.get(vFileId);\n\n if (!vFile) {\n await this.vFile({ id: vFileId });\n vFile = vFilesCache.get(vFileId);\n\n if (!vFile) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n }\n\n const user = await this.user({ userId, withPublicKey: true });\n if (!user) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n if (user.__typename !== \"SuccessResponse\") {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n const nameKey = sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(vFile.userApp.nameKey),\n user.data.publicKey,\n this.#keys.privateKey\n )\n );\n\n const history = new Array<{\n id: string;\n key: string;\n }>();\n\n for (const h of vFile.history) {\n if (!h.user) {\n continue;\n }\n history.push({\n id: h.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(h.user.key),\n user.data.publicKey,\n this.#keys.privateKey\n )\n )\n });\n }\n\n const { shareVFile } = await this.client(\"mutation\")({\n shareVFile: [\n {\n vFileId,\n userId,\n rights,\n nameKey,\n history\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareVFileResponse\": {\n __typename: true,\n shareVFile: true\n }\n }\n ]\n });\n\n if (!shareVFile) {\n return null;\n }\n\n if (shareVFile.__typename === \"ErrorAccessDenied\") {\n return shareVFile;\n }\n\n if (shareVFile.__typename === \"ErrorNotExist\") {\n return shareVFile;\n }\n\n if (shareVFile.__typename === \"ErrorNotFound\") {\n return shareVFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: shareVFile.shareVFile ?? false\n };\n }\n\n async sharedVFiles(): Promise<\n SuccessResponse<VFileWithFolder[]> | ErrorAccessDenied | null\n > {\n const { sharedVFiles } = await this.client(\"query\")({\n sharedVFiles: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on SharedVFilesResponse\": {\n __typename: true,\n sharedVFiles: gqlVFileWithFolderQuery\n }\n }\n });\n\n if (!sharedVFiles) {\n return null;\n }\n\n if (sharedVFiles.__typename === \"ErrorAccessDenied\") {\n return sharedVFiles;\n }\n\n const vFiles = new Array<VFileWithFolder>();\n\n for (const vFile of sharedVFiles.sharedVFiles) {\n vFiles.push(\n (await gqlVFileToExternal(vFile, this.#keys)) as VFileWithFolder\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: vFiles\n };\n }\n\n async vFilesSharedWithMe(): Promise<\n SuccessResponse<VFileWithFolder[]> | ErrorAccessDenied | null\n > {\n const { vFilesSharedWithMe } = await this.client(\"query\")({\n vFilesSharedWithMe: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on VFilesSharedWithMeResponse\": {\n __typename: true,\n vFilesSharedWithMe: gqlVFileWithFolderQuery\n }\n }\n });\n\n if (!vFilesSharedWithMe) {\n return null;\n }\n\n if (vFilesSharedWithMe.__typename === \"ErrorAccessDenied\") {\n return vFilesSharedWithMe;\n }\n\n const vFiles = new Array<VFileWithFolder>();\n\n for (const vFile of vFilesSharedWithMe.vFilesSharedWithMe) {\n vFiles.push(\n (await gqlVFileToExternal(vFile, this.#keys)) as VFileWithFolder\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: vFiles\n };\n }\n\n async deletedVFiles(): Promise<\n SuccessResponse<VFile[]> | ErrorAccessDenied | null\n > {\n const { deletedVFiles } = await this.client(\"query\")({\n deletedVFiles: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedVFilesResponse\": {\n __typename: true,\n deletedVFiles: gqlVFileQuery\n }\n }\n });\n\n if (!deletedVFiles) {\n return null;\n }\n\n if (deletedVFiles.__typename === \"ErrorAccessDenied\") {\n return deletedVFiles;\n }\n\n const vFiles = new Array<VFile>();\n\n for (const vFile of deletedVFiles.deletedVFiles) {\n vFiles.push((await gqlVFileToExternal(vFile, this.#keys)) as VFile);\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: vFiles\n };\n }\n\n async sharedFolders(): Promise<\n SuccessResponse<Folder[]> | ErrorAccessDenied | null\n > {\n const { sharedFolders } = await this.client(\"query\")({\n sharedFolders: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on SharedFoldersResponse\": {\n __typename: true,\n sharedFolders: gqlFolderQuery\n }\n }\n });\n\n if (!sharedFolders) {\n return null;\n }\n\n if (sharedFolders.__typename === \"ErrorAccessDenied\") {\n return sharedFolders;\n }\n\n const folders = new Array<Folder>();\n\n for (const folder of sharedFolders.sharedFolders) {\n folders.push(await gqlFolderToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folders\n };\n }\n\n async foldersSharedWithMe(): Promise<\n SuccessResponse<Folder[]> | ErrorAccessDenied | null\n > {\n const { foldersSharedWithMe } = await this.client(\"query\")({\n foldersSharedWithMe: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FolderSharedWithMeResponse\": {\n __typename: true,\n foldersSharedWithMe: gqlFolderQuery\n }\n }\n });\n\n if (!foldersSharedWithMe) {\n return null;\n }\n\n if (foldersSharedWithMe.__typename === \"ErrorAccessDenied\") {\n return foldersSharedWithMe;\n }\n\n const folders = new Array<Folder>();\n\n for (const folder of foldersSharedWithMe.foldersSharedWithMe) {\n folders.push(await gqlFolderToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folders\n };\n }\n\n async deletedFolders(): Promise<\n SuccessResponse<Folder[]> | ErrorAccessDenied | null\n > {\n const { deletedFolders } = await this.client(\"query\")({\n deletedFolders: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedFoldersResponse\": {\n __typename: true,\n deletedFolders: gqlFolderQuery\n }\n }\n });\n\n if (!deletedFolders) {\n return null;\n }\n\n if (deletedFolders.__typename === \"ErrorAccessDenied\") {\n return deletedFolders;\n }\n\n const folders = new Array<Folder>();\n\n for (const folder of deletedFolders.deletedFolders) {\n folders.push(await gqlFolderToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folders\n };\n }\n\n async deletedMails({\n mailType\n }: {\n mailType: MailType;\n }): Promise<SuccessResponse<Mail[]> | ErrorAccessDenied | null> {\n const { deletedMails } = await this.client(\"query\")({\n deletedMails: [\n { mailType },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedMailsResponse\": {\n __typename: true,\n deletedMails: gqlMailQuery\n }\n }\n ]\n });\n\n if (!deletedMails) {\n return null;\n }\n\n if (deletedMails.__typename === \"ErrorAccessDenied\") {\n return deletedMails;\n }\n\n const mails = new Array<Mail>();\n\n for (const m of deletedMails.deletedMails) {\n const mail = convertInternalMailToExternal(m, this.#keys);\n if (mail) {\n mails.push(mail);\n }\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: mails\n };\n }\n\n async shareFolder({\n folderId,\n userId,\n rights\n }: {\n folderId: string;\n userId: string;\n rights: Rights;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const user = await this.user({ userId, withPublicKey: true });\n\n if (!user) {\n return user;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n const { shareFolder } = await this.client(\"mutation\")({\n shareFolder: [\n { folderId, userId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareFolderResponse\": {\n __typename: true,\n vFiles: true,\n folders: true\n }\n }\n ]\n });\n\n if (!shareFolder) {\n return null;\n }\n\n if (shareFolder.__typename === \"ErrorAccessDenied\") {\n return shareFolder;\n }\n\n if (shareFolder.__typename === \"ErrorNotFound\") {\n return shareFolder;\n }\n\n const shareFolders: ShareFoldersInput = {\n vFiles: [],\n folders: []\n };\n\n for (const id of shareFolder.folders) {\n const nameKey = await this.perFolder(id, user.data.publicKey);\n if (nameKey) {\n shareFolders.folders.push(nameKey);\n }\n }\n\n for (const id of shareFolder.vFiles) {\n const vFileInput = await this.perVFile(id, user.data.publicKey);\n if (vFileInput) {\n shareFolders.vFiles.push(vFileInput);\n }\n }\n\n const { shareFolderFinish } = await this.client(\"mutation\")({\n shareFolderFinish: [\n {\n rights,\n userId,\n shareFolders\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareFolderFinishResponse\": {\n __typename: true,\n shareFolderFinish: true\n }\n }\n ]\n });\n\n if (!shareFolderFinish) {\n return null;\n }\n\n if (shareFolderFinish.__typename === \"ErrorAccessDenied\") {\n return shareFolderFinish;\n }\n\n if (shareFolderFinish.__typename === \"ErrorNotFound\") {\n return shareFolderFinish;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: shareFolderFinish.shareFolderFinish ?? false\n };\n }\n\n async updateFolder({\n folderId,\n name,\n isFavorite,\n deletedAt\n }: {\n folderId: string;\n name?: string | null | undefined;\n isFavorite?: boolean | null | undefined;\n deletedAt?: Date | null | undefined;\n }): Promise<\n SuccessResponse<FolderFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n let folder = foldersCache.get(folderId);\n if (!folder) {\n await this.folder({ id: folderId });\n folder = foldersCache.get(folderId);\n if (!folder) {\n throw `Can't find folder ${folderId}`;\n }\n }\n\n name = name\n ? folder.userApp?.nameKey\n ? await encryptName(name, folder.userApp.nameKey)\n : name\n : null;\n\n const { updateFolder } = await this.client(\"mutation\")({\n updateFolder: [\n {\n folderId,\n name,\n isFavorite,\n deletedAt\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on UpdateFolderResponse\": {\n __typename: true,\n updateFolder: gqlFolderFullQuery\n }\n }\n ]\n });\n\n if (!updateFolder) {\n //throw new Error(\"Can't update folder\");\n return null;\n }\n\n if (updateFolder.__typename === \"ErrorAccessDenied\") {\n return updateFolder;\n }\n\n if (updateFolder.__typename === \"ErrorNotExist\") {\n return updateFolder;\n }\n\n if (!updateFolder.updateFolder) {\n return null;\n }\n\n const result = await gqlFolderToExternalFolderFull(\n updateFolder.updateFolder,\n this.#keys\n );\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async updateAppNotifications(\n notifications: Partial<UserAppNotifications>\n ): Promise<SuccessResponse<UserAppNotifications> | ErrorAccessDenied | null> {\n const { updateAppNotifications } = await this.client(\"mutation\")({\n updateAppNotifications: [\n notifications,\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UpdateAppNotificationsResponse\": {\n __typename: true,\n updateAppNotifications: {\n enableAll: true,\n mail: true,\n cloud: true,\n disableAllUntil: true\n }\n }\n }\n ]\n });\n\n if (!updateAppNotifications) {\n return null;\n }\n\n if (updateAppNotifications.__typename === \"ErrorAccessDenied\") {\n return updateAppNotifications;\n }\n\n if (!updateAppNotifications.updateAppNotifications) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n cloud: updateAppNotifications.updateAppNotifications.cloud,\n enableAll: updateAppNotifications.updateAppNotifications.enableAll,\n mail: updateAppNotifications.updateAppNotifications.mail,\n disableAllUntil: updateAppNotifications.updateAppNotifications\n .disableAllUntil\n ? new Date(\n updateAppNotifications.updateAppNotifications.disableAllUntil\n )\n : null\n }\n };\n }\n\n async appNotifications(): Promise<\n | SuccessResponse<UserAppNotifications>\n | ErrorAccessDenied\n | ErrorNotFound\n | null\n > {\n const { appNotifications } = await this.client(\"query\")({\n appNotifications: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserAppNotifications\": {\n __typename: true,\n enableAll: true,\n mail: true,\n cloud: true,\n disableAllUntil: true\n }\n }\n });\n\n if (!appNotifications) {\n return null;\n }\n\n if (appNotifications.__typename === \"ErrorAccessDenied\") {\n return appNotifications;\n }\n\n if (appNotifications.__typename === \"ErrorNotFound\") {\n return appNotifications;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n enableAll: appNotifications.enableAll,\n mail: appNotifications.mail,\n cloud: appNotifications.cloud,\n disableAllUntil: appNotifications.disableAllUntil\n ? new Date(appNotifications.disableAllUntil)\n : null\n }\n };\n }\n\n async createMail(\n data: NewMail,\n customMessage?: string | null | undefined\n ): Promise<SuccessResponse<boolean> | ErrorBasic | ErrorAccessDenied | null> {\n const mail = await this.createDraftMail(data);\n if (!mail) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n if (mail.__typename === \"ErrorBasic\") {\n return mail;\n }\n\n if (mail.__typename === \"ErrorAccessDenied\") {\n return mail;\n }\n\n const result = await this.sendDraftMail(\n mail.data.mailIntegrityId,\n customMessage\n );\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorBasic\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async waitingReceivedMails(): Promise<\n SuccessResponse<WaitingReceivedMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n waitingReceivedMails: {\n date: true,\n attachmentsCount: true,\n sender: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n recipients: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n temporaryRecipients: {\n email: true\n }\n }\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (!user.user) {\n return null;\n }\n\n const result = user.user.waitingReceivedMails.map(m => ({\n id: generate(),\n ...m,\n date: new Date(m.date)\n }));\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async updateDraftMail(\n draftId: string,\n { body, subject, files, recipientsIds, replyTo }: Partial<NewMail>\n ): Promise<\n | SuccessResponse<DraftMail>\n | ErrorNotFound\n | ErrorAccessDenied\n | ErrorBasic\n | null\n > {\n const drafts = await this.draftMails();\n if (!drafts) {\n return null;\n }\n\n if (drafts.__typename !== \"SuccessResponse\") {\n return drafts;\n }\n const draft = drafts.data.find(d => d.mailIntegrityId === draftId);\n if (!draft) {\n throw new Error(`Invalid draft ${draftId}`);\n }\n let hashKey: string | null = null;\n let hash: string | null = null;\n if (body || subject) {\n hashKey = sodium.randombytes_buf(\n sodium.crypto_generichash_KEYBYTES,\n \"hex\"\n );\n hash = sodium.crypto_generichash(\n sodium.crypto_generichash_BYTES,\n JSON.stringify({ body, subject }),\n hashKey,\n \"hex\"\n );\n }\n const senderFiles = new Array<MailFileInput>();\n if (files) {\n for (const f of files) {\n let file = filesCache.get(f.id);\n if (!file) {\n await this.file({ id: f.id });\n file = filesCache.get(f.id);\n if (!file) {\n throw new Error(`File ${f.name} (${f.id}) does not exists`);\n }\n }\n if (!file.user) {\n continue;\n }\n senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.user.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n ),\n name: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(f.name),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n });\n }\n }\n\n const { updateDraftMail } = await this.client(\"mutation\")({\n updateDraftMail: [\n {\n draftId,\n recipients: recipientsIds,\n replyTo,\n body: body\n ? sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(body),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n : null,\n subject: subject\n ? sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(subject),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n : null,\n senderFiles,\n hash,\n hashKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on UpdateDraftMailResponse\": {\n __typename: true,\n updateDraftMail: gqlMailQuery\n }\n }\n ]\n });\n\n if (!updateDraftMail) {\n return null;\n }\n\n if (updateDraftMail.__typename === \"ErrorAccessDenied\") {\n return updateDraftMail;\n }\n\n if (updateDraftMail.__typename === \"ErrorBasic\") {\n return updateDraftMail;\n }\n\n if (!updateDraftMail.updateDraftMail) {\n return null;\n }\n\n const result = convertInternalMailToExternal(\n updateDraftMail.updateDraftMail,\n this.#keys\n ) as DraftMail;\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async deleteDraftMail(\n draftId: string\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteDraftMail } = await this.client(\"mutation\")({\n deleteDraftMail: [\n {\n draftId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteDraftMailResponse\": {\n __typename: true,\n deleteDraftMail: true\n }\n }\n ]\n });\n\n if (!deleteDraftMail) {\n return null;\n }\n\n if (deleteDraftMail.__typename === \"ErrorAccessDenied\") {\n return deleteDraftMail;\n }\n\n if (!deleteDraftMail.deleteDraftMail) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteDraftMail.deleteDraftMail ?? false\n };\n }\n\n async deleteVFileSharing({\n vFileId,\n userId\n }: {\n vFileId: string;\n userId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteVFileSharing } = await this.client(\"mutation\")({\n deleteVFileSharing: [\n {\n vFileId,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DeleteVFileSharingResponse\": {\n __typename: true,\n deleteVFileSharing: true\n }\n }\n ]\n });\n\n if (!deleteVFileSharing) {\n return null;\n }\n\n if (deleteVFileSharing.__typename === \"ErrorAccessDenied\") {\n return deleteVFileSharing;\n }\n\n if (deleteVFileSharing.__typename === \"ErrorNotExist\") {\n return deleteVFileSharing;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteVFileSharing.deleteVFileSharing\n };\n }\n\n async deleteFolderSharing({\n folderId,\n userId\n }: {\n folderId: string;\n userId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteFolderSharing } = await this.client(\"mutation\")({\n deleteFolderSharing: [\n {\n folderId,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFolderSharingResponse\": {\n __typename: true,\n deleteFolderSharing: true\n }\n }\n ]\n });\n\n if (!deleteFolderSharing) {\n return null;\n }\n\n if (deleteFolderSharing.__typename === \"ErrorAccessDenied\") {\n return deleteFolderSharing;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFolderSharing.deleteFolderSharing\n };\n }\n\n async duplicateVFile({\n vFileId,\n folderId,\n customName\n }: {\n vFileId: string;\n folderId?: string | null | undefined;\n customName?: string | null | undefined;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n let file = vFilesCache.get(vFileId);\n if (!file) {\n await this.vFile({ id: vFileId });\n file = vFilesCache.get(vFileId);\n if (!file) {\n throw new Error(`File (${vFileId}) does not exists`);\n }\n }\n customName = customName\n ? await encryptName(customName, file.userApp.nameKey)\n : null;\n\n const { duplicateVFile } = await this.client(\"mutation\")({\n duplicateVFile: [\n {\n vFileId,\n folderId,\n customName\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DuplicateVFileResponse\": {\n __typename: true,\n duplicateVFile: true\n }\n }\n ]\n });\n\n if (!duplicateVFile) {\n return null;\n }\n\n if (duplicateVFile.__typename === \"ErrorAccessDenied\") {\n return duplicateVFile;\n }\n\n if (duplicateVFile.__typename === \"ErrorNotFound\") {\n return duplicateVFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: duplicateVFile.duplicateVFile\n };\n }\n\n async deleteFolderCloudTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteFolderCloudTrash } = await this.client(\"mutation\")({\n deleteFolderCloudTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFolderCloudTrashResponse\": {\n __typename: true,\n deleteFolderCloudTrash: true\n }\n }\n ]\n });\n\n if (!deleteFolderCloudTrash) {\n return null;\n }\n\n if (deleteFolderCloudTrash.__typename === \"ErrorAccessDenied\") {\n return deleteFolderCloudTrash;\n }\n\n if (!deleteFolderCloudTrash.deleteFolderCloudTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFolderCloudTrash.deleteFolderCloudTrash\n };\n }\n\n async deleteVFileCloudTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteVFileCloudTrash } = await this.client(\"mutation\")({\n deleteVFileCloudTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteVFileCloudTrashResponse\": {\n __typename: true,\n deleteVFileCloudTrash: true\n }\n }\n ]\n });\n\n if (!deleteVFileCloudTrash) {\n return null;\n }\n\n if (deleteVFileCloudTrash.__typename === \"ErrorAccessDenied\") {\n return deleteVFileCloudTrash;\n }\n\n if (!deleteVFileCloudTrash.deleteVFileCloudTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteVFileCloudTrash.deleteVFileCloudTrash\n };\n }\n\n async deleteMailTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMailTrash } = await this.client(\"mutation\")({\n deleteMailTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteMailTrashResponse\": {\n __typename: true,\n deleteMailTrash: true\n }\n }\n ]\n });\n\n if (!deleteMailTrash) {\n return null;\n }\n\n if (deleteMailTrash.__typename === \"ErrorAccessDenied\") {\n return deleteMailTrash;\n }\n\n if (!deleteMailTrash.deleteMailTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteMailTrash.deleteMailTrash\n };\n }\n\n async emptyMailTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyMailTrash } = await this.client(\"mutation\")({\n emptyMailTrash: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on EmptyMailTrashResponse\": {\n __typename: true,\n emptyMailTrash: true\n }\n }\n });\n\n if (!emptyMailTrash) {\n return null;\n }\n\n if (emptyMailTrash.__typename === \"ErrorAccessDenied\") {\n return emptyMailTrash;\n }\n\n if (!emptyMailTrash.emptyMailTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: emptyMailTrash.emptyMailTrash\n };\n }\n\n async emptyCloudTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyCloudTrash } = await this.client(\"mutation\")({\n emptyCloudTrash: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteMailResponse\": {\n __typename: true,\n deleteMail: true\n }\n }\n });\n\n if (!emptyCloudTrash) {\n return null;\n }\n\n if (emptyCloudTrash.__typename === \"ErrorAccessDenied\") {\n return emptyCloudTrash;\n }\n\n if (!emptyCloudTrash.deleteMail) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: emptyCloudTrash.deleteMail\n };\n }\n\n async recoverVFile({\n vFileId\n }: {\n vFileId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { recoverVFile } = await this.client(\"mutation\")({\n recoverVFile: [\n { vFileId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on RecoverVFileResponse\": {\n __typename: true,\n recoverVFile: true\n }\n }\n ]\n });\n\n if (!recoverVFile) {\n return null;\n }\n\n if (recoverVFile.__typename === \"ErrorAccessDenied\") {\n return recoverVFile;\n }\n\n if (recoverVFile.__typename === \"ErrorNotExist\") {\n return recoverVFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverVFile.recoverVFile\n };\n }\n\n async recoverFolder({\n id\n }: {\n id: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { recoverFolder } = await this.client(\"mutation\")({\n recoverFolder: [\n { id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on RecoverFolderResponse\": {\n __typename: true,\n recoverFolder: true\n }\n }\n ]\n });\n\n if (!recoverFolder) {\n return null;\n }\n\n if (recoverFolder.__typename === \"ErrorAccessDenied\") {\n return recoverFolder;\n }\n\n if (recoverFolder.__typename === \"ErrorNotExist\") {\n return recoverFolder;\n }\n\n if (!recoverFolder.recoverFolder) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverFolder.recoverFolder\n };\n }\n\n async recoverMail({\n mailId\n }: {\n mailId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { recoverMail } = await this.client(\"mutation\")({\n recoverMail: [\n { mailId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on RecoverMailResponse\": {\n __typename: true,\n recoverMail: true\n }\n }\n ]\n });\n\n if (!recoverMail) {\n return null;\n }\n\n if (recoverMail.__typename === \"ErrorAccessDenied\") {\n return recoverMail;\n }\n\n if (recoverMail.__typename === \"ErrorBasic\") {\n return recoverMail;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverMail.recoverMail\n };\n }\n\n async deleteFile({\n fileId,\n vFileId\n }: {\n fileId: string;\n vFileId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteFile } = await this.client(\"mutation\")({\n deleteFile: [\n {\n fileId,\n vFileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFileResponse\": {\n __typename: true,\n deleteFile: true\n }\n }\n ]\n });\n\n if (!deleteFile) {\n return null;\n }\n\n if (deleteFile.__typename === \"ErrorAccessDenied\") {\n return deleteFile;\n }\n\n if (deleteFile.__typename === \"ErrorNotExist\") {\n return deleteFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFile.deleteFile\n };\n }\n\n async deleteVFile({\n fileId\n }: {\n fileId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteVFile } = await this.client(\"mutation\")({\n deleteVFile: [\n {\n fileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DeleteVFileResponse\": {\n __typename: true,\n deleteVFile: true\n }\n }\n ]\n });\n\n if (!deleteVFile) {\n return null;\n }\n\n if (deleteVFile.__typename === \"ErrorAccessDenied\") {\n return deleteVFile;\n }\n\n if (deleteVFile.__typename === \"ErrorNotExist\") {\n return deleteVFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteVFile.deleteVFile\n };\n }\n\n async deleteMail({\n mailId\n }: {\n mailId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMail } = await this.client(\"mutation\")({\n deleteMail: [\n {\n mailId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteMailResponse\": {\n __typename: true,\n deleteMail: true\n }\n }\n ]\n });\n\n if (!deleteMail) {\n return null;\n }\n\n if (deleteMail.__typename === \"ErrorAccessDenied\") {\n return deleteMail;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteMail.deleteMail\n };\n }\n\n async saveInCloud({\n fileId,\n name,\n folderId\n }: {\n fileId: string;\n name: string;\n folderId?: string;\n }): Promise<\n | SuccessResponse<VFileWithFolder>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotExist\n | null\n > {\n if (folderId && !foldersCache.has(folderId)) {\n await this.folder({ id: folderId });\n if (!foldersCache.has(folderId)) {\n return {\n __typename: \"ErrorBasic\",\n message: `The folder ${folderId} does not exists`\n };\n }\n }\n\n let key = \"\";\n\n const file = filesCache.get(fileId);\n\n if (!file) {\n await this.file({ id: fileId });\n const file = filesCache.get(fileId) ?? null;\n if (!file) {\n const receivedMails = await this.receivedMails();\n if (!receivedMails) {\n return null;\n }\n if (receivedMails.__typename !== \"SuccessResponse\") {\n return null;\n }\n const mail = receivedMails.data.find(m =>\n m.files.some(f => f.id === fileId)\n );\n\n if (!mail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileMail = mail.files.find(f => f.id === fileId);\n\n if (!fileMail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileKey = decryptCryptoBox(\n sodium.from_hex(fileMail.key),\n mail.sender.publicKey,\n this.#keys.privateKey\n );\n\n key = sodium.to_hex(fileKey);\n } else {\n if (!file.user) {\n return {\n __typename: \"ErrorBasic\",\n message: \"Unexpected error 1\"\n };\n }\n key = file.user.key;\n }\n } else {\n if (!file.user) {\n return {\n __typename: \"ErrorBasic\",\n message: \"Unexpected error 2\"\n };\n }\n key = file.user.key;\n }\n\n if (key === \"\") {\n return {\n __typename: \"ErrorBasic\",\n message: \"Unexpected error 3\"\n };\n }\n\n key = sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n );\n\n const nameKey = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(nameKey));\n const encryptedNameKey = sodium.to_hex(\n encryptCryptoBox(nameKey, this.#keys.publicKey, this.#keys.privateKey)\n );\n\n const { saveInCloud } = await this.client(\"mutation\")({\n saveInCloud: [\n {\n fileId,\n key,\n folderId,\n filename: encryptedName,\n nameKey: encryptedNameKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on SaveInCloudResponse\": {\n __typename: true,\n saveInCloud: gqlVFileWithFolderQuery\n }\n }\n ]\n });\n\n if (!saveInCloud) {\n return null;\n }\n\n if (saveInCloud.__typename === \"ErrorAccessDenied\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorBasic\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorNotExist\") {\n return saveInCloud;\n }\n\n if (!saveInCloud.saveInCloud) {\n return null;\n }\n\n const vFile = (await gqlVFileToExternal(\n saveInCloud.saveInCloud,\n this.#keys\n )) as VFileWithFolder;\n\n const me = vFile.folder.users.find(\n ([u]) => u.publicKey === this.#keys.publicKey\n );\n\n if (me && [\"admin\", \"write\"].includes(me[1])) {\n const others = vFile.folder.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n );\n\n await Promise.all(\n others.map(([u, rights]) =>\n this.shareVFile({\n vFileId: vFile.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: vFile\n };\n }\n\n async sendDraftMail(\n draftId: string,\n customMessage?: string | null | undefined\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null> {\n const drafts = await this.draftMails();\n\n if (!drafts) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n if (drafts.__typename !== \"SuccessResponse\") {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n const draft = drafts.data.find(d => d.mailIntegrityId === draftId);\n if (!draft) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n const recipients = new Array<MailRecipientInput>();\n\n const temporaryRecipients = new Array<string>();\n\n for (const { email } of draft.temporaryRecipients) {\n if (!email) {\n continue;\n }\n const input = await this._eachUser(\n draft.files,\n draft.subject,\n draft.body,\n email\n );\n\n if (!input) {\n temporaryRecipients.push(email);\n } else {\n recipients.push(input);\n }\n }\n\n for (const { id } of draft.recipients) {\n const input = await this._eachUser(\n draft.files,\n draft.subject,\n draft.body,\n id\n );\n\n if (!input) {\n temporaryRecipients.push(id);\n } else {\n recipients.push(input);\n }\n }\n\n const { sendDraftMail } = await this.client(\"mutation\")({\n sendDraftMail: [\n {\n temporaryRecipients,\n recipients,\n draftMailId: draft.mailIntegrityId,\n customMessage\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on SendDraftMailResponse\": {\n __typename: true,\n sendDraftMail: true\n }\n }\n ]\n });\n\n if (!sendDraftMail) {\n return null;\n }\n\n if (sendDraftMail.__typename === \"ErrorAccessDenied\") {\n return sendDraftMail;\n }\n\n if (sendDraftMail.__typename === \"ErrorBasic\") {\n return sendDraftMail;\n }\n\n if (!sendDraftMail.sendDraftMail) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: sendDraftMail.sendDraftMail\n };\n }\n\n async sendWaitingEmails(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null\n > {\n // TODO opti this\n const mails = await this.sentMails();\n\n if (!mails) {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n if (mails.__typename !== \"SuccessResponse\") {\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n const filtered = mails.data.filter(m => m.temporaryRecipients.length > 0);\n\n for (const mail of filtered) {\n for (const { email } of mail.temporaryRecipients) {\n if (!email) {\n continue;\n }\n const input = await this._eachUser(\n mail.files,\n mail.subject,\n mail.body,\n email\n );\n\n if (input) {\n await this.client(\"mutation\")({\n sendOneMail: [\n {\n mailIntegrityId: mail.mailIntegrityId,\n recipient: input\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on RecoverFolderResponse\": {\n __typename: true,\n recoverFolder: true\n }\n }\n ]\n });\n }\n }\n }\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n async createDraftMail({\n body,\n subject,\n files,\n recipientsIds,\n replyTo\n }: NewMail): Promise<\n SuccessResponse<DraftMail> | ErrorAccessDenied | ErrorBasic | null\n > {\n const hashKey = sodium.randombytes_buf(\n sodium.crypto_generichash_KEYBYTES,\n \"hex\"\n );\n const hash = sodium.crypto_generichash(\n sodium.crypto_generichash_BYTES,\n JSON.stringify({ body, subject }),\n hashKey,\n \"hex\"\n );\n const senderFiles = new Array<MailFileInput>();\n for (const f of files) {\n let file = filesCache.get(f.id);\n if (!file) {\n await this.file({ id: f.id });\n file = filesCache.get(f.id);\n if (!file) {\n throw new Error(`File ${f.name} (${f.id}) does not exists`);\n }\n }\n if (!file.user) {\n continue;\n }\n senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.user.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n ),\n name: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(f.name),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n });\n }\n\n const { createDraftMail } = await this.client(\"mutation\")({\n createDraftMail: [\n {\n recipients: recipientsIds,\n replyTo,\n body: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(body),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n ),\n subject: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(subject),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n ),\n senderFiles,\n hash,\n hashKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on CreateDraftMailResponse\": {\n __typename: true,\n createDraftMail: gqlMailQuery\n }\n }\n ]\n });\n\n if (!createDraftMail) {\n return null;\n }\n\n if (createDraftMail.__typename === \"ErrorAccessDenied\") {\n return createDraftMail;\n }\n\n if (createDraftMail.__typename === \"ErrorBasic\") {\n return createDraftMail;\n }\n\n if (!createDraftMail.createDraftMail) {\n return null;\n }\n\n const result = convertInternalMailToExternal(\n createDraftMail.createDraftMail,\n this.#keys\n ) as DraftMail;\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileContent({\n fileId,\n onDownloadProgress,\n progressDecrypt,\n signal\n }: {\n fileId: string;\n onDownloadProgress?: (progress: DownloadProgress) => void;\n progressDecrypt?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n SuccessResponse<Uint8Array> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { fileContent } = await this.client(\"query\")({\n fileContent: [\n { fileId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on FileContentResponse\": {\n __typename: true,\n file: {\n \"...on FileContentCloud\": {\n __typename: true,\n parts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n key: true,\n publicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentReceivedMail\": {\n __typename: true,\n parts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n key: true,\n senderPublicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentSentMail\": {\n __typename: true,\n parts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n key: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n }\n }\n }\n }\n ]\n });\n\n if (!fileContent) {\n return null;\n }\n\n if (fileContent.__typename === \"ErrorAccessDenied\") {\n return fileContent;\n }\n\n if (fileContent.__typename === \"ErrorBasic\") {\n return fileContent;\n }\n\n const file = fileContent.file;\n if (!file) {\n return null;\n }\n\n const progressParts: Record<number, DownloadProgress> = {};\n const onProgress = (\n part: number,\n progressEvent: DownloadProgress\n ): void => {\n progressParts[part] = progressEvent;\n const transferredBytes = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.transferredBytes,\n 0\n );\n const totalBytes = Number(file.totalSize);\n onDownloadProgress?.({\n percent: transferredBytes / totalBytes,\n totalBytes,\n transferredBytes\n });\n };\n\n const parts = new Array<{ data: Uint8Array; order: number }>();\n\n const byPart = async (part: FileContentPart): Promise<void> => {\n const buf = new Uint8Array(\n await ky\n .get(part.contentUrl, {\n timeout: false,\n onDownloadProgress: pr => onProgress(part.order, pr),\n signal: signal\n })\n .arrayBuffer()\n );\n const md5Part = await md5(buf);\n if (md5Part !== part.md5) {\n throw new Error(`Invalid md5 for part ${part.order} of file ${fileId}`);\n }\n parts.push({\n data: buf,\n order: part.order\n });\n };\n\n await promiseAllLimit(\n 3,\n file.parts.map(p => (): Promise<void> => byPart(p))\n );\n\n const encryptedContent = concatenate(\n ...parts.sort((a, b) => a.order - b.order).map(p => p.data)\n );\n\n // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));\n const md5Encrypted = await md5(encryptedContent);\n\n if (md5Encrypted !== file.md5Encrypted) {\n throw new Error(`Encrypted content does not match`);\n }\n\n const key = decryptCryptoBox(\n sodium.from_hex(file.key),\n file.__typename === \"FileContentReceivedMail\"\n ? file.senderPublicKey\n : file.__typename === \"FileContentCloud\"\n ? file.publicKey\n : this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const src = await decrypt(key, encryptedContent, progressDecrypt, signal);\n\n // const md5Content = await firstValueFrom(md5(of(src)));\n const md5Content = await md5(src);\n\n if (md5Content !== file.md5) {\n throw new Error(`Content does not match`);\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uncompress(src)\n };\n }\n\n async updateFile({\n fileId,\n filename,\n isFavorite,\n deletedAt\n }: {\n fileId: string;\n filename?: string | null | undefined;\n isFavorite?: boolean | null | undefined;\n deletedAt?: Date | null | undefined;\n }): Promise<\n | SuccessResponse<VFile>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotExist\n | null\n > {\n const file = vFilesCache.get(fileId);\n if (!file) {\n throw `Can't find file ${fileId}`;\n }\n\n const encryptedName = filename\n ? await encryptName(filename, file.userApp.nameKey)\n : null;\n\n const { updateFile } = await this.client(\"mutation\")({\n updateFile: [\n {\n fileId,\n filename: encryptedName,\n isFavorite,\n deletedAt\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on UpdateFileResponse\": {\n __typename: true,\n updateFile: {\n gqlVFileQuery\n }\n }\n }\n ]\n });\n\n if (!updateFile) {\n return {\n __typename: \"ErrorBasic\",\n message: \"Can't update file\"\n };\n }\n\n if (updateFile.__typename === \"ErrorAccessDenied\") {\n return updateFile;\n }\n\n if (updateFile.__typename === \"ErrorBasic\") {\n return updateFile;\n }\n\n if (updateFile.__typename === \"ErrorNotExist\") {\n return updateFile;\n }\n\n if (!updateFile.updateFile) {\n return null;\n }\n\n const result = await gqlVFileToExternal(updateFile.updateFile, this.#keys);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async readMail({\n mailId\n }: {\n mailId: string;\n }): Promise<\n | SuccessResponse<boolean>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotFound\n | null\n > {\n const { readMail } = await this.client(\"mutation\")({\n readMail: [\n { mailId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ReadMailResponse\": {\n __typename: true,\n readMail: true\n }\n }\n ]\n });\n\n if (!readMail) {\n return null;\n }\n\n if (readMail.__typename === \"ErrorAccessDenied\") {\n return readMail;\n }\n\n if (readMail.__typename === \"ErrorBasic\") {\n return readMail;\n }\n\n if (readMail.__typename === \"ErrorNotFound\") {\n return readMail;\n }\n\n if (!readMail.readMail) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: readMail.readMail\n };\n }\n\n async unreadMail({\n mailId\n }: {\n mailId: string;\n }): Promise<\n | SuccessResponse<boolean>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotFound\n | null\n > {\n const { unreadMail } = await this.client(\"mutation\")({\n unreadMail: [\n { mailId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UnreadMailResponse\": {\n __typename: true,\n unreadMail: true\n }\n }\n ]\n });\n\n if (!unreadMail) {\n return null;\n }\n\n if (unreadMail.__typename === \"ErrorAccessDenied\") {\n return unreadMail;\n }\n\n if (unreadMail.__typename === \"ErrorBasic\") {\n return unreadMail;\n }\n\n if (unreadMail.__typename === \"ErrorNotFound\") {\n return unreadMail;\n }\n\n if (!unreadMail.unreadMail) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: unreadMail.unreadMail\n };\n }\n\n async appSettings(): Promise<\n SuccessResponse<UserAppSettings> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n appSettings: {\n autoDisconnectDelay: true,\n cloudFileDaysForDelete: true,\n cloudFolderDaysForDelete: true,\n historyFileDaysForDelete: true,\n historyMaxFileCount: true\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: user.appSettings\n };\n }\n\n async updateAppSettings(\n settings: Partial<UserAppSettings>\n ): Promise<\n SuccessResponse<UserAppSettings> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { updateAppSettings } = await this.client(\"mutation\")({\n updateAppSettings: [\n settings,\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on UpdateAppSettingsResponse\": {\n __typename: true,\n updateAppSettings: {\n autoDisconnectDelay: true,\n cloudFileDaysForDelete: true,\n cloudFolderDaysForDelete: true,\n historyFileDaysForDelete: true,\n historyMaxFileCount: true\n }\n }\n }\n ]\n });\n\n if (!updateAppSettings) {\n return null;\n }\n\n if (updateAppSettings.__typename === \"ErrorAccessDenied\") {\n return updateAppSettings;\n }\n\n if (updateAppSettings.__typename === \"ErrorBasic\") {\n return updateAppSettings;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: updateAppSettings.updateAppSettings\n };\n }\n\n async receivedMails(): Promise<\n SuccessResponse<ReceivedMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n receivedMails: gqlMailQuery\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (!user.user) {\n return null;\n }\n\n // TODO get actual mails on this app only\n\n const receivedMails = new Array<ReceivedMail>();\n\n for (const m of user.user.receivedMails) {\n const mail = convertInternalMailToExternal(m, this.#keys);\n if (mail) {\n receivedMails.push(mail as ReceivedMail);\n }\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: receivedMails\n };\n }\n\n async sentMails(): Promise<\n SuccessResponse<SentMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n sentMails: gqlMailQuery\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (!user.user) {\n return null;\n }\n\n // TODO get actual mails on this app only\n\n const sentMails = new Array<SentMail>();\n\n for (const m of user.user.sentMails) {\n const mail = convertInternalMailToExternal(m, this.#keys);\n if (mail) {\n sentMails.push(mail as SentMail);\n }\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: sentMails\n };\n }\n\n async draftMails(): Promise<\n SuccessResponse<DraftMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n draftMails: gqlMailQuery\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (!user.user) {\n return null;\n }\n\n // TODO get actual mails on this app only\n\n const draftMails = new Array<DraftMail>();\n\n for (const m of user.user.draftMails) {\n const draft = convertInternalMailToExternal(m, this.#keys) as DraftMail;\n if (draft) {\n draftMails.push(draft);\n }\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: draftMails\n };\n }\n\n private perFolder = async (\n folderId: string,\n publicKey: string\n ): Promise<NameKeyInputFolders | null> => {\n let folder = foldersCache.get(folderId);\n\n if (!folder) {\n await this.folder({ id: folderId });\n folder = foldersCache.get(folderId);\n\n if (!folder) {\n return null;\n }\n }\n\n if (!folder.userApp?.nameKey) {\n return null;\n }\n\n return {\n id: folderId,\n nameKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(folder.userApp.nameKey),\n publicKey,\n this.#keys.privateKey\n )\n )\n };\n };\n\n private perVFile = async (\n vFileId: string,\n publicKey: string\n ): Promise<NameKeyInput | null> => {\n let vFile = vFilesCache.get(vFileId);\n\n if (!vFile) {\n await this.vFile({ id: vFileId });\n vFile = vFilesCache.get(vFileId);\n\n if (!vFile) {\n return null;\n }\n }\n\n return {\n id: vFile.id,\n nameKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(vFile.userApp.nameKey),\n publicKey,\n this.#keys.privateKey\n )\n ),\n files: vFile.history.map(f => ({\n id: f.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n // TODO: cette erreur\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n sodium.from_hex(f.user!.key),\n publicKey,\n this.#keys.privateKey\n )\n )\n }))\n };\n };\n\n async unreadReceivedMailsCount(): Promise<\n SuccessResponse<number> | ErrorAccessDenied | null\n > {\n const { unreadReceivedMailsCount } = await this.client(\"query\")({\n unreadReceivedMailsCount: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UnreadReceivedMailsCountResponse\": {\n __typename: true,\n count: true\n }\n }\n });\n\n if (!unreadReceivedMailsCount) {\n return null;\n }\n\n if (unreadReceivedMailsCount.__typename === \"ErrorAccessDenied\") {\n return unreadReceivedMailsCount;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: unreadReceivedMailsCount.count\n };\n }\n\n private _eachUser = async (\n files: { id: string; name: string }[],\n subject: string,\n body: string,\n idOrMail: string\n ): Promise<MailRecipientInput | null> => {\n let u = usersCache.get(idOrMail);\n\n if (!u || !(\"publicKey\" in u)) {\n const req = await this.user({\n userId: idOrMail,\n withPublicKey: true\n });\n if (!req) {\n return null;\n }\n if (req.__typename !== \"SuccessResponse\") {\n return null;\n }\n u = req.data;\n\n if (!u) {\n return null;\n }\n }\n\n if (!(\"publicKey\" in u)) {\n throw new Error(`User ${idOrMail} have no public key`);\n }\n\n const recipientsFiles = new Array<MailFileInput>();\n\n for (const f of files) {\n let fileInHistory = filesCache.get(f.id);\n if (!fileInHistory) {\n await this.file({ id: f.id });\n fileInHistory = filesCache.get(f.id);\n if (!fileInHistory) {\n throw new Error(`File ${f.name} (${f.id}) does not exists`);\n }\n }\n const key = fileInHistory.user?.key;\n if (!key) {\n continue;\n }\n recipientsFiles.push({\n id: f.id,\n name: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(f.name),\n u.publicKey,\n this.#keys.privateKey\n )\n ),\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(key),\n u.publicKey,\n this.#keys.privateKey\n )\n )\n });\n }\n\n return {\n recipientId: u.id,\n body: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(body),\n u.publicKey,\n this.#keys.privateKey\n )\n ),\n subject: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(subject),\n u.publicKey,\n this.#keys.privateKey\n )\n ),\n files: recipientsFiles\n };\n };\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport type { DownloadProgress as DLProgress } from \"ky\";\nimport type { Document } from \"bson\";\nimport { serialize } from \"bson\";\nimport { getLink } from \"@secrecy/lib-utils\";\nimport { usersCache } from \"./cache.js\";\nimport type { UserSession } from \"./client/types/index.js\";\nimport type { SecrecyEnv } from \"./client/helpers.js\";\nimport { getStorage } from \"./client/storage.js\";\nimport type {\n Lang,\n PayInputType,\n PlanKind,\n Thunder,\n UserRole\n} from \"./zeus/index.js\";\nimport { Selector } from \"./zeus/index.js\";\nimport { createThunder } from \"./ZeusThunder.js\";\nimport type {\n ErrorAccessDenied,\n ErrorLimit,\n ErrorNotFound,\n ErrorNotExist,\n ErrorLangNotExist,\n ErrorBasic\n} from \"./error.js\";\n\nexport type SuccessResponse<T> = {\n __typename: \"SuccessResponse\";\n data: T;\n};\n\nexport type DownloadProgress = DLProgress;\n\nexport type PayInput = {\n type: PayInputType;\n token: string;\n firstName: string;\n lastName: string;\n street: string;\n postalCode: string;\n city: string;\n country: string;\n month: string;\n year: string;\n cvv: string;\n number: string;\n};\n\nexport type MailLimits = {\n count?: string | undefined;\n fileCount?: string | undefined;\n fileSize?: string | undefined;\n hardCount?: string | undefined;\n hardFileCount?: string | undefined;\n hardFileSize?: string | undefined;\n perFileSize?: string | undefined;\n};\n\nexport type Limits = {\n downloadBandwidth?: string | undefined;\n downloadCount?: string | undefined;\n hardFileCount?: string | undefined;\n hardFileSize?: string | undefined;\n perFileSize?: string | undefined;\n receivedMails: MailLimits;\n sentMails: MailLimits;\n uploadBandwidth?: string | undefined;\n uploadCount?: string | undefined;\n};\n\nexport type GodUser = {\n id: string;\n firstname: string;\n lastname: string;\n email: string;\n phone: string;\n};\n\nexport type GodFatherAndChildren = {\n godFather: GodUser | null;\n godChildren: GodUser[];\n};\n\nexport type Plan = {\n codes: string[];\n kind: PlanKind;\n limits: Limits;\n};\n\nexport type SubscriptionState =\n | \"active\"\n | \"canceled\"\n | \"paused\"\n | \"expired\"\n | \"future\"\n | \"in_trial\"\n | \"live\"\n | \"past_due\";\n\nexport type SubscriptionCollectionMethod = \"automatic\" | \"manual\";\n\ntype InternalSubscription = {\n autorenew: boolean;\n activatedAt?: string | null | undefined;\n currentPeriodEndsAt?: string | null | undefined;\n currentPeriodStartedAt?: string | null | undefined;\n canceledAt?: string | null | undefined;\n createdAt?: string | null | undefined;\n expiresAt?: string | null | undefined;\n pausedAt?: string | null | undefined;\n trialEndsAt?: string | null | undefined;\n trialStartedAt?: string | null | undefined;\n updatedAt?: string | null | undefined;\n collectionMethod: string;\n state: string;\n plan?: string | null | undefined;\n planCode?: string | null | undefined;\n total?: number | null | undefined;\n};\n\ntype RecurlyInvoiceStatus =\n | \"pending\"\n | \"paid\"\n | \"failed\"\n | \"past_due\"\n | \"open\"\n | \"closed\"\n | \"voided\"\n | \"processing\";\n\ntype InternalRecurlyInvoices = {\n pdf: string;\n date: string;\n due: string;\n status: string;\n total: number;\n name: string;\n currency: string;\n};\n\ntype InternalPaymentInfos = {\n hostedUrl: string;\n currentSubscription: InternalSubscription;\n invoices: InternalRecurlyInvoices[];\n};\n\nexport type Subscription = {\n autorenew: boolean;\n activatedAt?: Date | null | undefined;\n currentPeriodEndsAt?: Date | null | undefined;\n currentPeriodStartedAt?: Date | null | undefined;\n canceledAt?: Date | null | undefined;\n createdAt?: Date | null | undefined;\n expiresAt?: Date | null | undefined;\n pausedAt?: Date | null | undefined;\n trialEndsAt?: Date | null | undefined;\n trialStartedAt?: Date | null | undefined;\n updatedAt?: Date | null | undefined;\n collectionMethod: SubscriptionCollectionMethod;\n state: SubscriptionState;\n plan?: string | null | undefined;\n planCode?: string | null | undefined;\n total?: number | null | undefined;\n};\n\nexport type RecurlyInvoices = {\n pdf: string;\n date: Date;\n due: Date;\n status: RecurlyInvoiceStatus;\n total: number;\n name: string;\n currency: string;\n};\n\nexport type PaymentInfos = {\n hostedUrl: string;\n currentSubscription: Subscription;\n invoices: RecurlyInvoices[];\n};\n\nexport type SendReport = {\n id: string;\n user: {\n id: string;\n firstname: string;\n lastname: string;\n email: string;\n };\n reportedUser: {\n id: string;\n firstname: string;\n lastname: string;\n email: string;\n };\n customMessage?: string | undefined;\n};\n\nfunction internalToPaymentInfos(p: InternalPaymentInfos): PaymentInfos {\n return {\n ...p,\n currentSubscription: {\n ...p.currentSubscription,\n state: p.currentSubscription.state as SubscriptionState,\n collectionMethod: p.currentSubscription\n .collectionMethod as SubscriptionCollectionMethod,\n activatedAt: p.currentSubscription.activatedAt\n ? new Date(p.currentSubscription.activatedAt)\n : null,\n createdAt: p.currentSubscription.createdAt\n ? new Date(p.currentSubscription.createdAt)\n : null,\n updatedAt: p.currentSubscription.updatedAt\n ? new Date(p.currentSubscription.updatedAt)\n : null,\n trialEndsAt: p.currentSubscription.trialEndsAt\n ? new Date(p.currentSubscription.trialEndsAt)\n : null,\n trialStartedAt: p.currentSubscription.trialStartedAt\n ? new Date(p.currentSubscription.trialStartedAt)\n : null,\n pausedAt: p.currentSubscription.pausedAt\n ? new Date(p.currentSubscription.pausedAt)\n : null,\n currentPeriodEndsAt: p.currentSubscription.currentPeriodEndsAt\n ? new Date(p.currentSubscription.currentPeriodEndsAt)\n : null,\n currentPeriodStartedAt: p.currentSubscription.currentPeriodStartedAt\n ? new Date(p.currentSubscription.currentPeriodStartedAt)\n : null,\n canceledAt: p.currentSubscription.canceledAt\n ? new Date(p.currentSubscription.canceledAt)\n : null,\n expiresAt: p.currentSubscription.expiresAt\n ? new Date(p.currentSubscription.expiresAt)\n : null\n },\n invoices: p.invoices.map(i => ({\n ...i,\n date: new Date(i.date),\n due: new Date(i.due),\n status: i.status as RecurlyInvoiceStatus\n }))\n };\n}\n\nconst plansCodes = [\n \"basic_month\",\n \"advanced_month\",\n \"pro_month\",\n \"basic_year\",\n \"advanced_year\",\n \"pro_year\"\n] as const;\n\nexport type SecrecyPlansCodes = typeof plansCodes[number];\n\nexport function isValidPlan(planCode: string): planCode is SecrecyPlansCodes {\n return plansCodes.includes(planCode as SecrecyPlansCodes);\n}\n\nexport type UserData<\n T extends Record<string, unknown> = Record<string, unknown>\n> = {\n isSuperuser: boolean;\n isSearchable: boolean;\n} & T;\n\nexport type FolderSize = { size: bigint; sizeBefore: bigint };\n\nconst getUserSelector = (\n userId: string | null | undefined,\n withPublicKey: boolean | undefined\n) => {\n const { user } = Selector(\"Query\")({\n user: [\n { userId },\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true,\n field: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n id: true,\n firstname: true,\n lastname: true,\n lang: true,\n publicKey: withPublicKey ? true : undefined,\n email: true,\n phone: true,\n role: true,\n deletedAt: true,\n lastLogin: true\n }\n }\n }\n ]\n });\n return user;\n};\n\nexport type AppDBConfigField = {\n name: string;\n type: \"string\" | \"number\" | \"boolean\" | \"object\";\n isArray?: boolean | undefined;\n isNullable?: boolean | undefined;\n isEditable?: boolean | undefined;\n isKey?: boolean | undefined;\n default?: unknown;\n};\n\nexport type AppDBConfig = {\n fields: AppDBConfigField[];\n};\n\nexport type FaqItem = {\n order: number;\n question: string;\n answer: string;\n};\n\nexport type BlogItem = {\n id: string;\n blogId: string;\n order: number;\n author: string;\n body: string;\n date: Date;\n image: string;\n imageAlt: string;\n summary: string;\n title: string;\n};\n\nexport type UserBase = {\n email: string;\n phone: string;\n lastname: string;\n role: UserRole;\n firstname: string;\n id: string;\n deletedAt: Date | null;\n lastLogin: Date;\n lang: Lang;\n};\n\ntype WithPublicKey = { withPublicKey?: boolean };\n\nexport type User<T extends WithPublicKey = WithPublicKey> = T extends {\n withPublicKey: true;\n}\n ? UserBase & { publicKey: string }\n : UserBase;\n\ntype ClassGetUserParams = WithPublicKey & {\n userId?: string;\n};\ntype GetUserParams = ClassGetUserParams & {\n client: ReturnType<typeof Thunder>;\n};\n\ntype StaticGetUserParams = ClassGetUserParams & {\n env: SecrecyEnv;\n};\n\nasync function getUser<U extends WithPublicKey>(\n params: GetUserParams\n): Promise<SuccessResponse<User<U>> | ErrorNotFound | null> {\n const selector = getUserSelector(params.userId, params.withPublicKey);\n const { user: userResponse } = await params.client(\"query\")({\n user: selector\n });\n\n if (!userResponse) {\n return null;\n }\n\n if (userResponse.__typename === \"ErrorNotFound\") {\n return userResponse;\n }\n\n if (!userResponse.user) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n ...userResponse.user,\n lastLogin: new Date(userResponse.user.lastLogin),\n deletedAt: userResponse.user.deletedAt\n ? new Date(userResponse.user.deletedAt)\n : null\n }\n };\n}\n\nexport type CloudLimits = {\n count: bigint;\n maxCount: bigint | null;\n size: bigint;\n maxSize: bigint | null;\n};\n\nexport type MailLimitsValues = {\n count: bigint;\n maxCount: bigint | null;\n fileSize: bigint;\n maxFileSize: bigint | null;\n fileCount: bigint;\n maxFileCount: bigint | null;\n};\n\nexport type QueryLimits = {\n cloud: CloudLimits;\n mail: {\n sent: MailLimitsValues;\n received: MailLimitsValues;\n };\n};\n\nexport class BaseClient {\n public static readonly getBaseUrl = (\n env: SecrecyEnv = \"prod\",\n graphcdn = true\n ): string => {\n const apiUrl = process.env.SECRECY_API_URL;\n if (apiUrl) {\n return apiUrl;\n }\n\n switch (env) {\n case \"prod\":\n return graphcdn\n ? \"https://secrecy.graphcdn.app\"\n : \"https://api.secrecy.me/graphql\";\n case \"dev\":\n default:\n return \"https://api.dev.secrecy.me/graphql\";\n }\n };\n\n private static readonly _getBaseClient = (\n env: SecrecyEnv,\n session?: string | null | undefined\n ): ReturnType<typeof Thunder> =>\n createThunder(BaseClient.getBaseUrl(env), session);\n\n protected client: ReturnType<typeof Thunder>;\n\n public sessionId: string;\n\n constructor(session: string, env: SecrecyEnv) {\n this.sessionId = session;\n this.client = BaseClient._getBaseClient(env, session);\n }\n\n async sessions(): Promise<\n SuccessResponse<UserSession[]> | ErrorNotFound | null\n > {\n const data = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n field: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n sessions: {\n id: true,\n lastActivity: true,\n userAgent: true,\n ip: true,\n city: true,\n country: true,\n appSessions: {\n id: true,\n lastActivity: true,\n userAgent: true,\n ip: true,\n city: true,\n country: true,\n userApp: {\n app: {\n name: true\n }\n }\n }\n }\n }\n }\n }\n ]\n });\n\n if (!data.user) {\n return null;\n }\n const userResponse = data.user;\n if (userResponse.__typename === \"UserResponse\") {\n if (!userResponse.user) {\n return null;\n }\n const sessions: UserSession[] =\n userResponse.user.sessions.map(s => ({\n id: s.id,\n ip: s.ip,\n city: s.city,\n country: s.country,\n lastActivity: s.lastActivity ? new Date(s.lastActivity) : undefined,\n userAgent: s.userAgent,\n appSessions: s.appSessions.map(a => ({\n id: a.id,\n ip: a.ip,\n city: a.city,\n country: a.country,\n lastActivity: a.lastActivity ? new Date(a.lastActivity) : undefined,\n userAgent: a.userAgent,\n app: a.userApp?.app.name ?? \"\"\n }))\n })) ?? [];\n return {\n __typename: \"SuccessResponse\",\n data: sessions\n };\n }\n\n return userResponse;\n }\n\n async logout(sessionId?: string | null | undefined): Promise<void> {\n if (!sessionId) {\n const local = getStorage(false);\n const session = getStorage(true);\n local.jwt.clear();\n local.userAppKeys.clear();\n local.userAppSession.clear();\n session.jwt.clear();\n session.userAppKeys.clear();\n session.userAppSession.clear();\n usersCache.clear();\n }\n try {\n await this.client(\"mutation\")({\n logout: [\n {\n sessionId: sessionId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on LogoutResponse\": {\n __typename: true,\n logout: true\n }\n }\n ]\n });\n } catch {\n //\n }\n }\n\n async me<T extends WithPublicKey = WithPublicKey>(\n params?: T\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n return this.user(params || ({ withPublicKey: true } as T));\n }\n\n static async user<T extends StaticGetUserParams>(\n params: T,\n sessionId?: string | null | undefined\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n const user = await getUser<T>({\n client: this._getBaseClient(params.env, sessionId),\n userId: params.userId,\n withPublicKey: params.withPublicKey\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (user) {\n usersCache.set(user.data.id, user.data);\n }\n\n return user;\n }\n\n async user<T extends ClassGetUserParams>(\n params: T\n ): Promise<SuccessResponse<User<T>> | ErrorNotFound | null> {\n const user = await getUser<T>({\n client: this.client,\n userId: params.userId,\n withPublicKey: params.withPublicKey\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n if (user) {\n usersCache.set(user.data.id, user.data);\n }\n\n return user;\n }\n\n async updateProfile({\n firstname,\n lastname,\n lang\n }: {\n firstname: string | null;\n lastname: string | null;\n lang: Lang | null;\n }): Promise<\n SuccessResponse<User> | ErrorNotFound | ErrorAccessDenied | null\n > {\n const { updateProfile } = await this.client(\"mutation\")({\n updateProfile: [\n {\n firstname,\n lastname,\n lang\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UpdateProfileResponse\": {\n __typename: true,\n updateProfile: {\n id: true,\n firstname: true,\n lastname: true,\n lang: true,\n email: true,\n phone: true,\n role: true,\n deletedAt: true,\n lastLogin: true\n }\n }\n }\n ]\n });\n\n if (!updateProfile) {\n return null;\n }\n\n if (updateProfile.__typename === \"ErrorAccessDenied\") {\n return updateProfile;\n }\n\n if (updateProfile.__typename === \"ErrorNotFound\") {\n return updateProfile;\n }\n\n if (!updateProfile.updateProfile) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n email: updateProfile.updateProfile.email,\n firstname: updateProfile.updateProfile.firstname,\n id: updateProfile.updateProfile.id,\n lang: updateProfile.updateProfile.lang,\n lastLogin: new Date(updateProfile.updateProfile.lastLogin),\n lastname: updateProfile.updateProfile.lastname,\n phone: updateProfile.updateProfile.phone,\n role: updateProfile.updateProfile.role,\n deletedAt: updateProfile.updateProfile.deletedAt\n ? new Date(updateProfile.updateProfile.deletedAt)\n : null\n }\n };\n }\n\n static async plans(\n env: SecrecyEnv,\n sessionId?: string | null | undefined\n ): Promise<SuccessResponse<Plan[]> | null> {\n const { plans } = await BaseClient._getBaseClient(env, sessionId)(\"query\")({\n plans: {\n \"...on PlanResponse\": {\n __typename: true,\n plan: {\n kind: true,\n codes: true,\n limits: {\n downloadBandwidth: true,\n downloadCount: true,\n hardFileCount: true,\n hardFileSize: true,\n perFileSize: true,\n uploadBandwidth: true,\n uploadCount: true,\n receivedMails: {\n count: true,\n fileCount: true,\n fileSize: true,\n hardCount: true,\n hardFileCount: true,\n hardFileSize: true,\n perFileSize: true\n },\n sentMails: {\n count: true,\n fileCount: true,\n fileSize: true,\n hardCount: true,\n hardFileCount: true,\n hardFileSize: true,\n perFileSize: true\n }\n }\n }\n }\n }\n });\n\n if (!plans) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: plans.plan\n };\n }\n\n async pay(\n planCode: SecrecyPlansCodes,\n input: PayInput,\n autoRenew?: boolean | null | undefined\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { pay } = await this.client(\"mutation\")({\n pay: [\n {\n input,\n planCode,\n autoRenew\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on PayResponse\": {\n __typename: true,\n pay: true\n }\n }\n ]\n });\n\n if (!pay) {\n return null;\n }\n\n if (pay.__typename === \"ErrorAccessDenied\") {\n return pay;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: pay.pay ?? false\n };\n }\n\n async cancelPayment(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { cancelPayment } = await this.client(\"mutation\")({\n cancelPayment: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on CancelPaymentResponse\": {\n __typename: true,\n cancelPayment: true\n }\n }\n });\n\n if (!cancelPayment) {\n return null;\n }\n\n if (cancelPayment.__typename === \"ErrorAccessDenied\") {\n return cancelPayment;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: cancelPayment.cancelPayment ?? false\n };\n }\n\n async paymentInfos(): Promise<\n SuccessResponse<PaymentInfos> | ErrorAccessDenied | null\n > {\n const { paymentInfos } = await this.client(\"query\")({\n paymentInfos: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on PaymentInfosResponse\": {\n __typename: true,\n paymentInfos: {\n hostedUrl: true,\n currentSubscription: {\n autorenew: true,\n activatedAt: true,\n currentPeriodEndsAt: true,\n currentPeriodStartedAt: true,\n canceledAt: true,\n createdAt: true,\n expiresAt: true,\n pausedAt: true,\n trialEndsAt: true,\n trialStartedAt: true,\n updatedAt: true,\n state: true,\n collectionMethod: true,\n plan: true,\n planCode: true,\n total: true\n },\n invoices: {\n pdf: true,\n date: true,\n due: true,\n status: true,\n total: true,\n name: true,\n currency: true\n }\n }\n }\n }\n });\n\n if (!paymentInfos) {\n return null;\n }\n\n if (paymentInfos.__typename === \"ErrorAccessDenied\") {\n return paymentInfos;\n }\n\n if (!paymentInfos.paymentInfos) {\n return null;\n }\n const result = internalToPaymentInfos(paymentInfos.paymentInfos);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async limits(): Promise<\n | SuccessResponse<QueryLimits>\n | ErrorAccessDenied\n | ErrorNotExist\n | ErrorLimit\n | ErrorNotFound\n | null\n > {\n const { limits } = await this.client(\"query\")({\n limits: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on QueryLimits\": {\n __typename: true,\n cloud: {\n size: true,\n maxSize: true,\n count: true,\n maxCount: true\n },\n mail: {\n received: {\n count: true,\n maxCount: true,\n fileCount: true,\n maxFileCount: true,\n fileSize: true,\n maxFileSize: true\n },\n sent: {\n count: true,\n maxCount: true,\n fileCount: true,\n maxFileCount: true,\n fileSize: true,\n maxFileSize: true\n }\n }\n }\n }\n });\n\n if (!limits) {\n return null;\n }\n\n if (limits.__typename === \"ErrorAccessDenied\") {\n return limits;\n }\n if (limits.__typename === \"ErrorNotExist\") {\n return limits;\n }\n if (limits.__typename === \"ErrorLimit\") {\n return limits;\n }\n if (limits.__typename === \"ErrorNotFound\") {\n return limits;\n }\n\n const { cloud, mail } = limits;\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n cloud: {\n count: BigInt(cloud.count),\n size: BigInt(cloud.size),\n maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,\n maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null\n },\n mail: {\n received: {\n count: BigInt(mail.received.count),\n maxCount: mail.received.maxCount\n ? BigInt(mail.received.maxCount)\n : null,\n fileCount: BigInt(mail.received.fileCount),\n maxFileCount: mail.received.maxFileCount\n ? BigInt(mail.received.maxFileCount)\n : null,\n fileSize: BigInt(mail.received.fileSize),\n maxFileSize: mail.received.maxFileSize\n ? BigInt(mail.received.maxFileSize)\n : null\n },\n sent: {\n count: BigInt(mail.sent.count),\n maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,\n fileCount: BigInt(mail.sent.fileCount),\n maxFileCount: mail.sent.maxFileCount\n ? BigInt(mail.sent.maxFileCount)\n : null,\n fileSize: BigInt(mail.sent.fileSize),\n maxFileSize: mail.sent.maxFileSize\n ? BigInt(mail.sent.maxFileSize)\n : null\n }\n }\n }\n };\n }\n\n async godFatherAndChildren(): Promise<\n SuccessResponse<GodFatherAndChildren> | ErrorNotFound | null\n > {\n const { user } = await this.client(\"query\")({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n godChildren: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n phone: true\n },\n godFather: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n phone: true\n }\n }\n }\n ]\n });\n\n if (!user) {\n return null;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n godChildren: user.godChildren,\n godFather: user.godFather\n }\n };\n }\n\n static async updateAppDBConfig({\n appCode,\n config,\n env,\n sessionId\n }: {\n appCode: string;\n config: AppDBConfig;\n env: SecrecyEnv;\n sessionId?: string | null | undefined;\n }): Promise<SuccessResponse<AppDBConfig> | ErrorAccessDenied | null> {\n const { dbConfigMutation } = await BaseClient._getBaseClient(\n env,\n sessionId\n )(\"mutation\")({\n dbConfigMutation: [\n {\n appCode,\n config: JSON.stringify(config)\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigMutationResponse\": {\n __typename: true,\n dbConfigMutation: true\n }\n }\n ]\n });\n\n if (!dbConfigMutation) {\n return null;\n }\n\n if (dbConfigMutation.__typename === \"ErrorAccessDenied\") {\n return dbConfigMutation;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfigMutation.dbConfigMutation\n };\n }\n\n static async getAppDBConfig(\n appCode: string,\n env: SecrecyEnv,\n sessionId?: string | null | undefined\n ): Promise<\n | SuccessResponse<AppDBConfig>\n | ErrorAccessDenied\n | ErrorNotFound\n | ErrorNotExist\n | null\n > {\n const { dbConfig } = await BaseClient._getBaseClient(\n env,\n sessionId\n )(\"query\")({\n dbConfig: [\n {\n appCode\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbConfig) {\n return null;\n }\n\n if (dbConfig.__typename === \"ErrorAccessDenied\") {\n return dbConfig;\n }\n\n if (dbConfig.__typename === \"ErrorNotFound\") {\n return dbConfig;\n }\n\n if (dbConfig.__typename === \"ErrorNotExist\") {\n return dbConfig;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfig.json\n };\n }\n\n static async getFAQ({\n lang,\n env,\n sessionId\n }: {\n lang?: Lang;\n env: SecrecyEnv;\n sessionId?: string | null | undefined;\n }): Promise<SuccessResponse<FaqItem[]> | ErrorAccessDenied | null> {\n const { faq } = await BaseClient._getBaseClient(env, sessionId)(\"query\")({\n faq: [\n {\n lang\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FaqResponse\": {\n __typename: true,\n faq: {\n answer: true,\n order: true,\n question: true\n }\n }\n }\n ]\n });\n\n if (!faq) {\n return null;\n }\n\n if (faq.__typename === \"ErrorAccessDenied\") {\n return faq;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: faq.faq\n };\n }\n\n static async getBlog({\n env,\n lang,\n sessionId\n }: {\n env: SecrecyEnv;\n lang?: Lang | null | undefined;\n sessionId?: string | null | undefined;\n }): Promise<SuccessResponse<BlogItem[]> | ErrorLangNotExist | null> {\n const { blog } = await BaseClient._getBaseClient(env, sessionId)(\"query\")({\n blog: [\n {\n lang\n },\n {\n \"...on ErrorLangNotExist\": {\n __typename: true,\n message: true\n },\n \"...on BlogResponse\": {\n __typename: true,\n blogItems: {\n id: true,\n blogId: true,\n author: true,\n body: true,\n date: true,\n image: true,\n imageAlt: true,\n summary: true,\n title: true,\n order: true\n }\n }\n }\n ]\n });\n\n if (!blog) {\n return null;\n }\n\n if (blog.__typename === \"ErrorLangNotExist\") {\n return blog;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: blog.blogItems.map(b => ({ ...b, date: new Date(b.date) }))\n };\n }\n\n async reportUser(\n reportedUserId: string,\n customMessage?: string\n ): Promise<\n SuccessResponse<SendReport> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const { sendReport } = await this.client(\"mutation\")({\n sendReport: [\n {\n reportedUserId,\n customMessage\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on SendReportResponse\": {\n __typename: true,\n sendReport: {\n id: true,\n customMessage: true,\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true\n },\n reportedUser: {\n id: true,\n firstname: true,\n lastname: true,\n email: true\n }\n }\n }\n }\n ]\n });\n\n if (!sendReport) {\n return null;\n }\n\n if (sendReport.__typename === \"ErrorAccessDenied\") {\n return sendReport;\n }\n\n if (sendReport.__typename === \"ErrorNotFound\") {\n return sendReport;\n }\n\n if (!sendReport.sendReport) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: sendReport.sendReport\n };\n }\n\n static async deleteUser({\n sessionId,\n userId,\n env\n }: {\n sessionId: string;\n userId?: string;\n env: SecrecyEnv;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteUser } = await BaseClient._getBaseClient(\n env,\n sessionId\n )(\"mutation\")({\n deleteUser: [\n {\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteUserResponse\": {\n __typename: true,\n deleteUser: true\n }\n }\n ]\n });\n\n if (!deleteUser) {\n return null;\n }\n\n if (deleteUser.__typename === \"ErrorAccessDenied\") {\n return deleteUser;\n }\n\n if (!deleteUser.deleteUser) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteUser.deleteUser\n };\n }\n\n async dbGet<U>({\n field,\n userId\n }: {\n field: string;\n userId?: string | null | undefined;\n }): Promise<\n | SuccessResponse<U>\n | ErrorAccessDenied\n | ErrorNotExist\n | ErrorNotFound\n | null\n > {\n const { dbGet } = await this.client(\"query\")({\n dbGet: [\n {\n field,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbGetResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbGet) {\n return null;\n }\n\n if (dbGet.__typename === \"ErrorAccessDenied\") {\n return dbGet;\n }\n\n if (dbGet.__typename === \"ErrorNotExist\") {\n return dbGet;\n }\n\n if (dbGet.__typename === \"ErrorNotFound\") {\n return dbGet;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbGet.json.res\n };\n }\n\n async dbSet<T extends UserData, U extends Document>({\n value,\n userId\n }: {\n value: U;\n userId?: string | null | undefined;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null> {\n if (typeof value !== \"object\") {\n throw new Error(\n `value should be an object including fields you want to update.`\n );\n }\n\n const { dbSet } = await this.client(\"mutation\")({\n dbSet: [\n {\n userId,\n value: serialize(value).toString(\"base64\")\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbSetResponse\": {\n __typename: true,\n dbSet: true\n }\n }\n ]\n });\n\n if (!dbSet) {\n return null;\n }\n\n if (dbSet.__typename === \"ErrorAccessDenied\") {\n return dbSet;\n }\n\n if (dbSet.__typename === \"ErrorNotFound\") {\n return dbSet;\n }\n\n if (!dbSet.dbSet) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbSet.dbSet.res\n };\n }\n\n async dbSearch<T>({\n search,\n field\n }: {\n field: string;\n search: string;\n }): Promise<\n SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null\n > {\n const { dbSearch } = await this.client(\"query\")({\n dbSearch: [\n {\n search,\n field\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DbSearchResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbSearch) {\n return null;\n }\n\n if (dbSearch.__typename === \"ErrorAccessDenied\") {\n return dbSearch;\n }\n\n if (dbSearch.__typename === \"ErrorBasic\") {\n return dbSearch;\n }\n\n if (dbSearch.__typename === \"ErrorNotExist\") {\n return dbSearch;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbSearch.json\n };\n }\n\n async deleteFolder({\n id\n }: {\n id: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorNotExist | ErrorAccessDenied | null\n > {\n const { deleteFolder } = await this.client(\"mutation\")({\n deleteFolder: [\n {\n id\n },\n {\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFolderResponse\": {\n __typename: true,\n deleteFolder: true\n }\n }\n ]\n });\n\n if (!deleteFolder) {\n return null;\n }\n\n if (deleteFolder.__typename === \"ErrorNotExist\") {\n return deleteFolder;\n }\n\n if (deleteFolder.__typename === \"ErrorAccessDenied\") {\n return deleteFolder;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFolder.deleteFolder ?? false\n };\n }\n\n async moveFolders({\n foldersId,\n parentFolderId\n }: {\n foldersId: string[];\n parentFolderId?: string | null | undefined;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { moveFolders } = await this.client(\"mutation\")({\n moveFolders: [\n {\n foldersId,\n parentFolderId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on MoveFoldersResponse\": {\n __typename: true,\n moveFolders: true\n }\n }\n ]\n });\n\n if (!moveFolders) {\n return null;\n }\n\n if (moveFolders.__typename === \"ErrorAccessDenied\") {\n return moveFolders;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: moveFolders.moveFolders ?? false\n };\n }\n\n async moveFiles({\n filesId,\n parentFolderId\n }: {\n filesId: string[];\n parentFolderId?: string | null | undefined;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { moveFiles } = await this.client(\"mutation\")({\n moveFiles: [\n {\n filesId,\n parentFolderId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on MoveFilesResponse\": {\n __typename: true,\n moveFiles: true\n }\n }\n ]\n });\n\n if (!moveFiles) {\n return null;\n }\n\n if (moveFiles.__typename === \"ErrorAccessDenied\") {\n return moveFiles;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: moveFiles.moveFiles ?? false\n };\n }\n\n async folderSize({\n folderId\n }: {\n folderId?: string | null | undefined;\n }): Promise<SuccessResponse<FolderSize> | ErrorAccessDenied | null> {\n const { folderSize } = await this.client(\"query\")({\n folderSize: [\n {\n folderId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FolderSizeResponse\": {\n __typename: true,\n size: true,\n sizeBefore: true\n }\n }\n ]\n });\n\n if (!folderSize) {\n return null;\n }\n\n if (folderSize.__typename === \"ErrorAccessDenied\") {\n return folderSize;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n size: BigInt(folderSize.size),\n sizeBefore: BigInt(folderSize.sizeBefore)\n }\n };\n }\n\n async getSponsorshipLink({\n backUrl\n }: {\n backUrl: string;\n }): Promise<string | null> {\n const me = await this.me({ withPublicKey: false });\n\n if (!me) {\n return null;\n }\n\n if (me.__typename === \"ErrorNotFound\") {\n return null;\n }\n\n return getLink({\n app: \"auth\",\n path: `/sign-up?gf=${btoa(me.data.email)}&au=${btoa(backUrl)}`\n });\n }\n}\n","import type { User } from \"./index.js\";\nimport type {\n InternalVFile,\n InternalFolder,\n InternalVFileWithFolder,\n InternalFile,\n InternalFolderFull\n} from \"./client/types/index.js\";\n\nexport const vFilesCache = new Map<\n string,\n InternalVFile | InternalVFileWithFolder\n>();\n\nexport const filesCache = new Map<string, InternalFile>();\n\nexport const foldersCache = new Map<\n string,\n InternalFolder | InternalFolderFull\n>();\n\nexport const usersCache = new Map<\n string,\n User | User<{ withPublicKey: true }>\n>();\n","type IsEmptyObject<O> = O extends { [key: string]: never }\n ? Record<string, unknown>\n : O;\n\ninterface StoreBuddyInit<T> {\n /**\n * Initialise the storeBuddy instance with 'default' (first-load) data. This\n * behaves in the same way as the `save` method in the main `StoreBuddy`\n * interface but doesn't save any data if the storage entry already exists\n * (to prevent new data being overwritten by its older, default form).\n * @param data The data to save to localStorage or sessionStorage.\n * @returns The main `StoreBuddy` interface with methods like `load`, etc.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * // The \"foo\" entry is initialised with the default data \"bar\"\n * const storage1 = storeBuddy(\"foo\").init(\"bar\");\n *\n * // The \"hello\" entry is initialised with a default object literal\n * const storage2 = storeBuddy(\"hello\").init({ prop1: \"world\", prop2: false });\n * ```\n */\n init(data: IsEmptyObject<T>): StoreBuddy<T>;\n}\n\nexport interface StoreBuddy<T> {\n /**\n * Retrieve the current data set using this instance.\n * @returns The data from localStorage or sessionStorage, throwing an error\n * if no data is found.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * const storage1 = storeBuddy(\"foo\").init(\"bar\");\n * storage1.load(); // returns \"bar\"\n * ```\n */\n load(): IsEmptyObject<T>;\n\n /**\n * Set new data or overwrite old data in localStorage or sessionStorage. For\n * TS developers, saving data of a _different_ type to the one specified in\n * the type parameter is prevented.\n * @param data The data to save to localStorage or sessionStorage.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * // Saves the string \"bar\" to the localStorage entry with the key \"foo\"\n * const storage1 = storeBuddy(\"foo\").init(\"bar\");\n *\n * // Overwrites that same string with different data. Note that, without\n * // specifying a specific type when initialising, there is no type safety\n * // provided for TypeScript developers\n * storage1.save(\"baz\");\n * storage1.save(123);\n *\n * // This is type-safe...\n * const storage2 = storeBuddy<number>(\"foo\").init(123);\n *\n * // ...so this works...\n * storage2.save(456);\n *\n * // ...and this does not work :)\n * storage2.save(\"I am not a number\");\n * ```\n */\n save(data: IsEmptyObject<T>): void;\n\n /**\n * Reset the data back to its original value set with the `init` method.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * const storage = storeBuddy(\"foo\").init(\"bar\");\n * storage.save(\"hello\");\n * storage.reset();\n * storage.load(); // returns \"bar\"\n * ```\n */\n reset(): void;\n\n /**\n * Remove all data set using this instance.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * const storage = storeBuddy(\"foo\").init(\"bar\");\n * storage.load(); // returns \"bar\"\n * storage.clear();\n * storage.load(); // throws an error (no data exists)\n * ```\n */\n clear(): void;\n}\n\n/**\n * Create persistent or temporary client-side storage with a portable,\n * type-safe wrapper around the [Web Storage API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API).\n * @param key The key used to access the stored value.\n * @param [session] Save data in sessionStorage (`true`) or in localStorage\n * (`false`). Default is `false`.\n * @example\n *\n * ```ts\n * import storeBuddy from \"store-buddy\";\n *\n * // \"foo\" is the key used to access the stored value, which is created in the\n * // method `init`\n * const storage1 = storeBuddy(\"foo\").init(\"bar\");\n *\n * // Using sessionStorage instead of localStorage is possible by specifying\n * // `true` in the `session` parameter\n * const storage2 = storeBuddy(\"foo\", true).init(\"bar\");\n *\n * // Type safety can be enabled by providing an argument to the type parameter\n * type Data = {\n * hello: string;\n * world: number;\n * }\n *\n * const storage3 = storeBuddy<Data>(\"foo\").init({\n * hello: \"foo\",\n * world: 123\n * })\n * ```\n */\nexport function storeBuddy<T>(key: string, session = false): StoreBuddyInit<T> {\n return {\n init(initialData: IsEmptyObject<T>): StoreBuddy<T> {\n const sessionOrLocal = session ? sessionStorage : localStorage;\n\n if (!sessionOrLocal.getItem(key)) {\n sessionOrLocal.setItem(key, JSON.stringify(initialData));\n }\n\n return {\n load(): IsEmptyObject<T> {\n const raw = sessionOrLocal.getItem(key);\n\n if (!raw) {\n throw new Error(\n \"store-buddy: data has not been set or cannot be recognised\"\n );\n }\n\n const data = JSON.parse(raw);\n return data;\n },\n save: (data: IsEmptyObject<T>): void =>\n sessionOrLocal.setItem(key, JSON.stringify(data)),\n reset: (): void =>\n sessionOrLocal.setItem(key, JSON.stringify(initialData)),\n clear: (): void => sessionOrLocal.removeItem(key)\n };\n }\n };\n}\n","import type { KeyPair } from \"../index.js\";\nimport type { StoreBuddy } from \"../utils/store-buddy.js\";\nimport { storeBuddy } from \"../utils/store-buddy.js\";\n\nexport function getStorage(session?: boolean | undefined): {\n userAppKeys: StoreBuddy<KeyPair | null>;\n userAppSession: StoreBuddy<string | null>;\n jwt: StoreBuddy<string | null>;\n} {\n const userAppSession = storeBuddy<string | null>(\n `secrecy.user_app_session`,\n session\n ).init(null);\n const userAppKeys = storeBuddy<KeyPair | null>(\n `secrecy.user_app_keys`,\n session\n ).init(null);\n const jwt = storeBuddy<string | null>(`secrecy.jwt`, session).init(null);\n return { userAppKeys, userAppSession, jwt };\n}\n","/* eslint-disable */\n\nexport const AllTypesProps: Record<string, any> = {\n BigInt: \"String\",\n Bytes: \"String\",\n DateTime: \"String\",\n Decimal: \"String\",\n Json: \"String\",\n Lang: \"enum\",\n PlanKind: \"enum\",\n UserRole: \"enum\",\n MailType: \"enum\",\n Rights: \"enum\",\n FileContentType: \"enum\",\n MailFileInput: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n name: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n MailRecipientInput: {\n body: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n subject: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n recipientId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n files: {\n type: \"MailFileInput\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n NameKeyInput: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n nameKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n files: {\n type: \"ShareFileKeyInput\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n NameKeyInputFolders: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n nameKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n PayInput: {\n type: {\n type: \"PayInputType\",\n array: false,\n arrayRequired: false,\n required: true\n },\n token: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n firstName: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n lastName: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n street: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n postalCode: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n city: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n country: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n number: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n month: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n year: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n cvv: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n PayInputType: \"enum\",\n ShareFileInHistoryInput: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n users: {\n type: \"ShareFileKeyInput\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n ShareFileKeyInput: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n key: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n ShareFoldersInput: {\n folders: {\n type: \"NameKeyInputFolders\",\n array: true,\n arrayRequired: true,\n required: true\n },\n vFiles: {\n type: \"NameKeyInput\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n Query: {\n blog: {\n lang: {\n type: \"Lang\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n dbConfig: {\n appCode: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n dbGet: {\n field: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n dbSearch: {\n search: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n field: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deletedMails: {\n mailType: {\n type: \"MailType\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n faq: {\n lang: {\n type: \"Lang\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n file: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n fileContent: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n filesSharedWithMe: {\n accepted: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n folder: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n deleted: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n folderSize: {\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n mail: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n user: {\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n vFile: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n userList: {\n search: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n }\n },\n Mutation: {\n addFileToHistory: {\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n createApplication: {\n name: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n origin: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n developerId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n createDraftMail: {\n hash: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n hashKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n body: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n subject: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n replyTo: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n senderFiles: {\n type: \"MailFileInput\",\n array: true,\n arrayRequired: true,\n required: true\n },\n recipients: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n createFolder: {\n name: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n key: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n parentFolderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n dbConfigMutation: {\n appCode: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n config: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n dbSet: {\n value: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n deleteDraftMail: {\n draftId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteFile: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteFolder: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteFolderCloudTrash: {\n ids: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n deleteFolderSharing: {\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteMail: {\n mailId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteMailTrash: {\n ids: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n deleteUser: {\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n deleteVFile: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n deleteVFileCloudTrash: {\n ids: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n deleteVFileSharing: {\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n duplicateVFile: {\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n customName: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n logout: {\n sessionId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n moveFiles: {\n filesId: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n },\n parentFolderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n moveFolders: {\n foldersId: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n },\n parentFolderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n pay: {\n planCode: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n input: {\n type: \"PayInput\",\n array: false,\n arrayRequired: false,\n required: true\n },\n autoRenew: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n readMail: {\n mailId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n recoverFolder: {\n id: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n recoverMail: {\n mailId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n recoverVFile: {\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n saveInCloud: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n key: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n filename: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n nameKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n sendDraftMail: {\n draftMailId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n temporaryRecipients: {\n type: \"String\",\n array: true,\n arrayRequired: true,\n required: true\n },\n recipients: {\n type: \"MailRecipientInput\",\n array: true,\n arrayRequired: true,\n required: true\n },\n customMessage: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n sendOneMail: {\n mailIntegrityId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n recipient: {\n type: \"MailRecipientInput\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n sendReport: {\n reportedUserId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n customMessage: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n shareFileInHistory: {\n input: {\n type: \"ShareFileInHistoryInput\",\n array: false,\n arrayRequired: false,\n required: true\n },\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n shareFolder: {\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n shareFolderFinish: {\n shareFolders: {\n type: \"ShareFoldersInput\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n rights: {\n type: \"Rights\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n shareVFile: {\n vFileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n nameKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n rights: {\n type: \"Rights\",\n array: false,\n arrayRequired: false,\n required: true\n },\n history: {\n type: \"ShareFileKeyInput\",\n array: true,\n arrayRequired: true,\n required: true\n }\n },\n unreadMail: {\n mailId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n updateAppNotifications: {\n enableAll: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n },\n mail: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n },\n cloud: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n },\n disableAllUntil: {\n type: \"DateTime\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n updateAppSettings: {\n cloudFileDaysForDelete: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: false\n },\n cloudFolderDaysForDelete: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: false\n },\n historyFileDaysForDelete: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: false\n },\n historyMaxFileCount: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: false\n },\n autoDisconnectDelay: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n updateDraftMail: {\n draftId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n hash: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n hashKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n body: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n subject: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n replyTo: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n senderFiles: {\n type: \"MailFileInput\",\n array: true,\n arrayRequired: false,\n required: true\n },\n recipients: {\n type: \"String\",\n array: true,\n arrayRequired: false,\n required: true\n }\n },\n updateFile: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n isFavorite: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n },\n filename: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n deletedAt: {\n type: \"DateTime\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n updateFolder: {\n folderId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n name: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n isFavorite: {\n type: \"Boolean\",\n array: false,\n arrayRequired: false,\n required: false\n },\n deletedAt: {\n type: \"DateTime\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n updateProfile: {\n firstname: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n lastname: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n lang: {\n type: \"Lang\",\n array: false,\n arrayRequired: false,\n required: false\n }\n },\n uploadAnonymous: {\n fileName: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileSize: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileSizeBefore: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: true\n },\n message: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: false\n },\n pubKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n token: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n uploadFile: {\n fileSize: {\n type: \"BigInt\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileSizeBefore: {\n type: \"BigInt\",\n array: false,\n arrayRequired: false,\n required: true\n },\n fileKey: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n md5: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n md5Encrypted: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n uploadFileEnd: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n uploadFilePartEnd: {\n fileId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n md5: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n order: {\n type: \"Int\",\n array: false,\n arrayRequired: false,\n required: true\n }\n },\n changeUserPlan: {\n userId: {\n type: \"String\",\n array: false,\n arrayRequired: false,\n required: true\n },\n plan: {\n type: \"PlanKind\",\n array: false,\n arrayRequired: false,\n required: true\n }\n }\n }\n};\n\nexport const ReturnTypes: Record<string, any> = {\n AppNotificationsResult: {\n \"...on UserAppNotifications\": \"UserAppNotifications\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n BlogResult: {\n \"...on BlogResponse\": \"BlogResponse\",\n \"...on ErrorLangNotExist\": \"ErrorLangNotExist\"\n },\n DbConfigResult: {\n \"...on DbConfigResponse\": \"DbConfigResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n DbGetResult: {\n \"...on DbGetResponse\": \"DbGetResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DbSearchResult: {\n \"...on DbSearchResponse\": \"DbSearchResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n DeletedFoldersResult: {\n \"...on DeletedFoldersResponse\": \"DeletedFoldersResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeletedMailsResult: {\n \"...on DeletedMailsResponse\": \"DeletedMailsResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeletedVFilesResult: {\n \"...on DeletedVFilesResponse\": \"DeletedVFilesResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n FaqResult: {\n \"...on FaqResponse\": \"FaqResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n FileResult: {\n \"...on FileQueryResponse\": \"FileQueryResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n FileContentResult: {\n \"...on FileContentResponse\": \"FileContentResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n FolderResult: {\n \"...on FolderResponse\": \"FolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n FolderSizeResult: {\n \"...on FolderSizeResponse\": \"FolderSizeResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n FoldersSharedWithMeResult: {\n \"...on FolderSharedWithMeResponse\": \"FolderSharedWithMeResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n LimitsResult: {\n \"...on QueryLimits\": \"QueryLimits\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorLimit\": \"ErrorLimit\"\n },\n MailResult: {\n \"...on QueryMailResponse\": \"QueryMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n PaymentInfosResult: {\n \"...on PaymentInfosResponse\": \"PaymentInfosResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n PlansResult: {\n \"...on PlanResponse\": \"PlanResponse\"\n },\n SharedFoldersResult: {\n \"...on SharedFoldersResponse\": \"SharedFoldersResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n SharedVFilesResult: {\n \"...on SharedVFilesResponse\": \"SharedVFilesResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n UnreadReceivedMailsCountResult: {\n \"...on UnreadReceivedMailsCountResponse\":\n \"UnreadReceivedMailsCountResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n UserResult: {\n \"...on UserResponse\": \"UserResponse\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n VFileResult: {\n \"...on VFileResponse\": \"VFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n VFilesSharedWithMeResult: {\n \"...on VFilesSharedWithMeResponse\": \"VFilesSharedWithMeResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n UserListResult: {\n \"...on UserListResponse\": \"UserListResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n AddFileToHistoryResult: {\n \"...on AddFileToHistoryResponse\": \"AddFileToHistoryResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n CancelPaymentResult: {\n \"...on CancelPaymentResponse\": \"CancelPaymentResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n CreateApplicationResult: {\n \"...on CreateApplicationResponse\": \"CreateApplicationResponse\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n CreateDraftMailResult: {\n \"...on CreateDraftMailResponse\": \"CreateDraftMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n CreateFolderResult: {\n \"...on CreateFolderResponse\": \"CreateFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DbConfigMutationResult: {\n \"...on DbConfigMutationResponse\": \"DbConfigMutationResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DbSetResult: {\n \"...on DbSetResponse\": \"DbSetResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n DeleteDraftMailResult: {\n \"...on DeleteDraftMailResponse\": \"DeleteDraftMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteFileResult: {\n \"...on DeleteFileResponse\": \"DeleteFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DeleteFolderResult: {\n \"...on DeleteFolderResponse\": \"DeleteFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DeleteFolderCloudTrashResult: {\n \"...on DeleteFolderCloudTrashResponse\": \"DeleteFolderCloudTrashResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteFolderSharingResult: {\n \"...on DeleteFolderSharingResponse\": \"DeleteFolderSharingResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteMailResult: {\n \"...on DeleteMailResponse\": \"DeleteMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteMailTrashResult: {\n \"...on DeleteMailTrashResponse\": \"DeleteMailTrashResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteUserResult: {\n \"...on DeleteUserResponse\": \"DeleteUserResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteVFileResult: {\n \"...on DeleteVFileResponse\": \"DeleteVFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DeleteVFileCloudTrashResult: {\n \"...on DeleteVFileCloudTrashResponse\": \"DeleteVFileCloudTrashResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n DeleteVFileSharingResult: {\n \"...on DeleteVFileSharingResponse\": \"DeleteVFileSharingResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n DuplicateVFileResult: {\n \"...on DuplicateVFileResponse\": \"DuplicateVFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n EmptyCloudTrashResult: {\n \"...on DeleteMailResponse\": \"DeleteMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n EmptyMailTrashResult: {\n \"...on EmptyMailTrashResponse\": \"EmptyMailTrashResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n LogoutResult: {\n \"...on LogoutResponse\": \"LogoutResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n MoveFilesResult: {\n \"...on MoveFilesResponse\": \"MoveFilesResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n MoveFoldersResult: {\n \"...on MoveFoldersResponse\": \"MoveFoldersResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n PayResult: {\n \"...on PayResponse\": \"PayResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n ReadMailResult: {\n \"...on ReadMailResponse\": \"ReadMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n RecoverFolderResult: {\n \"...on RecoverFolderResponse\": \"RecoverFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n RecoverMailResult: {\n \"...on RecoverMailResponse\": \"RecoverMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n RecoverVFileResult: {\n \"...on RecoverVFileResponse\": \"RecoverVFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n SaveInCloudResult: {\n \"...on SaveInCloudResponse\": \"SaveInCloudResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n SendDraftMailResult: {\n \"...on SendDraftMailResponse\": \"SendDraftMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n SendOneMailResult: {\n \"...on RecoverFolderResponse\": \"RecoverFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n SendReportResult: {\n \"...on SendReportResponse\": \"SendReportResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n ShareFileInHistoryResult: {\n \"...on ShareFileInHistoryResponse\": \"ShareFileInHistoryResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n ShareFolderResult: {\n \"...on ShareFolderResponse\": \"ShareFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n ShareFolderFinishResult: {\n \"...on ShareFolderFinishResponse\": \"ShareFolderFinishResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n ShareVFileResult: {\n \"...on ShareVFileResponse\": \"ShareVFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n UnreadMailResult: {\n \"...on UnreadMailResponse\": \"UnreadMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n UpdateAppNotificationsResult: {\n \"...on UpdateAppNotificationsResponse\": \"UpdateAppNotificationsResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n UpdateAppSettingsResult: {\n \"...on UpdateAppSettingsResponse\": \"UpdateAppSettingsResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n UpdateDraftMailResult: {\n \"...on UpdateDraftMailResponse\": \"UpdateDraftMailResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n UpdateFileResult: {\n \"...on UpdateFileResponse\": \"UpdateFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n UpdateFolderResult: {\n \"...on UpdateFolderResponse\": \"UpdateFolderResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotExist\": \"ErrorNotExist\"\n },\n UpdateProfileResult: {\n \"...on UpdateProfileResponse\": \"UpdateProfileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n UploadFileResult: {\n \"...on UploadFileResponse\": \"UploadFileResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorLimit\": \"ErrorLimit\"\n },\n UploadFileEndResult: {\n \"...on UploadFileEndResponse\": \"UploadFileEndResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\"\n },\n UploadFilePartEndResult: {\n \"...on UploadFilePartEndResponse\": \"UploadFilePartEndResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n ChangeUserPlanResult: {\n \"...on ChangeUserPlanResponse\": \"ChangeUserPlanResponse\",\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\"\n },\n AppKeyPair: {\n pub: \"String\"\n },\n AppSession: {\n id: \"ID\",\n lastActivity: \"DateTime\",\n userAgent: \"String\",\n ip: \"String\",\n city: \"String\",\n country: \"String\",\n userSession: \"UserSession\",\n userApp: \"ApplicationsOnUsers\",\n createdAt: \"DateTime\"\n },\n Application: {\n id: \"ID\",\n name: \"String\"\n },\n ApplicationsOnUsers: {\n fakeUserId: \"String\",\n keyPair: \"AppKeyPair\",\n sessions: \"AppSession\",\n app: \"Application\",\n user: \"User\",\n folders: \"FoldersOnUsersOnApplications\",\n settings: \"UserAppSettings\"\n },\n Blog: {\n id: \"ID\",\n order: \"Int\",\n entries: \"BlogEntry\"\n },\n BlogEntry: {\n id: \"ID\",\n lang: \"Lang\",\n author: \"String\",\n body: \"String\",\n date: \"DateTime\",\n image: \"String\",\n summary: \"String\",\n title: \"String\"\n },\n BlogItem: {\n id: \"String\",\n blogId: \"String\",\n order: \"Int\",\n title: \"String\",\n body: \"String\",\n author: \"String\",\n image: \"String\",\n imageAlt: \"String\",\n summary: \"String\",\n date: \"DateTime\"\n },\n CloudLimits: {\n size: \"BigInt\",\n maxSize: \"BigInt\",\n count: \"BigInt\",\n maxCount: \"BigInt\"\n },\n Error: {\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorUpgradePlan\": \"ErrorUpgradePlan\",\n \"...on ErrorLangNotExist\": \"ErrorLangNotExist\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorLimit\": \"ErrorLimit\",\n \"...on ErrorBasic\": \"ErrorBasic\"\n },\n ErrorAccessDenied: {\n message: \"String\"\n },\n ErrorBase: {\n \"...on ErrorAccessDenied\": \"ErrorAccessDenied\",\n \"...on ErrorBasic\": \"ErrorBasic\",\n \"...on ErrorLangNotExist\": \"ErrorLangNotExist\",\n \"...on ErrorLimit\": \"ErrorLimit\",\n \"...on ErrorNotExist\": \"ErrorNotExist\",\n \"...on ErrorNotFound\": \"ErrorNotFound\",\n \"...on ErrorUpgradePlan\": \"ErrorUpgradePlan\",\n message: \"String\"\n },\n ErrorBasic: {\n message: \"String\"\n },\n ErrorLangNotExist: {\n message: \"String\"\n },\n ErrorLimit: {\n message: \"String\",\n field: \"String\"\n },\n ErrorNotExist: {\n message: \"String\",\n field: \"String\"\n },\n ErrorNotFound: {\n message: \"String\",\n field: \"String\"\n },\n ErrorUpgradePlan: {\n message: \"String\"\n },\n Faq: {\n id: \"ID\",\n order: \"Int\",\n entries: \"FaqEntry\"\n },\n FaqEntry: {\n id: \"ID\",\n lang: \"Lang\",\n question: \"String\",\n answer: \"String\",\n faq: \"Faq\"\n },\n FaqItem: {\n order: \"Int\",\n question: \"String\",\n answer: \"String\"\n },\n File: {\n id: \"ID\",\n size: \"BigInt\",\n sizeBefore: \"BigInt\",\n createdAt: \"DateTime\",\n vFiles: \"VFile\",\n vFilesCurrent: \"VFile\",\n users: \"FilesOnUsersOnApplications\",\n md5: \"String\",\n md5Encrypted: \"String\",\n deletedAt: \"DateTime\",\n userApp: \"ApplicationsOnUsers\",\n mails: \"FilesOnMails\",\n validatedAt: \"DateTime\",\n user: \"FilesOnUsersOnApplications\"\n },\n FileContent: {\n \"...on FileContentCloud\": \"FileContentCloud\",\n \"...on FileContentReceivedMail\": \"FileContentReceivedMail\",\n \"...on FileContentSentMail\": \"FileContentSentMail\"\n },\n FileContentBase: {\n \"...on FileContentCloud\": \"FileContentCloud\",\n \"...on FileContentReceivedMail\": \"FileContentReceivedMail\",\n \"...on FileContentSentMail\": \"FileContentSentMail\",\n parts: \"FileContentPart\",\n key: \"String\",\n md5: \"String\",\n md5Encrypted: \"String\",\n totalSize: \"BigInt\",\n type: \"FileContentType\"\n },\n FileContentCloud: {\n parts: \"FileContentPart\",\n key: \"String\",\n md5: \"String\",\n md5Encrypted: \"String\",\n totalSize: \"BigInt\",\n type: \"FileContentType\",\n publicKey: \"String\"\n },\n FileContentPart: {\n contentUrl: \"String\",\n order: \"Int\",\n md5: \"String\"\n },\n FileContentReceivedMail: {\n parts: \"FileContentPart\",\n key: \"String\",\n md5: \"String\",\n md5Encrypted: \"String\",\n totalSize: \"BigInt\",\n type: \"FileContentType\",\n senderPublicKey: \"String\"\n },\n FileContentSentMail: {\n parts: \"FileContentPart\",\n key: \"String\",\n md5: \"String\",\n md5Encrypted: \"String\",\n totalSize: \"BigInt\",\n type: \"FileContentType\"\n },\n FilePart: {\n id: \"ID\",\n file: \"File\",\n fileId: \"String\",\n size: \"BigInt\",\n order: \"Int\",\n md5: \"String\",\n validatedAt: \"DateTime\"\n },\n FilePartResponse: {\n fields: \"Json\",\n url: \"String\",\n order: \"Int\"\n },\n FileResponse: {\n fileId: \"String\",\n parts: \"FilePartResponse\",\n filePartSize: \"BigInt\"\n },\n FileShared: {\n userId: \"String\",\n message: \"String\",\n appId: \"String\",\n id: \"String\",\n filename: \"String\",\n size: \"Int\",\n sizeBefore: \"Int\"\n },\n FileSharedContent: {\n ownerId: \"String\",\n pubKey: \"String\",\n message: \"String\",\n appId: \"String\",\n id: \"String\",\n type: \"String\",\n filename: \"String\",\n contentUrl: \"String\",\n key: \"String\",\n size: \"Int\",\n sizeBefore: \"Int\"\n },\n FilesOnMails: {\n file: \"File\",\n fileKey: \"String\",\n filename: \"String\",\n mail: \"Mail\"\n },\n FilesOnUsersOnApplications: {\n file: \"File\",\n userApp: \"ApplicationsOnUsers\",\n key: \"String\"\n },\n Folder: {\n id: \"ID\",\n isFavorite: \"Boolean\",\n createdAt: \"DateTime\",\n deletedAt: \"DateTime\",\n updatedAt: \"DateTime\",\n createdBy: \"ApplicationsOnUsers\",\n userApps: \"FoldersOnUsersOnApplications\",\n userApp: \"FoldersOnUsersOnApplications\",\n name: \"String\",\n parentFolder: \"Folder\",\n subfolders: \"Folder\",\n vFiles: \"VFile\",\n breadcrumb: \"FolderBreadcrumbItem\"\n },\n FolderBreadcrumbItem: {\n id: \"String\",\n name: \"String\",\n pubKey: \"String\",\n nameKey: \"String\"\n },\n FolderSize: {\n size: \"BigInt\",\n sizeBefore: \"BigInt\"\n },\n FoldersOnUsersOnApplications: {\n folder: \"Folder\",\n userApp: \"ApplicationsOnUsers\",\n rights: \"Rights\",\n nameKey: \"String\",\n isRoot: \"Boolean\"\n },\n Limits: {\n downloadBandwidth: \"BigInt\",\n downloadCount: \"BigInt\",\n hardFileCount: \"BigInt\",\n hardFileSize: \"BigInt\",\n perFileSize: \"BigInt\",\n receivedMails: \"MailLimits\",\n sentMails: \"MailLimits\",\n uploadBandwidth: \"BigInt\",\n uploadCount: \"BigInt\"\n },\n MailLimits: {\n count: \"BigInt\",\n fileCount: \"BigInt\",\n fileSize: \"BigInt\",\n hardCount: \"BigInt\",\n hardFileCount: \"BigInt\",\n hardFileSize: \"BigInt\",\n perFileSize: \"BigInt\"\n },\n MailLimitsValues: {\n count: \"BigInt\",\n maxCount: \"BigInt\",\n fileCount: \"BigInt\",\n maxFileCount: \"BigInt\",\n fileSize: \"BigInt\",\n maxFileSize: \"BigInt\"\n },\n QueryLimits: {\n cloud: \"CloudLimits\",\n mail: \"UserMailLimits\"\n },\n UserMailLimits: {\n sent: \"MailLimitsValues\",\n received: \"MailLimitsValues\"\n },\n Mail: {\n id: \"ID\",\n app: \"Application\",\n body: \"String\",\n createdAt: \"DateTime\",\n deletedAt: \"DateTime\",\n files: \"FilesOnMails\",\n mailIntegrity: \"MailIntegrity\",\n mailIntegrityDraft: \"MailIntegrityDraft\",\n openedAt: \"DateTime\",\n recipient: \"User\",\n sender: \"User\",\n subject: \"String\",\n type: \"MailType\",\n recipients: \"User\"\n },\n MailIntegrity: {\n id: \"ID\",\n hash: \"String\",\n hashKey: \"String\",\n answers: \"MailIntegrity\",\n app: \"Application\",\n mails: \"Mail\",\n recipients: \"User\",\n temporaryRecipients: \"TemporaryUser\",\n replyTo: \"MailIntegrity\"\n },\n MailIntegrityDraft: {\n id: \"ID\",\n hash: \"String\",\n hashKey: \"String\",\n app: \"Application\",\n mail: \"Mail\",\n recipients: \"User\",\n temporaryRecipients: \"TemporaryUser\",\n replyTo: \"MailIntegrity\"\n },\n Plan: {\n id: \"ID\",\n kind: \"PlanKind\",\n codes: \"String\",\n limits: \"Limits\"\n },\n Report: {\n id: \"ID\",\n user: \"User\",\n reportedUser: \"User\",\n customMessage: \"String\"\n },\n AddFileToHistoryResponse: {\n addFileToHistory: \"VFile\"\n },\n CancelPaymentResponse: {\n cancelPayment: \"Boolean\"\n },\n ChangeUserPlanResponse: {\n changeUserPlan: \"User\"\n },\n CreateApplicationResponse: {\n createApplication: \"String\"\n },\n CreateDraftMailResponse: {\n createDraftMail: \"Mail\"\n },\n CreateFolderResponse: {\n createFolder: \"Folder\"\n },\n DbConfigMutationResponse: {\n dbConfigMutation: \"Json\"\n },\n DbSetResponse: {\n dbSet: \"Json\"\n },\n DeleteDraftMailResponse: {\n deleteDraftMail: \"Boolean\"\n },\n DeleteFileResponse: {\n deleteFile: \"Boolean\"\n },\n DeleteFolderResponse: {\n deleteFolder: \"Boolean\"\n },\n DeleteFolderCloudTrashResponse: {\n deleteFolderCloudTrash: \"Boolean\"\n },\n DeleteFolderSharingResponse: {\n deleteFolderSharing: \"Boolean\"\n },\n DeleteMailResponse: {\n deleteMail: \"Boolean\"\n },\n DeleteMailTrashResponse: {\n deleteMailTrash: \"Boolean\"\n },\n DeleteUserResponse: {\n deleteUser: \"Boolean\"\n },\n DeleteVFileResponse: {\n deleteVFile: \"Boolean\"\n },\n DeleteVFileCloudTrashResponse: {\n deleteVFileCloudTrash: \"Boolean\"\n },\n DeleteVFileSharingResponse: {\n deleteVFileSharing: \"Boolean\"\n },\n DuplicateVFileResponse: {\n duplicateVFile: \"Boolean\"\n },\n EmptyCloudTrashResponse: {\n emptyCloudTrash: \"Boolean\"\n },\n EmptyMailTrashResponse: {\n emptyMailTrash: \"Boolean\"\n },\n LogoutResponse: {\n logout: \"Boolean\"\n },\n MoveFilesResponse: {\n moveFiles: \"Boolean\"\n },\n MoveFoldersResponse: {\n moveFolders: \"Boolean\"\n },\n PayResponse: {\n pay: \"Boolean\"\n },\n ReadMailResponse: {\n readMail: \"Boolean\"\n },\n RecoverFolderResponse: {\n recoverFolder: \"Boolean\"\n },\n RecoverMailResponse: {\n recoverMail: \"Boolean\"\n },\n RecoverVFileResponse: {\n recoverVFile: \"Boolean\"\n },\n SaveInCloudResponse: {\n saveInCloud: \"VFile\"\n },\n SendDraftMailResponse: {\n sendDraftMail: \"Boolean\"\n },\n SendOneMailResponse: {\n sendOneMail: \"Boolean\"\n },\n SendReportResponse: {\n sendReport: \"Report\"\n },\n ShareFileInHistoryResponse: {\n shareFileInHistory: \"Boolean\"\n },\n ShareFolderFinishResponse: {\n shareFolderFinish: \"Boolean\"\n },\n ShareVFileResponse: {\n shareVFile: \"Boolean\"\n },\n UnreadMailResponse: {\n unreadMail: \"Boolean\"\n },\n UpdateAppNotificationsResponse: {\n updateAppNotifications: \"UserAppNotifications\"\n },\n UpdateAppSettingsResponse: {\n updateAppSettings: \"UserAppSettings\"\n },\n UpdateDraftMailResponse: {\n updateDraftMail: \"Mail\"\n },\n UpdateFileResponse: {\n updateFile: \"VFile\"\n },\n UpdateFolderResponse: {\n updateFolder: \"Folder\"\n },\n UpdateProfileResponse: {\n updateProfile: \"User\"\n },\n UploadAnonymousResponse: {\n uploadAnonymous: \"FileResponse\"\n },\n UploadFileResponse: {\n uploadFile: \"FileResponse\"\n },\n UploadFileEndResponse: {\n uploadFileEnd: \"String\"\n },\n UploadFilePartEndResponse: {\n uploadFilePartEnd: \"Boolean\"\n },\n BlogResponse: {\n blogItems: \"BlogItem\"\n },\n DbConfigResponse: {\n json: \"Json\"\n },\n DbGetResponse: {\n json: \"Json\"\n },\n DbSearchResponse: {\n json: \"Json\"\n },\n DeletedFoldersResponse: {\n deletedFolders: \"Folder\"\n },\n DeletedMailsResponse: {\n deletedMails: \"Mail\"\n },\n DeletedVFilesResponse: {\n deletedVFiles: \"VFile\"\n },\n FaqResponse: {\n faq: \"FaqItem\"\n },\n FileQueryResponse: {\n file: \"File\"\n },\n FileContentResponse: {\n file: \"FileContent\"\n },\n FolderResponse: {\n folder: \"Folder\"\n },\n FolderSharedWithMeResponse: {\n foldersSharedWithMe: \"Folder\"\n },\n FolderSizeResponse: {\n size: \"BigInt\",\n sizeBefore: \"BigInt\"\n },\n QueryMailResponse: {\n mail: \"Mail\"\n },\n PaymentInfosResponse: {\n paymentInfos: \"PaymentInfos\"\n },\n PlanResponse: {\n plan: \"Plan\"\n },\n SharedFoldersResponse: {\n sharedFolders: \"Folder\"\n },\n SharedVFilesResponse: {\n sharedVFiles: \"VFile\"\n },\n UnreadReceivedMailsCountResponse: {\n count: \"Int\"\n },\n UserResponse: {\n user: \"User\"\n },\n UserListResponse: {\n userList: \"User\"\n },\n VFileResponse: {\n vFile: \"VFile\"\n },\n VFilesSharedWithMeResponse: {\n vFilesSharedWithMe: \"VFile\"\n },\n TemporaryUser: {\n id: \"ID\",\n mails: \"MailIntegrity\",\n draftMails: \"MailIntegrityDraft\",\n email: \"String\"\n },\n User: {\n id: \"ID\",\n deletedAt: \"DateTime\",\n lang: \"Lang\",\n reportSent: \"Report\",\n godFather: \"User\",\n godChildren: \"User\",\n firstname: \"String\",\n lastname: \"String\",\n email: \"String\",\n phone: \"String\",\n lastLogin: \"DateTime\",\n role: \"UserRole\",\n sessions: \"UserSession\",\n createdAt: \"DateTime\",\n receivedMails: \"Mail\",\n waitingReceivedMails: \"WaitingReceivedMail\",\n sentMails: \"Mail\",\n draftMails: \"Mail\",\n appSettings: \"UserAppSettings\",\n applications: \"ApplicationsOnUsers\",\n publicKey: \"String\"\n },\n UserAppNotifications: {\n id: \"ID\",\n enableAll: \"Boolean\",\n mail: \"Boolean\",\n cloud: \"Boolean\",\n disableAllUntil: \"DateTime\"\n },\n UserAppSettings: {\n id: \"ID\",\n cloudFileDaysForDelete: \"Int\",\n cloudFolderDaysForDelete: \"Int\",\n historyFileDaysForDelete: \"Int\",\n historyMaxFileCount: \"Int\",\n autoDisconnectDelay: \"Int\"\n },\n UserSession: {\n id: \"ID\",\n appSessions: \"AppSession\",\n lastActivity: \"DateTime\",\n userAgent: \"String\",\n ip: \"String\",\n city: \"String\",\n country: \"String\",\n createdAt: \"DateTime\"\n },\n VFile: {\n id: \"ID\",\n isFavorite: \"Boolean\",\n createdAt: \"DateTime\",\n deletedAt: \"DateTime\",\n filename: \"String\",\n userApps: \"VFilesOnUsersOnApplications\",\n createdBy: \"ApplicationsOnUsers\",\n userApp: \"VFilesOnUsersOnApplications\",\n folder: \"Folder\",\n history: \"File\",\n current: \"File\",\n updatedAt: \"DateTime\"\n },\n VFilesOnUsersOnApplications: {\n vFile: \"VFile\",\n userApp: \"ApplicationsOnUsers\",\n rights: \"Rights\",\n nameKey: \"String\",\n isRoot: \"Boolean\"\n },\n WaitingReceivedMail: {\n sender: \"User\",\n date: \"DateTime\",\n recipients: \"User\",\n temporaryRecipients: \"TemporaryUser\",\n attachmentsCount: \"Int\"\n },\n PaymentInfos: {\n hostedUrl: \"String\",\n currentSubscription: \"RecurlySubscription\",\n invoices: \"RecurlyInvoices\"\n },\n RecurlyInvoices: {\n pdf: \"String\",\n date: \"DateTime\",\n due: \"DateTime\",\n status: \"String\",\n total: \"Int\",\n name: \"String\",\n currency: \"String\"\n },\n RecurlySubscription: {\n autorenew: \"Boolean\",\n activatedAt: \"DateTime\",\n currentPeriodEndsAt: \"DateTime\",\n currentPeriodStartedAt: \"DateTime\",\n canceledAt: \"DateTime\",\n createdAt: \"DateTime\",\n expiresAt: \"DateTime\",\n pausedAt: \"DateTime\",\n trialEndsAt: \"DateTime\",\n trialStartedAt: \"DateTime\",\n updatedAt: \"DateTime\",\n state: \"String\",\n collectionMethod: \"String\",\n plan: \"String\",\n planCode: \"String\",\n total: \"Int\"\n },\n ShareFolderResponse: {\n folders: \"String\",\n vFiles: \"String\"\n },\n Query: {\n appNotifications: \"AppNotificationsResult\",\n blog: \"BlogResult\",\n dbConfig: \"DbConfigResult\",\n dbGet: \"DbGetResult\",\n dbSearch: \"DbSearchResult\",\n deletedFolders: \"DeletedFoldersResult\",\n deletedMails: \"DeletedMailsResult\",\n deletedVFiles: \"DeletedVFilesResult\",\n faq: \"FaqResult\",\n file: \"FileResult\",\n fileContent: \"FileContentResult\",\n filesSharedWithMe: \"FileSharedContent\",\n folder: \"FolderResult\",\n folderSize: \"FolderSizeResult\",\n foldersSharedWithMe: \"FoldersSharedWithMeResult\",\n limits: \"LimitsResult\",\n mail: \"MailResult\",\n paymentInfos: \"PaymentInfosResult\",\n plans: \"PlansResult\",\n sharedFolders: \"SharedFoldersResult\",\n sharedVFiles: \"SharedVFilesResult\",\n test: \"Boolean\",\n unreadReceivedMailsCount: \"UnreadReceivedMailsCountResult\",\n user: \"UserResult\",\n vFile: \"VFileResult\",\n vFilesSharedWithMe: \"VFilesSharedWithMeResult\",\n userList: \"UserListResult\"\n },\n Mutation: {\n addFileToHistory: \"AddFileToHistoryResult\",\n cancelPayment: \"CancelPaymentResult\",\n createApplication: \"CreateApplicationResult\",\n createDraftMail: \"CreateDraftMailResult\",\n createFolder: \"CreateFolderResult\",\n dbConfigMutation: \"DbConfigMutationResult\",\n dbSet: \"DbSetResult\",\n deleteDraftMail: \"DeleteDraftMailResult\",\n deleteFile: \"DeleteFileResult\",\n deleteFolder: \"DeleteFolderResult\",\n deleteFolderCloudTrash: \"DeleteFolderCloudTrashResult\",\n deleteFolderSharing: \"DeleteFolderSharingResult\",\n deleteMail: \"DeleteMailResult\",\n deleteMailTrash: \"DeleteMailTrashResult\",\n deleteUser: \"DeleteUserResult\",\n deleteVFile: \"DeleteVFileResult\",\n deleteVFileCloudTrash: \"DeleteVFileCloudTrashResult\",\n deleteVFileSharing: \"DeleteVFileSharingResult\",\n duplicateVFile: \"DuplicateVFileResult\",\n emptyCloudTrash: \"EmptyCloudTrashResult\",\n emptyMailTrash: \"EmptyMailTrashResult\",\n logout: \"LogoutResult\",\n moveFiles: \"MoveFilesResult\",\n moveFolders: \"MoveFoldersResult\",\n pay: \"PayResult\",\n readMail: \"ReadMailResult\",\n recoverFolder: \"RecoverFolderResult\",\n recoverMail: \"RecoverMailResult\",\n recoverVFile: \"RecoverVFileResult\",\n saveInCloud: \"SaveInCloudResult\",\n sendDraftMail: \"SendDraftMailResult\",\n sendOneMail: \"SendOneMailResult\",\n sendReport: \"SendReportResult\",\n shareFileInHistory: \"ShareFileInHistoryResult\",\n shareFolder: \"ShareFolderResult\",\n shareFolderFinish: \"ShareFolderFinishResult\",\n shareVFile: \"ShareVFileResult\",\n unreadMail: \"UnreadMailResult\",\n updateAppNotifications: \"UpdateAppNotificationsResult\",\n updateAppSettings: \"UpdateAppSettingsResult\",\n updateDraftMail: \"UpdateDraftMailResult\",\n updateFile: \"UpdateFileResult\",\n updateFolder: \"UpdateFolderResult\",\n updateProfile: \"UpdateProfileResult\",\n uploadAnonymous: \"FileResponse\",\n uploadFile: \"UploadFileResult\",\n uploadFileEnd: \"UploadFileEndResult\",\n uploadFilePartEnd: \"UploadFilePartEndResult\",\n changeUserPlan: \"ChangeUserPlanResult\"\n },\n Subscription: {\n test: \"Boolean\"\n }\n};\n","/* eslint-disable */\n\nimport { AllTypesProps, ReturnTypes } from \"./const.js\";\ntype ZEUS_INTERFACES =\n | GraphQLTypes[\"ErrorBase\"]\n | GraphQLTypes[\"FileContentBase\"];\ntype ZEUS_UNIONS =\n | GraphQLTypes[\"AppNotificationsResult\"]\n | GraphQLTypes[\"BlogResult\"]\n | GraphQLTypes[\"DbConfigResult\"]\n | GraphQLTypes[\"DbGetResult\"]\n | GraphQLTypes[\"DbSearchResult\"]\n | GraphQLTypes[\"DeletedFoldersResult\"]\n | GraphQLTypes[\"DeletedMailsResult\"]\n | GraphQLTypes[\"DeletedVFilesResult\"]\n | GraphQLTypes[\"FaqResult\"]\n | GraphQLTypes[\"FileResult\"]\n | GraphQLTypes[\"FileContentResult\"]\n | GraphQLTypes[\"FolderResult\"]\n | GraphQLTypes[\"FolderSizeResult\"]\n | GraphQLTypes[\"FoldersSharedWithMeResult\"]\n | GraphQLTypes[\"LimitsResult\"]\n | GraphQLTypes[\"MailResult\"]\n | GraphQLTypes[\"PaymentInfosResult\"]\n | GraphQLTypes[\"PlansResult\"]\n | GraphQLTypes[\"SharedFoldersResult\"]\n | GraphQLTypes[\"SharedVFilesResult\"]\n | GraphQLTypes[\"UnreadReceivedMailsCountResult\"]\n | GraphQLTypes[\"UserResult\"]\n | GraphQLTypes[\"VFileResult\"]\n | GraphQLTypes[\"VFilesSharedWithMeResult\"]\n | GraphQLTypes[\"UserListResult\"]\n | GraphQLTypes[\"AddFileToHistoryResult\"]\n | GraphQLTypes[\"CancelPaymentResult\"]\n | GraphQLTypes[\"CreateApplicationResult\"]\n | GraphQLTypes[\"CreateDraftMailResult\"]\n | GraphQLTypes[\"CreateFolderResult\"]\n | GraphQLTypes[\"DbConfigMutationResult\"]\n | GraphQLTypes[\"DbSetResult\"]\n | GraphQLTypes[\"DeleteDraftMailResult\"]\n | GraphQLTypes[\"DeleteFileResult\"]\n | GraphQLTypes[\"DeleteFolderResult\"]\n | GraphQLTypes[\"DeleteFolderCloudTrashResult\"]\n | GraphQLTypes[\"DeleteFolderSharingResult\"]\n | GraphQLTypes[\"DeleteMailResult\"]\n | GraphQLTypes[\"DeleteMailTrashResult\"]\n | GraphQLTypes[\"DeleteUserResult\"]\n | GraphQLTypes[\"DeleteVFileResult\"]\n | GraphQLTypes[\"DeleteVFileCloudTrashResult\"]\n | GraphQLTypes[\"DeleteVFileSharingResult\"]\n | GraphQLTypes[\"DuplicateVFileResult\"]\n | GraphQLTypes[\"EmptyCloudTrashResult\"]\n | GraphQLTypes[\"EmptyMailTrashResult\"]\n | GraphQLTypes[\"LogoutResult\"]\n | GraphQLTypes[\"MoveFilesResult\"]\n | GraphQLTypes[\"MoveFoldersResult\"]\n | GraphQLTypes[\"PayResult\"]\n | GraphQLTypes[\"ReadMailResult\"]\n | GraphQLTypes[\"RecoverFolderResult\"]\n | GraphQLTypes[\"RecoverMailResult\"]\n | GraphQLTypes[\"RecoverVFileResult\"]\n | GraphQLTypes[\"SaveInCloudResult\"]\n | GraphQLTypes[\"SendDraftMailResult\"]\n | GraphQLTypes[\"SendOneMailResult\"]\n | GraphQLTypes[\"SendReportResult\"]\n | GraphQLTypes[\"ShareFileInHistoryResult\"]\n | GraphQLTypes[\"ShareFolderResult\"]\n | GraphQLTypes[\"ShareFolderFinishResult\"]\n | GraphQLTypes[\"ShareVFileResult\"]\n | GraphQLTypes[\"UnreadMailResult\"]\n | GraphQLTypes[\"UpdateAppNotificationsResult\"]\n | GraphQLTypes[\"UpdateAppSettingsResult\"]\n | GraphQLTypes[\"UpdateDraftMailResult\"]\n | GraphQLTypes[\"UpdateFileResult\"]\n | GraphQLTypes[\"UpdateFolderResult\"]\n | GraphQLTypes[\"UpdateProfileResult\"]\n | GraphQLTypes[\"UploadFileResult\"]\n | GraphQLTypes[\"UploadFileEndResult\"]\n | GraphQLTypes[\"UploadFilePartEndResult\"]\n | GraphQLTypes[\"ChangeUserPlanResult\"]\n | GraphQLTypes[\"Error\"]\n | GraphQLTypes[\"FileContent\"];\n\nexport type ValueTypes = {\n /** The `BigInt` scalar type represents non-fractional signed whole numeric values.\n@see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt */\n [\"BigInt\"]: unknown;\n /** The `Byte` scalar type represents byte value as a Buffer */\n [\"Bytes\"]: unknown;\n /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n [\"DateTime\"]: unknown;\n /** An arbitrary-precision Decimal type */\n [\"Decimal\"]: unknown;\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n [\"Json\"]: unknown;\n [\"Lang\"]: Lang;\n [\"PlanKind\"]: PlanKind;\n [\"UserRole\"]: UserRole;\n [\"MailType\"]: MailType;\n [\"Rights\"]: Rights;\n [\"AppNotificationsResult\"]: AliasType<{\n [\"...on UserAppNotifications\"]: ValueTypes[\"UserAppNotifications\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"BlogResult\"]: AliasType<{\n [\"...on BlogResponse\"]: ValueTypes[\"BlogResponse\"];\n [\"...on ErrorLangNotExist\"]: ValueTypes[\"ErrorLangNotExist\"];\n __typename?: boolean;\n }>;\n [\"DbConfigResult\"]: AliasType<{\n [\"...on DbConfigResponse\"]: ValueTypes[\"DbConfigResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"DbGetResult\"]: AliasType<{\n [\"...on DbGetResponse\"]: ValueTypes[\"DbGetResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DbSearchResult\"]: AliasType<{\n [\"...on DbSearchResponse\"]: ValueTypes[\"DbSearchResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"DeletedFoldersResult\"]: AliasType<{\n [\"...on DeletedFoldersResponse\"]: ValueTypes[\"DeletedFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeletedMailsResult\"]: AliasType<{\n [\"...on DeletedMailsResponse\"]: ValueTypes[\"DeletedMailsResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeletedVFilesResult\"]: AliasType<{\n [\"...on DeletedVFilesResponse\"]: ValueTypes[\"DeletedVFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"FaqResult\"]: AliasType<{\n [\"...on FaqResponse\"]: ValueTypes[\"FaqResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"FileResult\"]: AliasType<{\n [\"...on FileQueryResponse\"]: ValueTypes[\"FileQueryResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"FileContentResult\"]: AliasType<{\n [\"...on FileContentResponse\"]: ValueTypes[\"FileContentResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"FolderResult\"]: AliasType<{\n [\"...on FolderResponse\"]: ValueTypes[\"FolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"FolderSizeResult\"]: AliasType<{\n [\"...on FolderSizeResponse\"]: ValueTypes[\"FolderSizeResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"FoldersSharedWithMeResult\"]: AliasType<{\n [\"...on FolderSharedWithMeResponse\"]: ValueTypes[\"FolderSharedWithMeResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"LimitsResult\"]: AliasType<{\n [\"...on QueryLimits\"]: ValueTypes[\"QueryLimits\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorLimit\"]: ValueTypes[\"ErrorLimit\"];\n __typename?: boolean;\n }>;\n [\"MailResult\"]: AliasType<{\n [\"...on QueryMailResponse\"]: ValueTypes[\"QueryMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"PaymentInfosResult\"]: AliasType<{\n [\"...on PaymentInfosResponse\"]: ValueTypes[\"PaymentInfosResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"PlansResult\"]: AliasType<{\n [\"...on PlanResponse\"]: ValueTypes[\"PlanResponse\"];\n __typename?: boolean;\n }>;\n [\"SharedFoldersResult\"]: AliasType<{\n [\"...on SharedFoldersResponse\"]: ValueTypes[\"SharedFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"SharedVFilesResult\"]: AliasType<{\n [\"...on SharedVFilesResponse\"]: ValueTypes[\"SharedVFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"UnreadReceivedMailsCountResult\"]: AliasType<{\n [\"...on UnreadReceivedMailsCountResponse\"]: ValueTypes[\"UnreadReceivedMailsCountResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"UserResult\"]: AliasType<{\n [\"...on UserResponse\"]: ValueTypes[\"UserResponse\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"VFileResult\"]: AliasType<{\n [\"...on VFileResponse\"]: ValueTypes[\"VFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"VFilesSharedWithMeResult\"]: AliasType<{\n [\"...on VFilesSharedWithMeResponse\"]: ValueTypes[\"VFilesSharedWithMeResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"UserListResult\"]: AliasType<{\n [\"...on UserListResponse\"]: ValueTypes[\"UserListResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"AddFileToHistoryResult\"]: AliasType<{\n [\"...on AddFileToHistoryResponse\"]: ValueTypes[\"AddFileToHistoryResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"CancelPaymentResult\"]: AliasType<{\n [\"...on CancelPaymentResponse\"]: ValueTypes[\"CancelPaymentResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"CreateApplicationResult\"]: AliasType<{\n [\"...on CreateApplicationResponse\"]: ValueTypes[\"CreateApplicationResponse\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"CreateDraftMailResult\"]: AliasType<{\n [\"...on CreateDraftMailResponse\"]: ValueTypes[\"CreateDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"CreateFolderResult\"]: AliasType<{\n [\"...on CreateFolderResponse\"]: ValueTypes[\"CreateFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DbConfigMutationResult\"]: AliasType<{\n [\"...on DbConfigMutationResponse\"]: ValueTypes[\"DbConfigMutationResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DbSetResult\"]: AliasType<{\n [\"...on DbSetResponse\"]: ValueTypes[\"DbSetResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"DeleteDraftMailResult\"]: AliasType<{\n [\"...on DeleteDraftMailResponse\"]: ValueTypes[\"DeleteDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteFileResult\"]: AliasType<{\n [\"...on DeleteFileResponse\"]: ValueTypes[\"DeleteFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DeleteFolderResult\"]: AliasType<{\n [\"...on DeleteFolderResponse\"]: ValueTypes[\"DeleteFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DeleteFolderCloudTrashResult\"]: AliasType<{\n [\"...on DeleteFolderCloudTrashResponse\"]: ValueTypes[\"DeleteFolderCloudTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteFolderSharingResult\"]: AliasType<{\n [\"...on DeleteFolderSharingResponse\"]: ValueTypes[\"DeleteFolderSharingResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteMailResult\"]: AliasType<{\n [\"...on DeleteMailResponse\"]: ValueTypes[\"DeleteMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteMailTrashResult\"]: AliasType<{\n [\"...on DeleteMailTrashResponse\"]: ValueTypes[\"DeleteMailTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteUserResult\"]: AliasType<{\n [\"...on DeleteUserResponse\"]: ValueTypes[\"DeleteUserResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteVFileResult\"]: AliasType<{\n [\"...on DeleteVFileResponse\"]: ValueTypes[\"DeleteVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DeleteVFileCloudTrashResult\"]: AliasType<{\n [\"...on DeleteVFileCloudTrashResponse\"]: ValueTypes[\"DeleteVFileCloudTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"DeleteVFileSharingResult\"]: AliasType<{\n [\"...on DeleteVFileSharingResponse\"]: ValueTypes[\"DeleteVFileSharingResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"DuplicateVFileResult\"]: AliasType<{\n [\"...on DuplicateVFileResponse\"]: ValueTypes[\"DuplicateVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"EmptyCloudTrashResult\"]: AliasType<{\n [\"...on DeleteMailResponse\"]: ValueTypes[\"DeleteMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"EmptyMailTrashResult\"]: AliasType<{\n [\"...on EmptyMailTrashResponse\"]: ValueTypes[\"EmptyMailTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"LogoutResult\"]: AliasType<{\n [\"...on LogoutResponse\"]: ValueTypes[\"LogoutResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"MoveFilesResult\"]: AliasType<{\n [\"...on MoveFilesResponse\"]: ValueTypes[\"MoveFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"MoveFoldersResult\"]: AliasType<{\n [\"...on MoveFoldersResponse\"]: ValueTypes[\"MoveFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"PayResult\"]: AliasType<{\n [\"...on PayResponse\"]: ValueTypes[\"PayResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"ReadMailResult\"]: AliasType<{\n [\"...on ReadMailResponse\"]: ValueTypes[\"ReadMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"RecoverFolderResult\"]: AliasType<{\n [\"...on RecoverFolderResponse\"]: ValueTypes[\"RecoverFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"RecoverMailResult\"]: AliasType<{\n [\"...on RecoverMailResponse\"]: ValueTypes[\"RecoverMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"RecoverVFileResult\"]: AliasType<{\n [\"...on RecoverVFileResponse\"]: ValueTypes[\"RecoverVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"SaveInCloudResult\"]: AliasType<{\n [\"...on SaveInCloudResponse\"]: ValueTypes[\"SaveInCloudResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"SendDraftMailResult\"]: AliasType<{\n [\"...on SendDraftMailResponse\"]: ValueTypes[\"SendDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"SendOneMailResult\"]: AliasType<{\n [\"...on RecoverFolderResponse\"]: ValueTypes[\"RecoverFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"SendReportResult\"]: AliasType<{\n [\"...on SendReportResponse\"]: ValueTypes[\"SendReportResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"ShareFileInHistoryResult\"]: AliasType<{\n [\"...on ShareFileInHistoryResponse\"]: ValueTypes[\"ShareFileInHistoryResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"ShareFolderResult\"]: AliasType<{\n [\"...on ShareFolderResponse\"]: ValueTypes[\"ShareFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"ShareFolderFinishResult\"]: AliasType<{\n [\"...on ShareFolderFinishResponse\"]: ValueTypes[\"ShareFolderFinishResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"ShareVFileResult\"]: AliasType<{\n [\"...on ShareVFileResponse\"]: ValueTypes[\"ShareVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"UnreadMailResult\"]: AliasType<{\n [\"...on UnreadMailResponse\"]: ValueTypes[\"UnreadMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"UpdateAppNotificationsResult\"]: AliasType<{\n [\"...on UpdateAppNotificationsResponse\"]: ValueTypes[\"UpdateAppNotificationsResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"UpdateAppSettingsResult\"]: AliasType<{\n [\"...on UpdateAppSettingsResponse\"]: ValueTypes[\"UpdateAppSettingsResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"UpdateDraftMailResult\"]: AliasType<{\n [\"...on UpdateDraftMailResponse\"]: ValueTypes[\"UpdateDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"UpdateFileResult\"]: AliasType<{\n [\"...on UpdateFileResponse\"]: ValueTypes[\"UpdateFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"UpdateFolderResult\"]: AliasType<{\n [\"...on UpdateFolderResponse\"]: ValueTypes[\"UpdateFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n __typename?: boolean;\n }>;\n [\"UpdateProfileResult\"]: AliasType<{\n [\"...on UpdateProfileResponse\"]: ValueTypes[\"UpdateProfileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"UploadFileResult\"]: AliasType<{\n [\"...on UploadFileResponse\"]: ValueTypes[\"UploadFileResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n [\"...on ErrorLimit\"]: ValueTypes[\"ErrorLimit\"];\n __typename?: boolean;\n }>;\n [\"UploadFileEndResult\"]: AliasType<{\n [\"...on UploadFileEndResponse\"]: ValueTypes[\"UploadFileEndResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n __typename?: boolean;\n }>;\n [\"UploadFilePartEndResult\"]: AliasType<{\n [\"...on UploadFilePartEndResponse\"]: ValueTypes[\"UploadFilePartEndResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"ChangeUserPlanResult\"]: AliasType<{\n [\"...on ChangeUserPlanResponse\"]: ValueTypes[\"ChangeUserPlanResponse\"];\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n __typename?: boolean;\n }>;\n [\"AppKeyPair\"]: AliasType<{\n pub?: boolean;\n __typename?: boolean;\n }>;\n [\"AppSession\"]: AliasType<{\n id?: boolean;\n lastActivity?: boolean;\n userAgent?: boolean;\n ip?: boolean;\n city?: boolean;\n country?: boolean;\n userSession?: ValueTypes[\"UserSession\"];\n userApp?: ValueTypes[\"ApplicationsOnUsers\"];\n createdAt?: boolean;\n __typename?: boolean;\n }>;\n [\"Application\"]: AliasType<{\n id?: boolean;\n name?: boolean;\n __typename?: boolean;\n }>;\n [\"ApplicationsOnUsers\"]: AliasType<{\n fakeUserId?: boolean;\n keyPair?: ValueTypes[\"AppKeyPair\"];\n sessions?: ValueTypes[\"AppSession\"];\n app?: ValueTypes[\"Application\"];\n user?: ValueTypes[\"User\"];\n folders?: ValueTypes[\"FoldersOnUsersOnApplications\"];\n settings?: ValueTypes[\"UserAppSettings\"];\n __typename?: boolean;\n }>;\n [\"Blog\"]: AliasType<{\n id?: boolean;\n order?: boolean;\n entries?: ValueTypes[\"BlogEntry\"];\n __typename?: boolean;\n }>;\n [\"BlogEntry\"]: AliasType<{\n id?: boolean;\n lang?: boolean;\n author?: boolean;\n body?: boolean;\n date?: boolean;\n image?: boolean;\n summary?: boolean;\n title?: boolean;\n __typename?: boolean;\n }>;\n [\"BlogItem\"]: AliasType<{\n id?: boolean;\n blogId?: boolean;\n order?: boolean;\n title?: boolean;\n body?: boolean;\n author?: boolean;\n image?: boolean;\n imageAlt?: boolean;\n summary?: boolean;\n date?: boolean;\n __typename?: boolean;\n }>;\n [\"CloudLimits\"]: AliasType<{\n size?: boolean;\n maxSize?: boolean;\n count?: boolean;\n maxCount?: boolean;\n __typename?: boolean;\n }>;\n [\"Error\"]: AliasType<{\n [\"...on ErrorAccessDenied\"]: ValueTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: ValueTypes[\"ErrorNotFound\"];\n [\"...on ErrorUpgradePlan\"]: ValueTypes[\"ErrorUpgradePlan\"];\n [\"...on ErrorLangNotExist\"]: ValueTypes[\"ErrorLangNotExist\"];\n [\"...on ErrorNotExist\"]: ValueTypes[\"ErrorNotExist\"];\n [\"...on ErrorLimit\"]: ValueTypes[\"ErrorLimit\"];\n [\"...on ErrorBasic\"]: ValueTypes[\"ErrorBasic\"];\n __typename?: boolean;\n }>;\n [\"ErrorAccessDenied\"]: AliasType<{\n message?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorBase\"]: AliasType<{\n message?: boolean;\n [\"...on ErrorAccessDenied\"]?: Omit<\n ValueTypes[\"ErrorAccessDenied\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorBasic\"]?: Omit<\n ValueTypes[\"ErrorBasic\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorLangNotExist\"]?: Omit<\n ValueTypes[\"ErrorLangNotExist\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorLimit\"]?: Omit<\n ValueTypes[\"ErrorLimit\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorNotExist\"]?: Omit<\n ValueTypes[\"ErrorNotExist\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorNotFound\"]?: Omit<\n ValueTypes[\"ErrorNotFound\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n [\"...on ErrorUpgradePlan\"]?: Omit<\n ValueTypes[\"ErrorUpgradePlan\"],\n keyof ValueTypes[\"ErrorBase\"]\n >;\n __typename?: boolean;\n }>;\n [\"ErrorBasic\"]: AliasType<{\n message?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorLangNotExist\"]: AliasType<{\n message?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorLimit\"]: AliasType<{\n message?: boolean;\n field?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorNotExist\"]: AliasType<{\n message?: boolean;\n field?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorNotFound\"]: AliasType<{\n message?: boolean;\n field?: boolean;\n __typename?: boolean;\n }>;\n [\"ErrorUpgradePlan\"]: AliasType<{\n message?: boolean;\n __typename?: boolean;\n }>;\n [\"Faq\"]: AliasType<{\n id?: boolean;\n order?: boolean;\n entries?: ValueTypes[\"FaqEntry\"];\n __typename?: boolean;\n }>;\n [\"FaqEntry\"]: AliasType<{\n id?: boolean;\n lang?: boolean;\n question?: boolean;\n answer?: boolean;\n faq?: ValueTypes[\"Faq\"];\n __typename?: boolean;\n }>;\n [\"FaqItem\"]: AliasType<{\n order?: boolean;\n question?: boolean;\n answer?: boolean;\n __typename?: boolean;\n }>;\n [\"File\"]: AliasType<{\n id?: boolean;\n size?: boolean;\n sizeBefore?: boolean;\n createdAt?: boolean;\n vFiles?: ValueTypes[\"VFile\"];\n vFilesCurrent?: ValueTypes[\"VFile\"];\n users?: ValueTypes[\"FilesOnUsersOnApplications\"];\n md5?: boolean;\n md5Encrypted?: boolean;\n deletedAt?: boolean;\n userApp?: ValueTypes[\"ApplicationsOnUsers\"];\n mails?: ValueTypes[\"FilesOnMails\"];\n validatedAt?: boolean;\n user?: ValueTypes[\"FilesOnUsersOnApplications\"];\n __typename?: boolean;\n }>;\n [\"FileContent\"]: AliasType<{\n [\"...on FileContentCloud\"]: ValueTypes[\"FileContentCloud\"];\n [\"...on FileContentReceivedMail\"]: ValueTypes[\"FileContentReceivedMail\"];\n [\"...on FileContentSentMail\"]: ValueTypes[\"FileContentSentMail\"];\n __typename?: boolean;\n }>;\n [\"FileContentBase\"]: AliasType<{\n parts?: ValueTypes[\"FileContentPart\"];\n key?: boolean;\n md5?: boolean;\n md5Encrypted?: boolean;\n totalSize?: boolean;\n type?: boolean;\n [\"...on FileContentCloud\"]?: Omit<\n ValueTypes[\"FileContentCloud\"],\n keyof ValueTypes[\"FileContentBase\"]\n >;\n [\"...on FileContentReceivedMail\"]?: Omit<\n ValueTypes[\"FileContentReceivedMail\"],\n keyof ValueTypes[\"FileContentBase\"]\n >;\n [\"...on FileContentSentMail\"]?: Omit<\n ValueTypes[\"FileContentSentMail\"],\n keyof ValueTypes[\"FileContentBase\"]\n >;\n __typename?: boolean;\n }>;\n [\"FileContentCloud\"]: AliasType<{\n parts?: ValueTypes[\"FileContentPart\"];\n key?: boolean;\n md5?: boolean;\n md5Encrypted?: boolean;\n totalSize?: boolean;\n type?: boolean;\n publicKey?: boolean;\n __typename?: boolean;\n }>;\n [\"FileContentPart\"]: AliasType<{\n contentUrl?: boolean;\n order?: boolean;\n md5?: boolean;\n __typename?: boolean;\n }>;\n [\"FileContentReceivedMail\"]: AliasType<{\n parts?: ValueTypes[\"FileContentPart\"];\n key?: boolean;\n md5?: boolean;\n md5Encrypted?: boolean;\n totalSize?: boolean;\n type?: boolean;\n senderPublicKey?: boolean;\n __typename?: boolean;\n }>;\n [\"FileContentSentMail\"]: AliasType<{\n parts?: ValueTypes[\"FileContentPart\"];\n key?: boolean;\n md5?: boolean;\n md5Encrypted?: boolean;\n totalSize?: boolean;\n type?: boolean;\n __typename?: boolean;\n }>;\n [\"FileContentType\"]: FileContentType;\n [\"FilePart\"]: AliasType<{\n id?: boolean;\n file?: ValueTypes[\"File\"];\n fileId?: boolean;\n size?: boolean;\n order?: boolean;\n md5?: boolean;\n validatedAt?: boolean;\n __typename?: boolean;\n }>;\n [\"FilePartResponse\"]: AliasType<{\n fields?: boolean;\n url?: boolean;\n order?: boolean;\n __typename?: boolean;\n }>;\n [\"FileResponse\"]: AliasType<{\n fileId?: boolean;\n parts?: ValueTypes[\"FilePartResponse\"];\n filePartSize?: boolean;\n __typename?: boolean;\n }>;\n [\"FileShared\"]: AliasType<{\n userId?: boolean;\n message?: boolean;\n appId?: boolean;\n id?: boolean;\n filename?: boolean;\n size?: boolean;\n sizeBefore?: boolean;\n __typename?: boolean;\n }>;\n [\"FileSharedContent\"]: AliasType<{\n ownerId?: boolean;\n pubKey?: boolean;\n message?: boolean;\n appId?: boolean;\n id?: boolean;\n type?: boolean;\n filename?: boolean;\n contentUrl?: boolean;\n key?: boolean;\n size?: boolean;\n sizeBefore?: boolean;\n __typename?: boolean;\n }>;\n [\"FilesOnMails\"]: AliasType<{\n file?: ValueTypes[\"File\"];\n fileKey?: boolean;\n filename?: boolean;\n mail?: ValueTypes[\"Mail\"];\n __typename?: boolean;\n }>;\n [\"FilesOnUsersOnApplications\"]: AliasType<{\n file?: ValueTypes[\"File\"];\n userApp?: ValueTypes[\"ApplicationsOnUsers\"];\n /** Encrypted with UserApp keys */\n key?: boolean;\n __typename?: boolean;\n }>;\n [\"Folder\"]: AliasType<{\n id?: boolean;\n isFavorite?: boolean;\n createdAt?: boolean;\n deletedAt?: boolean;\n updatedAt?: boolean;\n createdBy?: ValueTypes[\"ApplicationsOnUsers\"];\n userApps?: ValueTypes[\"FoldersOnUsersOnApplications\"];\n userApp?: ValueTypes[\"FoldersOnUsersOnApplications\"];\n name?: boolean;\n parentFolder?: ValueTypes[\"Folder\"];\n subfolders?: ValueTypes[\"Folder\"];\n vFiles?: ValueTypes[\"VFile\"];\n breadcrumb?: ValueTypes[\"FolderBreadcrumbItem\"];\n __typename?: boolean;\n }>;\n [\"FolderBreadcrumbItem\"]: AliasType<{\n id?: boolean;\n name?: boolean;\n pubKey?: boolean;\n nameKey?: boolean;\n __typename?: boolean;\n }>;\n [\"FolderSize\"]: AliasType<{\n size?: boolean;\n sizeBefore?: boolean;\n __typename?: boolean;\n }>;\n [\"FoldersOnUsersOnApplications\"]: AliasType<{\n folder?: ValueTypes[\"Folder\"];\n userApp?: ValueTypes[\"ApplicationsOnUsers\"];\n rights?: boolean;\n nameKey?: boolean;\n isRoot?: boolean;\n __typename?: boolean;\n }>;\n [\"MailFileInput\"]: {\n id: string;\n name: string;\n fileKey: string;\n };\n [\"MailRecipientInput\"]: {\n body: string;\n subject: string;\n recipientId: string;\n files: ValueTypes[\"MailFileInput\"][];\n };\n [\"NameKeyInput\"]: {\n id: string;\n nameKey: string;\n files: ValueTypes[\"ShareFileKeyInput\"][];\n };\n [\"NameKeyInputFolders\"]: {\n id: string;\n nameKey: string;\n };\n [\"PayInput\"]: {\n type: ValueTypes[\"PayInputType\"];\n token: string;\n firstName: string;\n lastName: string;\n street: string;\n postalCode: string;\n city: string;\n country: string;\n number: string;\n month: string;\n year: string;\n cvv: string;\n };\n [\"PayInputType\"]: PayInputType;\n [\"ShareFileInHistoryInput\"]: {\n fileId: string;\n users: ValueTypes[\"ShareFileKeyInput\"][];\n };\n [\"ShareFileKeyInput\"]: {\n id: string;\n key: string;\n };\n [\"ShareFoldersInput\"]: {\n folders: ValueTypes[\"NameKeyInputFolders\"][];\n vFiles: ValueTypes[\"NameKeyInput\"][];\n };\n [\"Limits\"]: AliasType<{\n downloadBandwidth?: boolean;\n downloadCount?: boolean;\n hardFileCount?: boolean;\n hardFileSize?: boolean;\n perFileSize?: boolean;\n receivedMails?: ValueTypes[\"MailLimits\"];\n sentMails?: ValueTypes[\"MailLimits\"];\n uploadBandwidth?: boolean;\n uploadCount?: boolean;\n __typename?: boolean;\n }>;\n [\"MailLimits\"]: AliasType<{\n count?: boolean;\n fileCount?: boolean;\n fileSize?: boolean;\n hardCount?: boolean;\n hardFileCount?: boolean;\n hardFileSize?: boolean;\n perFileSize?: boolean;\n __typename?: boolean;\n }>;\n [\"MailLimitsValues\"]: AliasType<{\n count?: boolean;\n maxCount?: boolean;\n fileCount?: boolean;\n maxFileCount?: boolean;\n fileSize?: boolean;\n maxFileSize?: boolean;\n __typename?: boolean;\n }>;\n [\"QueryLimits\"]: AliasType<{\n cloud?: ValueTypes[\"CloudLimits\"];\n mail?: ValueTypes[\"UserMailLimits\"];\n __typename?: boolean;\n }>;\n [\"UserMailLimits\"]: AliasType<{\n sent?: ValueTypes[\"MailLimitsValues\"];\n received?: ValueTypes[\"MailLimitsValues\"];\n __typename?: boolean;\n }>;\n [\"Mail\"]: AliasType<{\n id?: boolean;\n app?: ValueTypes[\"Application\"];\n body?: boolean;\n createdAt?: boolean;\n deletedAt?: boolean;\n files?: ValueTypes[\"FilesOnMails\"];\n mailIntegrity?: ValueTypes[\"MailIntegrity\"];\n mailIntegrityDraft?: ValueTypes[\"MailIntegrityDraft\"];\n openedAt?: boolean;\n recipient?: ValueTypes[\"User\"];\n sender?: ValueTypes[\"User\"];\n subject?: boolean;\n type?: boolean;\n recipients?: ValueTypes[\"User\"];\n __typename?: boolean;\n }>;\n [\"MailIntegrity\"]: AliasType<{\n id?: boolean;\n hash?: boolean;\n hashKey?: boolean;\n answers?: ValueTypes[\"MailIntegrity\"];\n app?: ValueTypes[\"Application\"];\n mails?: ValueTypes[\"Mail\"];\n recipients?: ValueTypes[\"User\"];\n temporaryRecipients?: ValueTypes[\"TemporaryUser\"];\n replyTo?: ValueTypes[\"MailIntegrity\"];\n __typename?: boolean;\n }>;\n [\"MailIntegrityDraft\"]: AliasType<{\n id?: boolean;\n hash?: boolean;\n hashKey?: boolean;\n app?: ValueTypes[\"Application\"];\n mail?: ValueTypes[\"Mail\"];\n recipients?: ValueTypes[\"User\"];\n temporaryRecipients?: ValueTypes[\"TemporaryUser\"];\n replyTo?: ValueTypes[\"MailIntegrity\"];\n __typename?: boolean;\n }>;\n [\"Plan\"]: AliasType<{\n id?: boolean;\n kind?: boolean;\n codes?: boolean;\n limits?: ValueTypes[\"Limits\"];\n __typename?: boolean;\n }>;\n [\"Report\"]: AliasType<{\n id?: boolean;\n user?: ValueTypes[\"User\"];\n reportedUser?: ValueTypes[\"User\"];\n customMessage?: boolean;\n __typename?: boolean;\n }>;\n [\"AddFileToHistoryResponse\"]: AliasType<{\n addFileToHistory?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"CancelPaymentResponse\"]: AliasType<{\n cancelPayment?: boolean;\n __typename?: boolean;\n }>;\n [\"ChangeUserPlanResponse\"]: AliasType<{\n changeUserPlan?: ValueTypes[\"User\"];\n __typename?: boolean;\n }>;\n [\"CreateApplicationResponse\"]: AliasType<{\n createApplication?: boolean;\n __typename?: boolean;\n }>;\n [\"CreateDraftMailResponse\"]: AliasType<{\n createDraftMail?: ValueTypes[\"Mail\"];\n __typename?: boolean;\n }>;\n [\"CreateFolderResponse\"]: AliasType<{\n createFolder?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"DbConfigMutationResponse\"]: AliasType<{\n dbConfigMutation?: boolean;\n __typename?: boolean;\n }>;\n [\"DbSetResponse\"]: AliasType<{\n dbSet?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteDraftMailResponse\"]: AliasType<{\n deleteDraftMail?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteFileResponse\"]: AliasType<{\n deleteFile?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteFolderResponse\"]: AliasType<{\n deleteFolder?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteFolderCloudTrashResponse\"]: AliasType<{\n deleteFolderCloudTrash?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteFolderSharingResponse\"]: AliasType<{\n deleteFolderSharing?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteMailResponse\"]: AliasType<{\n deleteMail?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteMailTrashResponse\"]: AliasType<{\n deleteMailTrash?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteUserResponse\"]: AliasType<{\n deleteUser?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteVFileResponse\"]: AliasType<{\n deleteVFile?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteVFileCloudTrashResponse\"]: AliasType<{\n deleteVFileCloudTrash?: boolean;\n __typename?: boolean;\n }>;\n [\"DeleteVFileSharingResponse\"]: AliasType<{\n deleteVFileSharing?: boolean;\n __typename?: boolean;\n }>;\n [\"DuplicateVFileResponse\"]: AliasType<{\n duplicateVFile?: boolean;\n __typename?: boolean;\n }>;\n [\"EmptyCloudTrashResponse\"]: AliasType<{\n emptyCloudTrash?: boolean;\n __typename?: boolean;\n }>;\n [\"EmptyMailTrashResponse\"]: AliasType<{\n emptyMailTrash?: boolean;\n __typename?: boolean;\n }>;\n [\"LogoutResponse\"]: AliasType<{\n logout?: boolean;\n __typename?: boolean;\n }>;\n [\"MoveFilesResponse\"]: AliasType<{\n moveFiles?: boolean;\n __typename?: boolean;\n }>;\n [\"MoveFoldersResponse\"]: AliasType<{\n moveFolders?: boolean;\n __typename?: boolean;\n }>;\n [\"PayResponse\"]: AliasType<{\n pay?: boolean;\n __typename?: boolean;\n }>;\n [\"ReadMailResponse\"]: AliasType<{\n readMail?: boolean;\n __typename?: boolean;\n }>;\n [\"RecoverFolderResponse\"]: AliasType<{\n recoverFolder?: boolean;\n __typename?: boolean;\n }>;\n [\"RecoverMailResponse\"]: AliasType<{\n recoverMail?: boolean;\n __typename?: boolean;\n }>;\n [\"RecoverVFileResponse\"]: AliasType<{\n recoverVFile?: boolean;\n __typename?: boolean;\n }>;\n [\"SaveInCloudResponse\"]: AliasType<{\n saveInCloud?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"SendDraftMailResponse\"]: AliasType<{\n sendDraftMail?: boolean;\n __typename?: boolean;\n }>;\n [\"SendOneMailResponse\"]: AliasType<{\n sendOneMail?: boolean;\n __typename?: boolean;\n }>;\n [\"SendReportResponse\"]: AliasType<{\n sendReport?: ValueTypes[\"Report\"];\n __typename?: boolean;\n }>;\n [\"ShareFileInHistoryResponse\"]: AliasType<{\n shareFileInHistory?: boolean;\n __typename?: boolean;\n }>;\n [\"ShareFolderFinishResponse\"]: AliasType<{\n shareFolderFinish?: boolean;\n __typename?: boolean;\n }>;\n [\"ShareVFileResponse\"]: AliasType<{\n shareVFile?: boolean;\n __typename?: boolean;\n }>;\n [\"UnreadMailResponse\"]: AliasType<{\n unreadMail?: boolean;\n __typename?: boolean;\n }>;\n [\"UpdateAppNotificationsResponse\"]: AliasType<{\n updateAppNotifications?: ValueTypes[\"UserAppNotifications\"];\n __typename?: boolean;\n }>;\n [\"UpdateAppSettingsResponse\"]: AliasType<{\n updateAppSettings?: ValueTypes[\"UserAppSettings\"];\n __typename?: boolean;\n }>;\n [\"UpdateDraftMailResponse\"]: AliasType<{\n updateDraftMail?: ValueTypes[\"Mail\"];\n __typename?: boolean;\n }>;\n [\"UpdateFileResponse\"]: AliasType<{\n updateFile?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"UpdateFolderResponse\"]: AliasType<{\n updateFolder?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"UpdateProfileResponse\"]: AliasType<{\n updateProfile?: ValueTypes[\"User\"];\n __typename?: boolean;\n }>;\n [\"UploadAnonymousResponse\"]: AliasType<{\n uploadAnonymous?: ValueTypes[\"FileResponse\"];\n __typename?: boolean;\n }>;\n [\"UploadFileResponse\"]: AliasType<{\n uploadFile?: ValueTypes[\"FileResponse\"];\n __typename?: boolean;\n }>;\n [\"UploadFileEndResponse\"]: AliasType<{\n uploadFileEnd?: boolean;\n __typename?: boolean;\n }>;\n [\"UploadFilePartEndResponse\"]: AliasType<{\n uploadFilePartEnd?: boolean;\n __typename?: boolean;\n }>;\n [\"BlogResponse\"]: AliasType<{\n blogItems?: ValueTypes[\"BlogItem\"];\n __typename?: boolean;\n }>;\n [\"DbConfigResponse\"]: AliasType<{\n json?: boolean;\n __typename?: boolean;\n }>;\n [\"DbGetResponse\"]: AliasType<{\n json?: boolean;\n __typename?: boolean;\n }>;\n [\"DbSearchResponse\"]: AliasType<{\n json?: boolean;\n __typename?: boolean;\n }>;\n [\"DeletedFoldersResponse\"]: AliasType<{\n deletedFolders?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"DeletedMailsResponse\"]: AliasType<{\n deletedMails?: ValueTypes[\"Mail\"];\n __typename?: boolean;\n }>;\n [\"DeletedVFilesResponse\"]: AliasType<{\n deletedVFiles?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"FaqResponse\"]: AliasType<{\n faq?: ValueTypes[\"FaqItem\"];\n __typename?: boolean;\n }>;\n [\"FileQueryResponse\"]: AliasType<{\n file?: ValueTypes[\"File\"];\n __typename?: boolean;\n }>;\n [\"FileContentResponse\"]: AliasType<{\n file?: ValueTypes[\"FileContent\"];\n __typename?: boolean;\n }>;\n [\"FolderResponse\"]: AliasType<{\n folder?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"FolderSharedWithMeResponse\"]: AliasType<{\n foldersSharedWithMe?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"FolderSizeResponse\"]: AliasType<{\n size?: boolean;\n sizeBefore?: boolean;\n __typename?: boolean;\n }>;\n [\"QueryMailResponse\"]: AliasType<{\n mail?: ValueTypes[\"Mail\"];\n __typename?: boolean;\n }>;\n [\"PaymentInfosResponse\"]: AliasType<{\n paymentInfos?: ValueTypes[\"PaymentInfos\"];\n __typename?: boolean;\n }>;\n [\"PlanResponse\"]: AliasType<{\n plan?: ValueTypes[\"Plan\"];\n __typename?: boolean;\n }>;\n [\"SharedFoldersResponse\"]: AliasType<{\n sharedFolders?: ValueTypes[\"Folder\"];\n __typename?: boolean;\n }>;\n [\"SharedVFilesResponse\"]: AliasType<{\n sharedVFiles?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"UnreadReceivedMailsCountResponse\"]: AliasType<{\n count?: boolean;\n __typename?: boolean;\n }>;\n [\"UserResponse\"]: AliasType<{\n user?: ValueTypes[\"User\"];\n __typename?: boolean;\n }>;\n [\"UserListResponse\"]: AliasType<{\n userList?: ValueTypes[\"User\"];\n __typename?: boolean;\n }>;\n [\"VFileResponse\"]: AliasType<{\n vFile?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"VFilesSharedWithMeResponse\"]: AliasType<{\n vFilesSharedWithMe?: ValueTypes[\"VFile\"];\n __typename?: boolean;\n }>;\n [\"TemporaryUser\"]: AliasType<{\n id?: boolean;\n mails?: ValueTypes[\"MailIntegrity\"];\n draftMails?: ValueTypes[\"MailIntegrityDraft\"];\n email?: boolean;\n __typename?: boolean;\n }>;\n [\"User\"]: AliasType<{\n id?: boolean;\n deletedAt?: boolean;\n lang?: boolean;\n reportSent?: ValueTypes[\"Report\"];\n godFather?: ValueTypes[\"User\"];\n godChildren?: ValueTypes[\"User\"];\n firstname?: boolean;\n lastname?: boolean;\n email?: boolean;\n phone?: boolean;\n lastLogin?: boolean;\n role?: boolean;\n sessions?: ValueTypes[\"UserSession\"];\n createdAt?: boolean;\n receivedMails?: ValueTypes[\"Mail\"];\n waitingReceivedMails?: ValueTypes[\"WaitingReceivedMail\"];\n sentMails?: ValueTypes[\"Mail\"];\n draftMails?: ValueTypes[\"Mail\"];\n appSettings?: ValueTypes[\"UserAppSettings\"];\n applications?: ValueTypes[\"ApplicationsOnUsers\"];\n publicKey?: boolean;\n __typename?: boolean;\n }>;\n [\"UserAppNotifications\"]: AliasType<{\n id?: boolean;\n enableAll?: boolean;\n mail?: boolean;\n cloud?: boolean;\n disableAllUntil?: boolean;\n __typename?: boolean;\n }>;\n [\"UserAppSettings\"]: AliasType<{\n id?: boolean;\n cloudFileDaysForDelete?: boolean;\n cloudFolderDaysForDelete?: boolean;\n historyFileDaysForDelete?: boolean;\n historyMaxFileCount?: boolean;\n autoDisconnectDelay?: boolean;\n __typename?: boolean;\n }>;\n [\"UserSession\"]: AliasType<{\n id?: boolean;\n appSessions?: ValueTypes[\"AppSession\"];\n lastActivity?: boolean;\n userAgent?: boolean;\n ip?: boolean;\n city?: boolean;\n country?: boolean;\n createdAt?: boolean;\n __typename?: boolean;\n }>;\n [\"VFile\"]: AliasType<{\n id?: boolean;\n isFavorite?: boolean;\n createdAt?: boolean;\n deletedAt?: boolean;\n filename?: boolean;\n userApps?: ValueTypes[\"VFilesOnUsersOnApplications\"];\n createdBy?: ValueTypes[\"ApplicationsOnUsers\"];\n userApp?: ValueTypes[\"VFilesOnUsersOnApplications\"];\n folder?: ValueTypes[\"Folder\"];\n history?: ValueTypes[\"File\"];\n current?: ValueTypes[\"File\"];\n updatedAt?: boolean;\n __typename?: boolean;\n }>;\n [\"VFilesOnUsersOnApplications\"]: AliasType<{\n vFile?: ValueTypes[\"VFile\"];\n userApp?: ValueTypes[\"ApplicationsOnUsers\"];\n rights?: boolean;\n nameKey?: boolean;\n isRoot?: boolean;\n __typename?: boolean;\n }>;\n [\"WaitingReceivedMail\"]: AliasType<{\n sender?: ValueTypes[\"User\"];\n date?: boolean;\n recipients?: ValueTypes[\"User\"];\n temporaryRecipients?: ValueTypes[\"TemporaryUser\"];\n attachmentsCount?: boolean;\n __typename?: boolean;\n }>;\n [\"PaymentInfos\"]: AliasType<{\n hostedUrl?: boolean;\n currentSubscription?: ValueTypes[\"RecurlySubscription\"];\n invoices?: ValueTypes[\"RecurlyInvoices\"];\n __typename?: boolean;\n }>;\n [\"RecurlyInvoices\"]: AliasType<{\n pdf?: boolean;\n date?: boolean;\n due?: boolean;\n status?: boolean;\n total?: boolean;\n name?: boolean;\n currency?: boolean;\n __typename?: boolean;\n }>;\n [\"RecurlySubscription\"]: AliasType<{\n autorenew?: boolean;\n activatedAt?: boolean;\n currentPeriodEndsAt?: boolean;\n currentPeriodStartedAt?: boolean;\n canceledAt?: boolean;\n createdAt?: boolean;\n expiresAt?: boolean;\n pausedAt?: boolean;\n trialEndsAt?: boolean;\n trialStartedAt?: boolean;\n updatedAt?: boolean;\n state?: boolean;\n collectionMethod?: boolean;\n plan?: boolean;\n planCode?: boolean;\n total?: boolean;\n __typename?: boolean;\n }>;\n [\"ShareFolderResponse\"]: AliasType<{\n folders?: boolean;\n vFiles?: boolean;\n __typename?: boolean;\n }>;\n [\"Query\"]: AliasType<{\n appNotifications?: ValueTypes[\"AppNotificationsResult\"];\n blog?: [{ lang?: ValueTypes[\"Lang\"] | null }, ValueTypes[\"BlogResult\"]];\n dbConfig?: [{ appCode: string }, ValueTypes[\"DbConfigResult\"]];\n dbGet?: [\n { field: string; userId?: string | null },\n ValueTypes[\"DbGetResult\"]\n ];\n dbSearch?: [\n { search: string; field: string },\n ValueTypes[\"DbSearchResult\"]\n ];\n deletedFolders?: ValueTypes[\"DeletedFoldersResult\"];\n deletedMails?: [\n { mailType: ValueTypes[\"MailType\"] },\n ValueTypes[\"DeletedMailsResult\"]\n ];\n deletedVFiles?: ValueTypes[\"DeletedVFilesResult\"];\n faq?: [{ lang?: ValueTypes[\"Lang\"] | null }, ValueTypes[\"FaqResult\"]];\n file?: [{ id: string }, ValueTypes[\"FileResult\"]];\n fileContent?: [{ fileId: string }, ValueTypes[\"FileContentResult\"]];\n filesSharedWithMe?: [\n { accepted?: boolean | null },\n ValueTypes[\"FileSharedContent\"]\n ];\n folder?: [\n { id?: string | null; deleted?: boolean | null },\n ValueTypes[\"FolderResult\"]\n ];\n folderSize?: [{ folderId?: string | null }, ValueTypes[\"FolderSizeResult\"]];\n foldersSharedWithMe?: ValueTypes[\"FoldersSharedWithMeResult\"];\n limits?: ValueTypes[\"LimitsResult\"];\n mail?: [{ id: string }, ValueTypes[\"MailResult\"]];\n paymentInfos?: ValueTypes[\"PaymentInfosResult\"];\n plans?: ValueTypes[\"PlansResult\"];\n sharedFolders?: ValueTypes[\"SharedFoldersResult\"];\n sharedVFiles?: ValueTypes[\"SharedVFilesResult\"];\n test?: boolean;\n unreadReceivedMailsCount?: ValueTypes[\"UnreadReceivedMailsCountResult\"];\n user?: [{ userId?: string | null }, ValueTypes[\"UserResult\"]];\n vFile?: [{ id: string }, ValueTypes[\"VFileResult\"]];\n vFilesSharedWithMe?: ValueTypes[\"VFilesSharedWithMeResult\"];\n userList?: [{ search?: string | null }, ValueTypes[\"UserListResult\"]];\n __typename?: boolean;\n }>;\n [\"Mutation\"]: AliasType<{\n addFileToHistory?: [\n { vFileId: string; fileId: string },\n ValueTypes[\"AddFileToHistoryResult\"]\n ];\n cancelPayment?: ValueTypes[\"CancelPaymentResult\"];\n createApplication?: [\n { name: string; origin: string; developerId: string },\n ValueTypes[\"CreateApplicationResult\"]\n ];\n createDraftMail?: [\n {\n hash: string;\n hashKey: string;\n body: string;\n subject: string;\n replyTo?: string | null;\n senderFiles: ValueTypes[\"MailFileInput\"][];\n recipients: string[];\n },\n ValueTypes[\"CreateDraftMailResult\"]\n ];\n createFolder?: [\n { name: string; key: string; parentFolderId?: string | null },\n ValueTypes[\"CreateFolderResult\"]\n ];\n dbConfigMutation?: [\n { appCode: string; config: string },\n ValueTypes[\"DbConfigMutationResult\"]\n ];\n dbSet?: [\n { value: string; userId?: string | null },\n ValueTypes[\"DbSetResult\"]\n ];\n deleteDraftMail?: [\n { draftId: string },\n ValueTypes[\"DeleteDraftMailResult\"]\n ];\n deleteFile?: [\n { fileId: string; vFileId: string },\n ValueTypes[\"DeleteFileResult\"]\n ];\n deleteFolder?: [{ id: string }, ValueTypes[\"DeleteFolderResult\"]];\n deleteFolderCloudTrash?: [\n { ids: string[] },\n ValueTypes[\"DeleteFolderCloudTrashResult\"]\n ];\n deleteFolderSharing?: [\n { folderId: string; userId: string },\n ValueTypes[\"DeleteFolderSharingResult\"]\n ];\n deleteMail?: [{ mailId: string }, ValueTypes[\"DeleteMailResult\"]];\n deleteMailTrash?: [{ ids: string[] }, ValueTypes[\"DeleteMailTrashResult\"]];\n deleteUser?: [{ userId?: string | null }, ValueTypes[\"DeleteUserResult\"]];\n deleteVFile?: [{ fileId: string }, ValueTypes[\"DeleteVFileResult\"]];\n deleteVFileCloudTrash?: [\n { ids: string[] },\n ValueTypes[\"DeleteVFileCloudTrashResult\"]\n ];\n deleteVFileSharing?: [\n { vFileId: string; userId: string },\n ValueTypes[\"DeleteVFileSharingResult\"]\n ];\n duplicateVFile?: [\n { vFileId: string; folderId?: string | null; customName?: string | null },\n ValueTypes[\"DuplicateVFileResult\"]\n ];\n emptyCloudTrash?: ValueTypes[\"EmptyCloudTrashResult\"];\n emptyMailTrash?: ValueTypes[\"EmptyMailTrashResult\"];\n logout?: [{ sessionId?: string | null }, ValueTypes[\"LogoutResult\"]];\n moveFiles?: [\n { filesId: string[]; parentFolderId?: string | null },\n ValueTypes[\"MoveFilesResult\"]\n ];\n moveFolders?: [\n { foldersId: string[]; parentFolderId?: string | null },\n ValueTypes[\"MoveFoldersResult\"]\n ];\n pay?: [\n {\n planCode: string;\n input: ValueTypes[\"PayInput\"];\n autoRenew?: boolean | null;\n },\n ValueTypes[\"PayResult\"]\n ];\n readMail?: [{ mailId: string }, ValueTypes[\"ReadMailResult\"]];\n recoverFolder?: [{ id: string }, ValueTypes[\"RecoverFolderResult\"]];\n recoverMail?: [{ mailId: string }, ValueTypes[\"RecoverMailResult\"]];\n recoverVFile?: [{ vFileId: string }, ValueTypes[\"RecoverVFileResult\"]];\n saveInCloud?: [\n {\n fileId: string;\n key: string;\n folderId?: string | null;\n filename: string;\n nameKey: string;\n },\n ValueTypes[\"SaveInCloudResult\"]\n ];\n sendDraftMail?: [\n {\n draftMailId: string;\n temporaryRecipients: string[];\n recipients: ValueTypes[\"MailRecipientInput\"][];\n customMessage?: string | null;\n },\n ValueTypes[\"SendDraftMailResult\"]\n ];\n sendOneMail?: [\n { mailIntegrityId: string; recipient: ValueTypes[\"MailRecipientInput\"] },\n ValueTypes[\"SendOneMailResult\"]\n ];\n sendReport?: [\n { reportedUserId: string; customMessage?: string | null },\n ValueTypes[\"SendReportResult\"]\n ];\n shareFileInHistory?: [\n { input: ValueTypes[\"ShareFileInHistoryInput\"]; vFileId: string },\n ValueTypes[\"ShareFileInHistoryResult\"]\n ];\n shareFolder?: [\n { folderId: string; userId: string },\n ValueTypes[\"ShareFolderResult\"]\n ];\n shareFolderFinish?: [\n {\n shareFolders: ValueTypes[\"ShareFoldersInput\"];\n userId: string;\n rights: ValueTypes[\"Rights\"];\n },\n ValueTypes[\"ShareFolderFinishResult\"]\n ];\n shareVFile?: [\n {\n vFileId: string;\n userId: string;\n nameKey: string;\n rights: ValueTypes[\"Rights\"];\n history: ValueTypes[\"ShareFileKeyInput\"][];\n },\n ValueTypes[\"ShareVFileResult\"]\n ];\n unreadMail?: [{ mailId: string }, ValueTypes[\"UnreadMailResult\"]];\n updateAppNotifications?: [\n {\n enableAll?: boolean | null;\n mail?: boolean | null;\n cloud?: boolean | null;\n disableAllUntil?: ValueTypes[\"DateTime\"] | null;\n },\n ValueTypes[\"UpdateAppNotificationsResult\"]\n ];\n updateAppSettings?: [\n {\n cloudFileDaysForDelete?: number | null;\n cloudFolderDaysForDelete?: number | null;\n historyFileDaysForDelete?: number | null;\n historyMaxFileCount?: number | null;\n autoDisconnectDelay?: number | null;\n },\n ValueTypes[\"UpdateAppSettingsResult\"]\n ];\n updateDraftMail?: [\n {\n draftId: string;\n hash?: string | null;\n hashKey?: string | null;\n body?: string | null;\n subject?: string | null;\n replyTo?: string | null;\n senderFiles?: ValueTypes[\"MailFileInput\"][];\n recipients?: string[];\n },\n ValueTypes[\"UpdateDraftMailResult\"]\n ];\n updateFile?: [\n {\n fileId: string;\n isFavorite?: boolean | null;\n filename?: string | null;\n deletedAt?: ValueTypes[\"DateTime\"] | null;\n },\n ValueTypes[\"UpdateFileResult\"]\n ];\n updateFolder?: [\n {\n folderId: string;\n name?: string | null;\n isFavorite?: boolean | null;\n deletedAt?: ValueTypes[\"DateTime\"] | null;\n },\n ValueTypes[\"UpdateFolderResult\"]\n ];\n updateProfile?: [\n {\n firstname?: string | null;\n lastname?: string | null;\n lang?: ValueTypes[\"Lang\"] | null;\n },\n ValueTypes[\"UpdateProfileResult\"]\n ];\n uploadAnonymous?: [\n {\n fileName: string;\n fileSize: number;\n fileSizeBefore: number;\n message?: string | null;\n pubKey: string;\n token: string;\n },\n ValueTypes[\"FileResponse\"]\n ];\n uploadFile?: [\n {\n fileSize: ValueTypes[\"BigInt\"];\n fileSizeBefore: ValueTypes[\"BigInt\"];\n fileKey: string;\n md5: string;\n md5Encrypted: string;\n },\n ValueTypes[\"UploadFileResult\"]\n ];\n uploadFileEnd?: [{ fileId: string }, ValueTypes[\"UploadFileEndResult\"]];\n uploadFilePartEnd?: [\n { fileId: string; md5: string; order: number },\n ValueTypes[\"UploadFilePartEndResult\"]\n ];\n changeUserPlan?: [\n { userId: string; plan: ValueTypes[\"PlanKind\"] },\n ValueTypes[\"ChangeUserPlanResult\"]\n ];\n __typename?: boolean;\n }>;\n [\"Subscription\"]: AliasType<{\n test?: boolean;\n __typename?: boolean;\n }>;\n};\n\nexport type ModelTypes = {\n /** The `BigInt` scalar type represents non-fractional signed whole numeric values.\n@see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt */\n [\"BigInt\"]: any;\n /** The `Byte` scalar type represents byte value as a Buffer */\n [\"Bytes\"]: any;\n /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n [\"DateTime\"]: any;\n /** An arbitrary-precision Decimal type */\n [\"Decimal\"]: any;\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n [\"Json\"]: any;\n [\"Lang\"]: GraphQLTypes[\"Lang\"];\n [\"PlanKind\"]: GraphQLTypes[\"PlanKind\"];\n [\"UserRole\"]: GraphQLTypes[\"UserRole\"];\n [\"MailType\"]: GraphQLTypes[\"MailType\"];\n [\"Rights\"]: GraphQLTypes[\"Rights\"];\n [\"AppNotificationsResult\"]:\n | ModelTypes[\"UserAppNotifications\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"BlogResult\"]: ModelTypes[\"BlogResponse\"] | ModelTypes[\"ErrorLangNotExist\"];\n [\"DbConfigResult\"]:\n | ModelTypes[\"DbConfigResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"DbGetResult\"]:\n | ModelTypes[\"DbGetResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DbSearchResult\"]:\n | ModelTypes[\"DbSearchResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"DeletedFoldersResult\"]:\n | ModelTypes[\"DeletedFoldersResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeletedMailsResult\"]:\n | ModelTypes[\"DeletedMailsResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeletedVFilesResult\"]:\n | ModelTypes[\"DeletedVFilesResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"FaqResult\"]: ModelTypes[\"FaqResponse\"] | ModelTypes[\"ErrorAccessDenied\"];\n [\"FileResult\"]:\n | ModelTypes[\"FileQueryResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"FileContentResult\"]:\n | ModelTypes[\"FileContentResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"FolderResult\"]:\n | ModelTypes[\"FolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"FolderSizeResult\"]:\n | ModelTypes[\"FolderSizeResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"FoldersSharedWithMeResult\"]:\n | ModelTypes[\"FolderSharedWithMeResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"LimitsResult\"]:\n | ModelTypes[\"QueryLimits\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorLimit\"];\n [\"MailResult\"]:\n | ModelTypes[\"QueryMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"PaymentInfosResult\"]:\n | ModelTypes[\"PaymentInfosResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"PlansResult\"]: ModelTypes[\"PlanResponse\"];\n [\"SharedFoldersResult\"]:\n | ModelTypes[\"SharedFoldersResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"SharedVFilesResult\"]:\n | ModelTypes[\"SharedVFilesResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"UnreadReceivedMailsCountResult\"]:\n | ModelTypes[\"UnreadReceivedMailsCountResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"UserResult\"]: ModelTypes[\"UserResponse\"] | ModelTypes[\"ErrorNotFound\"];\n [\"VFileResult\"]:\n | ModelTypes[\"VFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"VFilesSharedWithMeResult\"]:\n | ModelTypes[\"VFilesSharedWithMeResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"UserListResult\"]:\n | ModelTypes[\"UserListResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"AddFileToHistoryResult\"]:\n | ModelTypes[\"AddFileToHistoryResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"CancelPaymentResult\"]:\n | ModelTypes[\"CancelPaymentResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"CreateApplicationResult\"]:\n | ModelTypes[\"CreateApplicationResponse\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"CreateDraftMailResult\"]:\n | ModelTypes[\"CreateDraftMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"CreateFolderResult\"]:\n | ModelTypes[\"CreateFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DbConfigMutationResult\"]:\n | ModelTypes[\"DbConfigMutationResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DbSetResult\"]:\n | ModelTypes[\"DbSetResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"DeleteDraftMailResult\"]:\n | ModelTypes[\"DeleteDraftMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteFileResult\"]:\n | ModelTypes[\"DeleteFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DeleteFolderResult\"]:\n | ModelTypes[\"DeleteFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DeleteFolderCloudTrashResult\"]:\n | ModelTypes[\"DeleteFolderCloudTrashResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteFolderSharingResult\"]:\n | ModelTypes[\"DeleteFolderSharingResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteMailResult\"]:\n | ModelTypes[\"DeleteMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteMailTrashResult\"]:\n | ModelTypes[\"DeleteMailTrashResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteUserResult\"]:\n | ModelTypes[\"DeleteUserResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteVFileResult\"]:\n | ModelTypes[\"DeleteVFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DeleteVFileCloudTrashResult\"]:\n | ModelTypes[\"DeleteVFileCloudTrashResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"DeleteVFileSharingResult\"]:\n | ModelTypes[\"DeleteVFileSharingResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"DuplicateVFileResult\"]:\n | ModelTypes[\"DuplicateVFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"EmptyCloudTrashResult\"]:\n | ModelTypes[\"DeleteMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"EmptyMailTrashResult\"]:\n | ModelTypes[\"EmptyMailTrashResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"LogoutResult\"]:\n | ModelTypes[\"LogoutResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"MoveFilesResult\"]:\n | ModelTypes[\"MoveFilesResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"MoveFoldersResult\"]:\n | ModelTypes[\"MoveFoldersResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"PayResult\"]: ModelTypes[\"PayResponse\"] | ModelTypes[\"ErrorAccessDenied\"];\n [\"ReadMailResult\"]:\n | ModelTypes[\"ReadMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"RecoverFolderResult\"]:\n | ModelTypes[\"RecoverFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"RecoverMailResult\"]:\n | ModelTypes[\"RecoverMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"RecoverVFileResult\"]:\n | ModelTypes[\"RecoverVFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"SaveInCloudResult\"]:\n | ModelTypes[\"SaveInCloudResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"SendDraftMailResult\"]:\n | ModelTypes[\"SendDraftMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"SendOneMailResult\"]:\n | ModelTypes[\"RecoverFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"SendReportResult\"]:\n | ModelTypes[\"SendReportResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"ShareFileInHistoryResult\"]:\n | ModelTypes[\"ShareFileInHistoryResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"ShareFolderResult\"]:\n | ModelTypes[\"ShareFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"ShareFolderFinishResult\"]:\n | ModelTypes[\"ShareFolderFinishResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"ShareVFileResult\"]:\n | ModelTypes[\"ShareVFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"UnreadMailResult\"]:\n | ModelTypes[\"UnreadMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"UpdateAppNotificationsResult\"]:\n | ModelTypes[\"UpdateAppNotificationsResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"UpdateAppSettingsResult\"]:\n | ModelTypes[\"UpdateAppSettingsResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"UpdateDraftMailResult\"]:\n | ModelTypes[\"UpdateDraftMailResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"UpdateFileResult\"]:\n | ModelTypes[\"UpdateFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"UpdateFolderResult\"]:\n | ModelTypes[\"UpdateFolderResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotExist\"];\n [\"UpdateProfileResult\"]:\n | ModelTypes[\"UpdateProfileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"UploadFileResult\"]:\n | ModelTypes[\"UploadFileResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorLimit\"];\n [\"UploadFileEndResult\"]:\n | ModelTypes[\"UploadFileEndResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"];\n [\"UploadFilePartEndResult\"]:\n | ModelTypes[\"UploadFilePartEndResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"ChangeUserPlanResult\"]:\n | ModelTypes[\"ChangeUserPlanResponse\"]\n | ModelTypes[\"ErrorAccessDenied\"];\n [\"AppKeyPair\"]: {\n pub: string;\n };\n [\"AppSession\"]: {\n id: string;\n lastActivity?: ModelTypes[\"DateTime\"];\n userAgent?: string;\n ip?: string;\n city?: string;\n country?: string;\n userSession: ModelTypes[\"UserSession\"];\n userApp?: ModelTypes[\"ApplicationsOnUsers\"];\n createdAt: ModelTypes[\"DateTime\"];\n };\n [\"Application\"]: {\n id: string;\n name: string;\n };\n [\"ApplicationsOnUsers\"]: {\n fakeUserId: string;\n keyPair?: ModelTypes[\"AppKeyPair\"];\n sessions: ModelTypes[\"AppSession\"][];\n app: ModelTypes[\"Application\"];\n user: ModelTypes[\"User\"];\n folders: ModelTypes[\"FoldersOnUsersOnApplications\"][];\n settings: ModelTypes[\"UserAppSettings\"];\n };\n [\"Blog\"]: {\n id: string;\n order: number;\n entries: ModelTypes[\"BlogEntry\"][];\n };\n [\"BlogEntry\"]: {\n id: string;\n lang: ModelTypes[\"Lang\"];\n author: string;\n body: string;\n date: ModelTypes[\"DateTime\"];\n image: string;\n summary: string;\n title: string;\n };\n [\"BlogItem\"]: {\n id: string;\n blogId: string;\n order: number;\n title: string;\n body: string;\n author: string;\n image: string;\n imageAlt: string;\n summary: string;\n date: ModelTypes[\"DateTime\"];\n };\n [\"CloudLimits\"]: {\n size: ModelTypes[\"BigInt\"];\n maxSize?: ModelTypes[\"BigInt\"];\n count: ModelTypes[\"BigInt\"];\n maxCount?: ModelTypes[\"BigInt\"];\n };\n [\"Error\"]:\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorUpgradePlan\"]\n | ModelTypes[\"ErrorLangNotExist\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorLimit\"]\n | ModelTypes[\"ErrorBasic\"];\n [\"ErrorAccessDenied\"]: {\n message: string;\n };\n [\"ErrorBase\"]:\n | ModelTypes[\"ErrorAccessDenied\"]\n | ModelTypes[\"ErrorBasic\"]\n | ModelTypes[\"ErrorLangNotExist\"]\n | ModelTypes[\"ErrorLimit\"]\n | ModelTypes[\"ErrorNotExist\"]\n | ModelTypes[\"ErrorNotFound\"]\n | ModelTypes[\"ErrorUpgradePlan\"];\n [\"ErrorBasic\"]: {\n message: string;\n };\n [\"ErrorLangNotExist\"]: {\n message: string;\n };\n [\"ErrorLimit\"]: {\n message: string;\n field?: string;\n };\n [\"ErrorNotExist\"]: {\n message: string;\n field?: string;\n };\n [\"ErrorNotFound\"]: {\n message: string;\n field?: string;\n };\n [\"ErrorUpgradePlan\"]: {\n message: string;\n };\n [\"Faq\"]: {\n id: string;\n order: number;\n entries: ModelTypes[\"FaqEntry\"][];\n };\n [\"FaqEntry\"]: {\n id: string;\n lang: ModelTypes[\"Lang\"];\n question: string;\n answer: string;\n faq: ModelTypes[\"Faq\"];\n };\n [\"FaqItem\"]: {\n order: number;\n question: string;\n answer: string;\n };\n [\"File\"]: {\n id: string;\n size: ModelTypes[\"BigInt\"];\n sizeBefore: ModelTypes[\"BigInt\"];\n createdAt: ModelTypes[\"DateTime\"];\n vFiles: ModelTypes[\"VFile\"][];\n vFilesCurrent: ModelTypes[\"VFile\"][];\n users: ModelTypes[\"FilesOnUsersOnApplications\"][];\n md5: string;\n md5Encrypted: string;\n deletedAt?: ModelTypes[\"DateTime\"];\n userApp: ModelTypes[\"ApplicationsOnUsers\"];\n mails: ModelTypes[\"FilesOnMails\"][];\n validatedAt?: ModelTypes[\"DateTime\"];\n user?: ModelTypes[\"FilesOnUsersOnApplications\"];\n };\n [\"FileContent\"]:\n | ModelTypes[\"FileContentCloud\"]\n | ModelTypes[\"FileContentReceivedMail\"]\n | ModelTypes[\"FileContentSentMail\"];\n [\"FileContentBase\"]:\n | ModelTypes[\"FileContentCloud\"]\n | ModelTypes[\"FileContentReceivedMail\"]\n | ModelTypes[\"FileContentSentMail\"];\n [\"FileContentCloud\"]: {\n parts: ModelTypes[\"FileContentPart\"][];\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: ModelTypes[\"BigInt\"];\n type: ModelTypes[\"FileContentType\"];\n publicKey: string;\n };\n [\"FileContentPart\"]: {\n contentUrl: string;\n order: number;\n md5: string;\n };\n [\"FileContentReceivedMail\"]: {\n parts: ModelTypes[\"FileContentPart\"][];\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: ModelTypes[\"BigInt\"];\n type: ModelTypes[\"FileContentType\"];\n senderPublicKey: string;\n };\n [\"FileContentSentMail\"]: {\n parts: ModelTypes[\"FileContentPart\"][];\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: ModelTypes[\"BigInt\"];\n type: ModelTypes[\"FileContentType\"];\n };\n [\"FileContentType\"]: GraphQLTypes[\"FileContentType\"];\n [\"FilePart\"]: {\n id: string;\n file: ModelTypes[\"File\"];\n fileId: string;\n size: ModelTypes[\"BigInt\"];\n order: number;\n md5: string;\n validatedAt?: ModelTypes[\"DateTime\"];\n };\n [\"FilePartResponse\"]: {\n fields: ModelTypes[\"Json\"];\n url: string;\n order: number;\n };\n [\"FileResponse\"]: {\n fileId: string;\n parts: ModelTypes[\"FilePartResponse\"][];\n filePartSize: ModelTypes[\"BigInt\"];\n };\n [\"FileShared\"]: {\n userId: string;\n message?: string;\n appId: string;\n id: string;\n filename: string;\n size: number;\n sizeBefore: number;\n };\n [\"FileSharedContent\"]: {\n ownerId?: string;\n pubKey?: string;\n message?: string;\n appId: string;\n id: string;\n type: string;\n filename: string;\n contentUrl: string;\n key: string;\n size: number;\n sizeBefore: number;\n };\n [\"FilesOnMails\"]: {\n file: ModelTypes[\"File\"];\n fileKey: string;\n filename: string;\n mail: ModelTypes[\"Mail\"];\n };\n [\"FilesOnUsersOnApplications\"]: {\n file: ModelTypes[\"File\"];\n userApp: ModelTypes[\"ApplicationsOnUsers\"];\n /** Encrypted with UserApp keys */\n key: string;\n };\n [\"Folder\"]: {\n id: string;\n isFavorite: boolean;\n createdAt: ModelTypes[\"DateTime\"];\n deletedAt?: ModelTypes[\"DateTime\"];\n updatedAt: ModelTypes[\"DateTime\"];\n createdBy: ModelTypes[\"ApplicationsOnUsers\"];\n userApps: ModelTypes[\"FoldersOnUsersOnApplications\"][];\n userApp?: ModelTypes[\"FoldersOnUsersOnApplications\"];\n name: string;\n parentFolder?: ModelTypes[\"Folder\"];\n subfolders: ModelTypes[\"Folder\"][];\n vFiles: ModelTypes[\"VFile\"][];\n breadcrumb: ModelTypes[\"FolderBreadcrumbItem\"][];\n };\n [\"FolderBreadcrumbItem\"]: {\n id: string;\n name: string;\n pubKey: string;\n nameKey?: string;\n };\n [\"FolderSize\"]: {\n size: ModelTypes[\"BigInt\"];\n sizeBefore: ModelTypes[\"BigInt\"];\n };\n [\"FoldersOnUsersOnApplications\"]: {\n folder: ModelTypes[\"Folder\"];\n userApp: ModelTypes[\"ApplicationsOnUsers\"];\n rights: ModelTypes[\"Rights\"];\n nameKey?: string;\n isRoot: boolean;\n };\n [\"MailFileInput\"]: GraphQLTypes[\"MailFileInput\"];\n [\"MailRecipientInput\"]: GraphQLTypes[\"MailRecipientInput\"];\n [\"NameKeyInput\"]: GraphQLTypes[\"NameKeyInput\"];\n [\"NameKeyInputFolders\"]: GraphQLTypes[\"NameKeyInputFolders\"];\n [\"PayInput\"]: GraphQLTypes[\"PayInput\"];\n [\"PayInputType\"]: GraphQLTypes[\"PayInputType\"];\n [\"ShareFileInHistoryInput\"]: GraphQLTypes[\"ShareFileInHistoryInput\"];\n [\"ShareFileKeyInput\"]: GraphQLTypes[\"ShareFileKeyInput\"];\n [\"ShareFoldersInput\"]: GraphQLTypes[\"ShareFoldersInput\"];\n [\"Limits\"]: {\n downloadBandwidth?: ModelTypes[\"BigInt\"];\n downloadCount?: ModelTypes[\"BigInt\"];\n hardFileCount?: ModelTypes[\"BigInt\"];\n hardFileSize?: ModelTypes[\"BigInt\"];\n perFileSize?: ModelTypes[\"BigInt\"];\n receivedMails: ModelTypes[\"MailLimits\"];\n sentMails: ModelTypes[\"MailLimits\"];\n uploadBandwidth?: ModelTypes[\"BigInt\"];\n uploadCount?: ModelTypes[\"BigInt\"];\n };\n [\"MailLimits\"]: {\n count?: ModelTypes[\"BigInt\"];\n fileCount?: ModelTypes[\"BigInt\"];\n fileSize?: ModelTypes[\"BigInt\"];\n hardCount?: ModelTypes[\"BigInt\"];\n hardFileCount?: ModelTypes[\"BigInt\"];\n hardFileSize?: ModelTypes[\"BigInt\"];\n perFileSize?: ModelTypes[\"BigInt\"];\n };\n [\"MailLimitsValues\"]: {\n count: ModelTypes[\"BigInt\"];\n maxCount?: ModelTypes[\"BigInt\"];\n fileCount: ModelTypes[\"BigInt\"];\n maxFileCount?: ModelTypes[\"BigInt\"];\n fileSize: ModelTypes[\"BigInt\"];\n maxFileSize?: ModelTypes[\"BigInt\"];\n };\n [\"QueryLimits\"]: {\n cloud: ModelTypes[\"CloudLimits\"];\n mail: ModelTypes[\"UserMailLimits\"];\n };\n [\"UserMailLimits\"]: {\n sent: ModelTypes[\"MailLimitsValues\"];\n received: ModelTypes[\"MailLimitsValues\"];\n };\n [\"Mail\"]: {\n id: string;\n app: ModelTypes[\"Application\"];\n body: string;\n createdAt: ModelTypes[\"DateTime\"];\n deletedAt?: ModelTypes[\"DateTime\"];\n files: ModelTypes[\"FilesOnMails\"][];\n mailIntegrity?: ModelTypes[\"MailIntegrity\"];\n mailIntegrityDraft?: ModelTypes[\"MailIntegrityDraft\"];\n openedAt?: ModelTypes[\"DateTime\"];\n recipient: ModelTypes[\"User\"];\n sender: ModelTypes[\"User\"];\n subject: string;\n type: ModelTypes[\"MailType\"];\n recipients: ModelTypes[\"User\"][];\n };\n [\"MailIntegrity\"]: {\n id: string;\n hash: string;\n hashKey: string;\n answers: ModelTypes[\"MailIntegrity\"][];\n app: ModelTypes[\"Application\"];\n mails: ModelTypes[\"Mail\"][];\n recipients: ModelTypes[\"User\"][];\n temporaryRecipients: ModelTypes[\"TemporaryUser\"][];\n replyTo?: ModelTypes[\"MailIntegrity\"];\n };\n [\"MailIntegrityDraft\"]: {\n id: string;\n hash: string;\n hashKey: string;\n app: ModelTypes[\"Application\"];\n mail: ModelTypes[\"Mail\"];\n recipients: ModelTypes[\"User\"][];\n temporaryRecipients: ModelTypes[\"TemporaryUser\"][];\n replyTo?: ModelTypes[\"MailIntegrity\"];\n };\n [\"Plan\"]: {\n id: string;\n kind: ModelTypes[\"PlanKind\"];\n codes: string[];\n limits: ModelTypes[\"Limits\"];\n };\n [\"Report\"]: {\n id: string;\n user: ModelTypes[\"User\"];\n reportedUser: ModelTypes[\"User\"];\n customMessage?: string;\n };\n [\"AddFileToHistoryResponse\"]: {\n addFileToHistory: ModelTypes[\"VFile\"];\n };\n [\"CancelPaymentResponse\"]: {\n cancelPayment?: boolean;\n };\n [\"ChangeUserPlanResponse\"]: {\n changeUserPlan?: ModelTypes[\"User\"];\n };\n [\"CreateApplicationResponse\"]: {\n createApplication?: string;\n };\n [\"CreateDraftMailResponse\"]: {\n createDraftMail?: ModelTypes[\"Mail\"];\n };\n [\"CreateFolderResponse\"]: {\n createFolder?: ModelTypes[\"Folder\"];\n };\n [\"DbConfigMutationResponse\"]: {\n dbConfigMutation: ModelTypes[\"Json\"];\n };\n [\"DbSetResponse\"]: {\n dbSet?: ModelTypes[\"Json\"];\n };\n [\"DeleteDraftMailResponse\"]: {\n deleteDraftMail?: boolean;\n };\n [\"DeleteFileResponse\"]: {\n deleteFile: boolean;\n };\n [\"DeleteFolderResponse\"]: {\n deleteFolder?: boolean;\n };\n [\"DeleteFolderCloudTrashResponse\"]: {\n deleteFolderCloudTrash?: boolean;\n };\n [\"DeleteFolderSharingResponse\"]: {\n deleteFolderSharing: boolean;\n };\n [\"DeleteMailResponse\"]: {\n deleteMail: boolean;\n };\n [\"DeleteMailTrashResponse\"]: {\n deleteMailTrash: boolean;\n };\n [\"DeleteUserResponse\"]: {\n deleteUser?: boolean;\n };\n [\"DeleteVFileResponse\"]: {\n deleteVFile: boolean;\n };\n [\"DeleteVFileCloudTrashResponse\"]: {\n deleteVFileCloudTrash?: boolean;\n };\n [\"DeleteVFileSharingResponse\"]: {\n deleteVFileSharing: boolean;\n };\n [\"DuplicateVFileResponse\"]: {\n duplicateVFile: boolean;\n };\n [\"EmptyCloudTrashResponse\"]: {\n emptyCloudTrash?: boolean;\n };\n [\"EmptyMailTrashResponse\"]: {\n emptyMailTrash?: boolean;\n };\n [\"LogoutResponse\"]: {\n logout?: boolean;\n };\n [\"MoveFilesResponse\"]: {\n moveFiles?: boolean;\n };\n [\"MoveFoldersResponse\"]: {\n moveFolders?: boolean;\n };\n [\"PayResponse\"]: {\n pay: boolean;\n };\n [\"ReadMailResponse\"]: {\n readMail?: boolean;\n };\n [\"RecoverFolderResponse\"]: {\n recoverFolder?: boolean;\n };\n [\"RecoverMailResponse\"]: {\n recoverMail: boolean;\n };\n [\"RecoverVFileResponse\"]: {\n recoverVFile: boolean;\n };\n [\"SaveInCloudResponse\"]: {\n saveInCloud?: ModelTypes[\"VFile\"];\n };\n [\"SendDraftMailResponse\"]: {\n sendDraftMail?: boolean;\n };\n [\"SendOneMailResponse\"]: {\n sendOneMail?: boolean;\n };\n [\"SendReportResponse\"]: {\n sendReport?: ModelTypes[\"Report\"];\n };\n [\"ShareFileInHistoryResponse\"]: {\n shareFileInHistory: boolean;\n };\n [\"ShareFolderFinishResponse\"]: {\n shareFolderFinish?: boolean;\n };\n [\"ShareVFileResponse\"]: {\n shareVFile?: boolean;\n };\n [\"UnreadMailResponse\"]: {\n unreadMail?: boolean;\n };\n [\"UpdateAppNotificationsResponse\"]: {\n updateAppNotifications?: ModelTypes[\"UserAppNotifications\"];\n };\n [\"UpdateAppSettingsResponse\"]: {\n updateAppSettings: ModelTypes[\"UserAppSettings\"];\n };\n [\"UpdateDraftMailResponse\"]: {\n updateDraftMail?: ModelTypes[\"Mail\"];\n };\n [\"UpdateFileResponse\"]: {\n updateFile?: ModelTypes[\"VFile\"];\n };\n [\"UpdateFolderResponse\"]: {\n updateFolder?: ModelTypes[\"Folder\"];\n };\n [\"UpdateProfileResponse\"]: {\n updateProfile?: ModelTypes[\"User\"];\n };\n [\"UploadAnonymousResponse\"]: {\n uploadAnonymous?: ModelTypes[\"FileResponse\"];\n };\n [\"UploadFileResponse\"]: {\n uploadFile?: ModelTypes[\"FileResponse\"];\n };\n [\"UploadFileEndResponse\"]: {\n uploadFileEnd?: string;\n };\n [\"UploadFilePartEndResponse\"]: {\n uploadFilePartEnd: boolean;\n };\n [\"BlogResponse\"]: {\n blogItems: ModelTypes[\"BlogItem\"][];\n };\n [\"DbConfigResponse\"]: {\n json: ModelTypes[\"Json\"];\n };\n [\"DbGetResponse\"]: {\n json?: ModelTypes[\"Json\"];\n };\n [\"DbSearchResponse\"]: {\n json?: ModelTypes[\"Json\"];\n };\n [\"DeletedFoldersResponse\"]: {\n deletedFolders: ModelTypes[\"Folder\"][];\n };\n [\"DeletedMailsResponse\"]: {\n deletedMails: ModelTypes[\"Mail\"][];\n };\n [\"DeletedVFilesResponse\"]: {\n deletedVFiles: ModelTypes[\"VFile\"][];\n };\n [\"FaqResponse\"]: {\n faq: ModelTypes[\"FaqItem\"][];\n };\n [\"FileQueryResponse\"]: {\n file?: ModelTypes[\"File\"];\n };\n [\"FileContentResponse\"]: {\n file?: ModelTypes[\"FileContent\"];\n };\n [\"FolderResponse\"]: {\n folder?: ModelTypes[\"Folder\"];\n };\n [\"FolderSharedWithMeResponse\"]: {\n foldersSharedWithMe: ModelTypes[\"Folder\"][];\n };\n [\"FolderSizeResponse\"]: {\n size: ModelTypes[\"BigInt\"];\n sizeBefore: ModelTypes[\"BigInt\"];\n };\n [\"QueryMailResponse\"]: {\n mail?: ModelTypes[\"Mail\"];\n };\n [\"PaymentInfosResponse\"]: {\n paymentInfos?: ModelTypes[\"PaymentInfos\"];\n };\n [\"PlanResponse\"]: {\n plan: ModelTypes[\"Plan\"][];\n };\n [\"SharedFoldersResponse\"]: {\n sharedFolders: ModelTypes[\"Folder\"][];\n };\n [\"SharedVFilesResponse\"]: {\n sharedVFiles: ModelTypes[\"VFile\"][];\n };\n [\"UnreadReceivedMailsCountResponse\"]: {\n count: number;\n };\n [\"UserResponse\"]: {\n user?: ModelTypes[\"User\"];\n };\n [\"UserListResponse\"]: {\n userList: ModelTypes[\"User\"][];\n };\n [\"VFileResponse\"]: {\n vFile?: ModelTypes[\"VFile\"];\n };\n [\"VFilesSharedWithMeResponse\"]: {\n vFilesSharedWithMe: ModelTypes[\"VFile\"][];\n };\n [\"TemporaryUser\"]: {\n id: string;\n mails: ModelTypes[\"MailIntegrity\"][];\n draftMails: ModelTypes[\"MailIntegrityDraft\"][];\n email?: string;\n };\n [\"User\"]: {\n id: string;\n deletedAt?: ModelTypes[\"DateTime\"];\n lang: ModelTypes[\"Lang\"];\n reportSent: ModelTypes[\"Report\"][];\n godFather?: ModelTypes[\"User\"];\n godChildren: ModelTypes[\"User\"][];\n firstname: string;\n lastname: string;\n email: string;\n phone: string;\n lastLogin: ModelTypes[\"DateTime\"];\n role: ModelTypes[\"UserRole\"];\n sessions: ModelTypes[\"UserSession\"][];\n createdAt: ModelTypes[\"DateTime\"];\n receivedMails: ModelTypes[\"Mail\"][];\n waitingReceivedMails: ModelTypes[\"WaitingReceivedMail\"][];\n sentMails: ModelTypes[\"Mail\"][];\n draftMails: ModelTypes[\"Mail\"][];\n appSettings?: ModelTypes[\"UserAppSettings\"];\n applications: ModelTypes[\"ApplicationsOnUsers\"][];\n publicKey: string;\n };\n [\"UserAppNotifications\"]: {\n id: string;\n enableAll: boolean;\n mail: boolean;\n cloud: boolean;\n disableAllUntil?: ModelTypes[\"DateTime\"];\n };\n [\"UserAppSettings\"]: {\n id: string;\n cloudFileDaysForDelete: number;\n cloudFolderDaysForDelete: number;\n historyFileDaysForDelete?: number;\n historyMaxFileCount: number;\n autoDisconnectDelay?: number;\n };\n [\"UserSession\"]: {\n id: string;\n appSessions: ModelTypes[\"AppSession\"][];\n lastActivity?: ModelTypes[\"DateTime\"];\n userAgent?: string;\n ip?: string;\n city?: string;\n country?: string;\n createdAt: ModelTypes[\"DateTime\"];\n };\n [\"VFile\"]: {\n id: string;\n isFavorite: boolean;\n createdAt: ModelTypes[\"DateTime\"];\n deletedAt?: ModelTypes[\"DateTime\"];\n filename: string;\n userApps: ModelTypes[\"VFilesOnUsersOnApplications\"][];\n createdBy: ModelTypes[\"ApplicationsOnUsers\"];\n userApp?: ModelTypes[\"VFilesOnUsersOnApplications\"];\n folder: ModelTypes[\"Folder\"];\n history: ModelTypes[\"File\"][];\n current?: ModelTypes[\"File\"];\n updatedAt: ModelTypes[\"DateTime\"];\n };\n [\"VFilesOnUsersOnApplications\"]: {\n vFile: ModelTypes[\"VFile\"];\n userApp: ModelTypes[\"ApplicationsOnUsers\"];\n rights: ModelTypes[\"Rights\"];\n nameKey: string;\n isRoot: boolean;\n };\n [\"WaitingReceivedMail\"]: {\n sender: ModelTypes[\"User\"];\n date: ModelTypes[\"DateTime\"];\n recipients: ModelTypes[\"User\"][];\n temporaryRecipients: ModelTypes[\"TemporaryUser\"][];\n attachmentsCount: number;\n };\n [\"PaymentInfos\"]: {\n hostedUrl: string;\n currentSubscription: ModelTypes[\"RecurlySubscription\"];\n invoices: ModelTypes[\"RecurlyInvoices\"][];\n };\n [\"RecurlyInvoices\"]: {\n pdf: string;\n date: ModelTypes[\"DateTime\"];\n due: ModelTypes[\"DateTime\"];\n status: string;\n total: number;\n name: string;\n currency: string;\n };\n [\"RecurlySubscription\"]: {\n autorenew: boolean;\n activatedAt?: ModelTypes[\"DateTime\"];\n currentPeriodEndsAt?: ModelTypes[\"DateTime\"];\n currentPeriodStartedAt?: ModelTypes[\"DateTime\"];\n canceledAt?: ModelTypes[\"DateTime\"];\n createdAt?: ModelTypes[\"DateTime\"];\n expiresAt?: ModelTypes[\"DateTime\"];\n pausedAt?: ModelTypes[\"DateTime\"];\n trialEndsAt?: ModelTypes[\"DateTime\"];\n trialStartedAt?: ModelTypes[\"DateTime\"];\n updatedAt?: ModelTypes[\"DateTime\"];\n state: string;\n collectionMethod: string;\n plan?: string;\n planCode?: string;\n total?: number;\n };\n [\"ShareFolderResponse\"]: {\n folders: string[];\n vFiles: string[];\n };\n [\"Query\"]: {\n appNotifications?: ModelTypes[\"AppNotificationsResult\"];\n blog?: ModelTypes[\"BlogResult\"];\n dbConfig?: ModelTypes[\"DbConfigResult\"];\n dbGet?: ModelTypes[\"DbGetResult\"];\n dbSearch?: ModelTypes[\"DbSearchResult\"];\n deletedFolders?: ModelTypes[\"DeletedFoldersResult\"];\n deletedMails?: ModelTypes[\"DeletedMailsResult\"];\n deletedVFiles?: ModelTypes[\"DeletedVFilesResult\"];\n faq?: ModelTypes[\"FaqResult\"];\n file?: ModelTypes[\"FileResult\"];\n fileContent?: ModelTypes[\"FileContentResult\"];\n filesSharedWithMe: ModelTypes[\"FileSharedContent\"][];\n folder?: ModelTypes[\"FolderResult\"];\n folderSize?: ModelTypes[\"FolderSizeResult\"];\n foldersSharedWithMe?: ModelTypes[\"FoldersSharedWithMeResult\"];\n limits?: ModelTypes[\"LimitsResult\"];\n mail?: ModelTypes[\"MailResult\"];\n paymentInfos?: ModelTypes[\"PaymentInfosResult\"];\n plans?: ModelTypes[\"PlansResult\"];\n sharedFolders?: ModelTypes[\"SharedFoldersResult\"];\n sharedVFiles?: ModelTypes[\"SharedVFilesResult\"];\n test?: boolean;\n unreadReceivedMailsCount?: ModelTypes[\"UnreadReceivedMailsCountResult\"];\n user?: ModelTypes[\"UserResult\"];\n vFile?: ModelTypes[\"VFileResult\"];\n vFilesSharedWithMe?: ModelTypes[\"VFilesSharedWithMeResult\"];\n userList?: ModelTypes[\"UserListResult\"];\n };\n [\"Mutation\"]: {\n addFileToHistory?: ModelTypes[\"AddFileToHistoryResult\"];\n cancelPayment?: ModelTypes[\"CancelPaymentResult\"];\n createApplication?: ModelTypes[\"CreateApplicationResult\"];\n createDraftMail?: ModelTypes[\"CreateDraftMailResult\"];\n createFolder?: ModelTypes[\"CreateFolderResult\"];\n dbConfigMutation?: ModelTypes[\"DbConfigMutationResult\"];\n dbSet?: ModelTypes[\"DbSetResult\"];\n deleteDraftMail?: ModelTypes[\"DeleteDraftMailResult\"];\n deleteFile?: ModelTypes[\"DeleteFileResult\"];\n deleteFolder?: ModelTypes[\"DeleteFolderResult\"];\n deleteFolderCloudTrash?: ModelTypes[\"DeleteFolderCloudTrashResult\"];\n deleteFolderSharing?: ModelTypes[\"DeleteFolderSharingResult\"];\n deleteMail?: ModelTypes[\"DeleteMailResult\"];\n deleteMailTrash?: ModelTypes[\"DeleteMailTrashResult\"];\n deleteUser?: ModelTypes[\"DeleteUserResult\"];\n deleteVFile?: ModelTypes[\"DeleteVFileResult\"];\n deleteVFileCloudTrash?: ModelTypes[\"DeleteVFileCloudTrashResult\"];\n deleteVFileSharing?: ModelTypes[\"DeleteVFileSharingResult\"];\n duplicateVFile?: ModelTypes[\"DuplicateVFileResult\"];\n emptyCloudTrash?: ModelTypes[\"EmptyCloudTrashResult\"];\n emptyMailTrash?: ModelTypes[\"EmptyMailTrashResult\"];\n logout?: ModelTypes[\"LogoutResult\"];\n moveFiles?: ModelTypes[\"MoveFilesResult\"];\n moveFolders?: ModelTypes[\"MoveFoldersResult\"];\n pay?: ModelTypes[\"PayResult\"];\n readMail?: ModelTypes[\"ReadMailResult\"];\n recoverFolder?: ModelTypes[\"RecoverFolderResult\"];\n recoverMail?: ModelTypes[\"RecoverMailResult\"];\n recoverVFile?: ModelTypes[\"RecoverVFileResult\"];\n saveInCloud?: ModelTypes[\"SaveInCloudResult\"];\n sendDraftMail?: ModelTypes[\"SendDraftMailResult\"];\n sendOneMail?: ModelTypes[\"SendOneMailResult\"];\n sendReport?: ModelTypes[\"SendReportResult\"];\n shareFileInHistory?: ModelTypes[\"ShareFileInHistoryResult\"];\n shareFolder?: ModelTypes[\"ShareFolderResult\"];\n shareFolderFinish?: ModelTypes[\"ShareFolderFinishResult\"];\n shareVFile?: ModelTypes[\"ShareVFileResult\"];\n unreadMail?: ModelTypes[\"UnreadMailResult\"];\n updateAppNotifications?: ModelTypes[\"UpdateAppNotificationsResult\"];\n updateAppSettings?: ModelTypes[\"UpdateAppSettingsResult\"];\n updateDraftMail?: ModelTypes[\"UpdateDraftMailResult\"];\n updateFile?: ModelTypes[\"UpdateFileResult\"];\n updateFolder?: ModelTypes[\"UpdateFolderResult\"];\n updateProfile?: ModelTypes[\"UpdateProfileResult\"];\n uploadAnonymous?: ModelTypes[\"FileResponse\"];\n uploadFile?: ModelTypes[\"UploadFileResult\"];\n uploadFileEnd?: ModelTypes[\"UploadFileEndResult\"];\n uploadFilePartEnd?: ModelTypes[\"UploadFilePartEndResult\"];\n changeUserPlan?: ModelTypes[\"ChangeUserPlanResult\"];\n };\n [\"Subscription\"]: {\n test: boolean;\n };\n};\n\nexport type GraphQLTypes = {\n /** The `BigInt` scalar type represents non-fractional signed whole numeric values.\n@see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt */\n [\"BigInt\"]: any;\n /** The `Byte` scalar type represents byte value as a Buffer */\n [\"Bytes\"]: any;\n /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n [\"DateTime\"]: any;\n /** An arbitrary-precision Decimal type */\n [\"Decimal\"]: any;\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n [\"Json\"]: any;\n [\"Lang\"]: Lang;\n [\"PlanKind\"]: PlanKind;\n [\"UserRole\"]: UserRole;\n [\"MailType\"]: MailType;\n [\"Rights\"]: Rights;\n [\"AppNotificationsResult\"]: {\n __typename: \"UserAppNotifications\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on UserAppNotifications\"]: \"__union\" &\n GraphQLTypes[\"UserAppNotifications\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"BlogResult\"]: {\n __typename: \"BlogResponse\" | \"ErrorLangNotExist\";\n [\"...on BlogResponse\"]: \"__union\" & GraphQLTypes[\"BlogResponse\"];\n [\"...on ErrorLangNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorLangNotExist\"];\n };\n [\"DbConfigResult\"]: {\n __typename:\n | \"DbConfigResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\"\n | \"ErrorNotFound\";\n [\"...on DbConfigResponse\"]: \"__union\" & GraphQLTypes[\"DbConfigResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"DbGetResult\"]: {\n __typename:\n | \"DbGetResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\"\n | \"ErrorNotExist\";\n [\"...on DbGetResponse\"]: \"__union\" & GraphQLTypes[\"DbGetResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DbSearchResult\"]: {\n __typename:\n | \"DbSearchResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\"\n | \"ErrorBasic\";\n [\"...on DbSearchResponse\"]: \"__union\" & GraphQLTypes[\"DbSearchResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"DeletedFoldersResult\"]: {\n __typename: \"DeletedFoldersResponse\" | \"ErrorAccessDenied\";\n [\"...on DeletedFoldersResponse\"]: \"__union\" &\n GraphQLTypes[\"DeletedFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeletedMailsResult\"]: {\n __typename: \"DeletedMailsResponse\" | \"ErrorAccessDenied\";\n [\"...on DeletedMailsResponse\"]: \"__union\" &\n GraphQLTypes[\"DeletedMailsResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeletedVFilesResult\"]: {\n __typename: \"DeletedVFilesResponse\" | \"ErrorAccessDenied\";\n [\"...on DeletedVFilesResponse\"]: \"__union\" &\n GraphQLTypes[\"DeletedVFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"FaqResult\"]: {\n __typename: \"FaqResponse\" | \"ErrorAccessDenied\";\n [\"...on FaqResponse\"]: \"__union\" & GraphQLTypes[\"FaqResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"FileResult\"]: {\n __typename: \"FileQueryResponse\" | \"ErrorAccessDenied\";\n [\"...on FileQueryResponse\"]: \"__union\" & GraphQLTypes[\"FileQueryResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"FileContentResult\"]: {\n __typename: \"FileContentResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on FileContentResponse\"]: \"__union\" &\n GraphQLTypes[\"FileContentResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"FolderResult\"]: {\n __typename: \"FolderResponse\" | \"ErrorAccessDenied\";\n [\"...on FolderResponse\"]: \"__union\" & GraphQLTypes[\"FolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"FolderSizeResult\"]: {\n __typename: \"FolderSizeResponse\" | \"ErrorAccessDenied\";\n [\"...on FolderSizeResponse\"]: \"__union\" &\n GraphQLTypes[\"FolderSizeResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"FoldersSharedWithMeResult\"]: {\n __typename: \"FolderSharedWithMeResponse\" | \"ErrorAccessDenied\";\n [\"...on FolderSharedWithMeResponse\"]: \"__union\" &\n GraphQLTypes[\"FolderSharedWithMeResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"LimitsResult\"]: {\n __typename:\n | \"QueryLimits\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\"\n | \"ErrorNotExist\"\n | \"ErrorLimit\";\n [\"...on QueryLimits\"]: \"__union\" & GraphQLTypes[\"QueryLimits\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorLimit\"]: \"__union\" & GraphQLTypes[\"ErrorLimit\"];\n };\n [\"MailResult\"]: {\n __typename: \"QueryMailResponse\" | \"ErrorAccessDenied\";\n [\"...on QueryMailResponse\"]: \"__union\" & GraphQLTypes[\"QueryMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"PaymentInfosResult\"]: {\n __typename: \"PaymentInfosResponse\" | \"ErrorAccessDenied\";\n [\"...on PaymentInfosResponse\"]: \"__union\" &\n GraphQLTypes[\"PaymentInfosResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"PlansResult\"]: {\n __typename: \"PlanResponse\";\n [\"...on PlanResponse\"]: \"__union\" & GraphQLTypes[\"PlanResponse\"];\n };\n [\"SharedFoldersResult\"]: {\n __typename: \"SharedFoldersResponse\" | \"ErrorAccessDenied\";\n [\"...on SharedFoldersResponse\"]: \"__union\" &\n GraphQLTypes[\"SharedFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"SharedVFilesResult\"]: {\n __typename: \"SharedVFilesResponse\" | \"ErrorAccessDenied\";\n [\"...on SharedVFilesResponse\"]: \"__union\" &\n GraphQLTypes[\"SharedVFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"UnreadReceivedMailsCountResult\"]: {\n __typename: \"UnreadReceivedMailsCountResponse\" | \"ErrorAccessDenied\";\n [\"...on UnreadReceivedMailsCountResponse\"]: \"__union\" &\n GraphQLTypes[\"UnreadReceivedMailsCountResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"UserResult\"]: {\n __typename: \"UserResponse\" | \"ErrorNotFound\";\n [\"...on UserResponse\"]: \"__union\" & GraphQLTypes[\"UserResponse\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"VFileResult\"]: {\n __typename: \"VFileResponse\" | \"ErrorAccessDenied\";\n [\"...on VFileResponse\"]: \"__union\" & GraphQLTypes[\"VFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"VFilesSharedWithMeResult\"]: {\n __typename: \"VFilesSharedWithMeResponse\" | \"ErrorAccessDenied\";\n [\"...on VFilesSharedWithMeResponse\"]: \"__union\" &\n GraphQLTypes[\"VFilesSharedWithMeResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"UserListResult\"]: {\n __typename: \"UserListResponse\" | \"ErrorAccessDenied\";\n [\"...on UserListResponse\"]: \"__union\" & GraphQLTypes[\"UserListResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"AddFileToHistoryResult\"]: {\n __typename:\n | \"AddFileToHistoryResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\";\n [\"...on AddFileToHistoryResponse\"]: \"__union\" &\n GraphQLTypes[\"AddFileToHistoryResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"CancelPaymentResult\"]: {\n __typename: \"CancelPaymentResponse\" | \"ErrorAccessDenied\";\n [\"...on CancelPaymentResponse\"]: \"__union\" &\n GraphQLTypes[\"CancelPaymentResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"CreateApplicationResult\"]: {\n __typename: \"CreateApplicationResponse\" | \"ErrorNotExist\";\n [\"...on CreateApplicationResponse\"]: \"__union\" &\n GraphQLTypes[\"CreateApplicationResponse\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"CreateDraftMailResult\"]: {\n __typename: \"CreateDraftMailResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on CreateDraftMailResponse\"]: \"__union\" &\n GraphQLTypes[\"CreateDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"CreateFolderResult\"]: {\n __typename: \"CreateFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on CreateFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"CreateFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DbConfigMutationResult\"]: {\n __typename: \"DbConfigMutationResponse\" | \"ErrorAccessDenied\";\n [\"...on DbConfigMutationResponse\"]: \"__union\" &\n GraphQLTypes[\"DbConfigMutationResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DbSetResult\"]: {\n __typename: \"DbSetResponse\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on DbSetResponse\"]: \"__union\" & GraphQLTypes[\"DbSetResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"DeleteDraftMailResult\"]: {\n __typename: \"DeleteDraftMailResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteDraftMailResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteFileResult\"]: {\n __typename: \"DeleteFileResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on DeleteFileResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DeleteFolderResult\"]: {\n __typename: \"DeleteFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on DeleteFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DeleteFolderCloudTrashResult\"]: {\n __typename: \"DeleteFolderCloudTrashResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteFolderCloudTrashResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteFolderCloudTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteFolderSharingResult\"]: {\n __typename: \"DeleteFolderSharingResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteFolderSharingResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteFolderSharingResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteMailResult\"]: {\n __typename: \"DeleteMailResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteMailResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteMailTrashResult\"]: {\n __typename: \"DeleteMailTrashResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteMailTrashResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteMailTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteUserResult\"]: {\n __typename: \"DeleteUserResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteUserResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteUserResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteVFileResult\"]: {\n __typename: \"DeleteVFileResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on DeleteVFileResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DeleteVFileCloudTrashResult\"]: {\n __typename: \"DeleteVFileCloudTrashResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteVFileCloudTrashResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteVFileCloudTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"DeleteVFileSharingResult\"]: {\n __typename:\n | \"DeleteVFileSharingResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\";\n [\"...on DeleteVFileSharingResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteVFileSharingResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"DuplicateVFileResult\"]: {\n __typename:\n | \"DuplicateVFileResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\";\n [\"...on DuplicateVFileResponse\"]: \"__union\" &\n GraphQLTypes[\"DuplicateVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"EmptyCloudTrashResult\"]: {\n __typename: \"DeleteMailResponse\" | \"ErrorAccessDenied\";\n [\"...on DeleteMailResponse\"]: \"__union\" &\n GraphQLTypes[\"DeleteMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"EmptyMailTrashResult\"]: {\n __typename: \"EmptyMailTrashResponse\" | \"ErrorAccessDenied\";\n [\"...on EmptyMailTrashResponse\"]: \"__union\" &\n GraphQLTypes[\"EmptyMailTrashResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"LogoutResult\"]: {\n __typename: \"LogoutResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on LogoutResponse\"]: \"__union\" & GraphQLTypes[\"LogoutResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"MoveFilesResult\"]: {\n __typename: \"MoveFilesResponse\" | \"ErrorAccessDenied\";\n [\"...on MoveFilesResponse\"]: \"__union\" & GraphQLTypes[\"MoveFilesResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"MoveFoldersResult\"]: {\n __typename: \"MoveFoldersResponse\" | \"ErrorAccessDenied\";\n [\"...on MoveFoldersResponse\"]: \"__union\" &\n GraphQLTypes[\"MoveFoldersResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"PayResult\"]: {\n __typename: \"PayResponse\" | \"ErrorAccessDenied\";\n [\"...on PayResponse\"]: \"__union\" & GraphQLTypes[\"PayResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"ReadMailResult\"]: {\n __typename:\n | \"ReadMailResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorBasic\"\n | \"ErrorNotFound\";\n [\"...on ReadMailResponse\"]: \"__union\" & GraphQLTypes[\"ReadMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"RecoverFolderResult\"]: {\n __typename: \"RecoverFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on RecoverFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"RecoverFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"RecoverMailResult\"]: {\n __typename: \"RecoverMailResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on RecoverMailResponse\"]: \"__union\" &\n GraphQLTypes[\"RecoverMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"RecoverVFileResult\"]: {\n __typename: \"RecoverVFileResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on RecoverVFileResponse\"]: \"__union\" &\n GraphQLTypes[\"RecoverVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"SaveInCloudResult\"]: {\n __typename:\n | \"SaveInCloudResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\"\n | \"ErrorBasic\";\n [\"...on SaveInCloudResponse\"]: \"__union\" &\n GraphQLTypes[\"SaveInCloudResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"SendDraftMailResult\"]: {\n __typename: \"SendDraftMailResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on SendDraftMailResponse\"]: \"__union\" &\n GraphQLTypes[\"SendDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"SendOneMailResult\"]: {\n __typename: \"RecoverFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on RecoverFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"RecoverFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"SendReportResult\"]: {\n __typename: \"SendReportResponse\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on SendReportResponse\"]: \"__union\" &\n GraphQLTypes[\"SendReportResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"ShareFileInHistoryResult\"]: {\n __typename:\n | \"ShareFileInHistoryResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\";\n [\"...on ShareFileInHistoryResponse\"]: \"__union\" &\n GraphQLTypes[\"ShareFileInHistoryResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"ShareFolderResult\"]: {\n __typename: \"ShareFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on ShareFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"ShareFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"ShareFolderFinishResult\"]: {\n __typename:\n | \"ShareFolderFinishResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\";\n [\"...on ShareFolderFinishResponse\"]: \"__union\" &\n GraphQLTypes[\"ShareFolderFinishResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"ShareVFileResult\"]: {\n __typename:\n | \"ShareVFileResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\"\n | \"ErrorNotFound\";\n [\"...on ShareVFileResponse\"]: \"__union\" &\n GraphQLTypes[\"ShareVFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"UnreadMailResult\"]: {\n __typename:\n | \"UnreadMailResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\"\n | \"ErrorBasic\";\n [\"...on UnreadMailResponse\"]: \"__union\" &\n GraphQLTypes[\"UnreadMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"UpdateAppNotificationsResult\"]: {\n __typename: \"UpdateAppNotificationsResponse\" | \"ErrorAccessDenied\";\n [\"...on UpdateAppNotificationsResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateAppNotificationsResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"UpdateAppSettingsResult\"]: {\n __typename:\n | \"UpdateAppSettingsResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorBasic\";\n [\"...on UpdateAppSettingsResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateAppSettingsResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"UpdateDraftMailResult\"]: {\n __typename: \"UpdateDraftMailResponse\" | \"ErrorAccessDenied\" | \"ErrorBasic\";\n [\"...on UpdateDraftMailResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateDraftMailResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"UpdateFileResult\"]: {\n __typename:\n | \"UpdateFileResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotExist\"\n | \"ErrorBasic\";\n [\"...on UpdateFileResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"UpdateFolderResult\"]: {\n __typename: \"UpdateFolderResponse\" | \"ErrorAccessDenied\" | \"ErrorNotExist\";\n [\"...on UpdateFolderResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateFolderResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n };\n [\"UpdateProfileResult\"]: {\n __typename: \"UpdateProfileResponse\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on UpdateProfileResponse\"]: \"__union\" &\n GraphQLTypes[\"UpdateProfileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"UploadFileResult\"]: {\n __typename:\n | \"UploadFileResponse\"\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\"\n | \"ErrorLimit\";\n [\"...on UploadFileResponse\"]: \"__union\" &\n GraphQLTypes[\"UploadFileResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorLimit\"]: \"__union\" & GraphQLTypes[\"ErrorLimit\"];\n };\n [\"UploadFileEndResult\"]: {\n __typename: \"UploadFileEndResponse\" | \"ErrorAccessDenied\" | \"ErrorNotFound\";\n [\"...on UploadFileEndResponse\"]: \"__union\" &\n GraphQLTypes[\"UploadFileEndResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n };\n [\"UploadFilePartEndResult\"]: {\n __typename: \"UploadFilePartEndResponse\" | \"ErrorAccessDenied\";\n [\"...on UploadFilePartEndResponse\"]: \"__union\" &\n GraphQLTypes[\"UploadFilePartEndResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"ChangeUserPlanResult\"]: {\n __typename: \"ChangeUserPlanResponse\" | \"ErrorAccessDenied\";\n [\"...on ChangeUserPlanResponse\"]: \"__union\" &\n GraphQLTypes[\"ChangeUserPlanResponse\"];\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n };\n [\"AppKeyPair\"]: {\n __typename: \"AppKeyPair\";\n pub: string;\n };\n [\"AppSession\"]: {\n __typename: \"AppSession\";\n id: string;\n lastActivity?: GraphQLTypes[\"DateTime\"];\n userAgent?: string;\n ip?: string;\n city?: string;\n country?: string;\n userSession: GraphQLTypes[\"UserSession\"];\n userApp?: GraphQLTypes[\"ApplicationsOnUsers\"];\n createdAt: GraphQLTypes[\"DateTime\"];\n };\n [\"Application\"]: {\n __typename: \"Application\";\n id: string;\n name: string;\n };\n [\"ApplicationsOnUsers\"]: {\n __typename: \"ApplicationsOnUsers\";\n fakeUserId: string;\n keyPair?: GraphQLTypes[\"AppKeyPair\"];\n sessions: Array<GraphQLTypes[\"AppSession\"]>;\n app: GraphQLTypes[\"Application\"];\n user: GraphQLTypes[\"User\"];\n folders: Array<GraphQLTypes[\"FoldersOnUsersOnApplications\"]>;\n settings: GraphQLTypes[\"UserAppSettings\"];\n };\n [\"Blog\"]: {\n __typename: \"Blog\";\n id: string;\n order: number;\n entries: Array<GraphQLTypes[\"BlogEntry\"]>;\n };\n [\"BlogEntry\"]: {\n __typename: \"BlogEntry\";\n id: string;\n lang: GraphQLTypes[\"Lang\"];\n author: string;\n body: string;\n date: GraphQLTypes[\"DateTime\"];\n image: string;\n summary: string;\n title: string;\n };\n [\"BlogItem\"]: {\n __typename: \"BlogItem\";\n id: string;\n blogId: string;\n order: number;\n title: string;\n body: string;\n author: string;\n image: string;\n imageAlt: string;\n summary: string;\n date: GraphQLTypes[\"DateTime\"];\n };\n [\"CloudLimits\"]: {\n __typename: \"CloudLimits\";\n size: GraphQLTypes[\"BigInt\"];\n maxSize?: GraphQLTypes[\"BigInt\"];\n count: GraphQLTypes[\"BigInt\"];\n maxCount?: GraphQLTypes[\"BigInt\"];\n };\n [\"Error\"]: {\n __typename:\n | \"ErrorAccessDenied\"\n | \"ErrorNotFound\"\n | \"ErrorUpgradePlan\"\n | \"ErrorLangNotExist\"\n | \"ErrorNotExist\"\n | \"ErrorLimit\"\n | \"ErrorBasic\";\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorUpgradePlan\"]: \"__union\" & GraphQLTypes[\"ErrorUpgradePlan\"];\n [\"...on ErrorLangNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorLangNotExist\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorLimit\"]: \"__union\" & GraphQLTypes[\"ErrorLimit\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n };\n [\"ErrorAccessDenied\"]: {\n __typename: \"ErrorAccessDenied\";\n message: string;\n };\n [\"ErrorBase\"]: {\n __typename:\n | \"ErrorAccessDenied\"\n | \"ErrorBasic\"\n | \"ErrorLangNotExist\"\n | \"ErrorLimit\"\n | \"ErrorNotExist\"\n | \"ErrorNotFound\"\n | \"ErrorUpgradePlan\";\n message: string;\n [\"...on ErrorAccessDenied\"]: \"__union\" & GraphQLTypes[\"ErrorAccessDenied\"];\n [\"...on ErrorBasic\"]: \"__union\" & GraphQLTypes[\"ErrorBasic\"];\n [\"...on ErrorLangNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorLangNotExist\"];\n [\"...on ErrorLimit\"]: \"__union\" & GraphQLTypes[\"ErrorLimit\"];\n [\"...on ErrorNotExist\"]: \"__union\" & GraphQLTypes[\"ErrorNotExist\"];\n [\"...on ErrorNotFound\"]: \"__union\" & GraphQLTypes[\"ErrorNotFound\"];\n [\"...on ErrorUpgradePlan\"]: \"__union\" & GraphQLTypes[\"ErrorUpgradePlan\"];\n };\n [\"ErrorBasic\"]: {\n __typename: \"ErrorBasic\";\n message: string;\n };\n [\"ErrorLangNotExist\"]: {\n __typename: \"ErrorLangNotExist\";\n message: string;\n };\n [\"ErrorLimit\"]: {\n __typename: \"ErrorLimit\";\n message: string;\n field?: string;\n };\n [\"ErrorNotExist\"]: {\n __typename: \"ErrorNotExist\";\n message: string;\n field?: string;\n };\n [\"ErrorNotFound\"]: {\n __typename: \"ErrorNotFound\";\n message: string;\n field?: string;\n };\n [\"ErrorUpgradePlan\"]: {\n __typename: \"ErrorUpgradePlan\";\n message: string;\n };\n [\"Faq\"]: {\n __typename: \"Faq\";\n id: string;\n order: number;\n entries: Array<GraphQLTypes[\"FaqEntry\"]>;\n };\n [\"FaqEntry\"]: {\n __typename: \"FaqEntry\";\n id: string;\n lang: GraphQLTypes[\"Lang\"];\n question: string;\n answer: string;\n faq: GraphQLTypes[\"Faq\"];\n };\n [\"FaqItem\"]: {\n __typename: \"FaqItem\";\n order: number;\n question: string;\n answer: string;\n };\n [\"File\"]: {\n __typename: \"File\";\n id: string;\n size: GraphQLTypes[\"BigInt\"];\n sizeBefore: GraphQLTypes[\"BigInt\"];\n createdAt: GraphQLTypes[\"DateTime\"];\n vFiles: Array<GraphQLTypes[\"VFile\"]>;\n vFilesCurrent: Array<GraphQLTypes[\"VFile\"]>;\n users: Array<GraphQLTypes[\"FilesOnUsersOnApplications\"]>;\n md5: string;\n md5Encrypted: string;\n deletedAt?: GraphQLTypes[\"DateTime\"];\n userApp: GraphQLTypes[\"ApplicationsOnUsers\"];\n mails: Array<GraphQLTypes[\"FilesOnMails\"]>;\n validatedAt?: GraphQLTypes[\"DateTime\"];\n user?: GraphQLTypes[\"FilesOnUsersOnApplications\"];\n };\n [\"FileContent\"]: {\n __typename:\n | \"FileContentCloud\"\n | \"FileContentReceivedMail\"\n | \"FileContentSentMail\";\n [\"...on FileContentCloud\"]: \"__union\" & GraphQLTypes[\"FileContentCloud\"];\n [\"...on FileContentReceivedMail\"]: \"__union\" &\n GraphQLTypes[\"FileContentReceivedMail\"];\n [\"...on FileContentSentMail\"]: \"__union\" &\n GraphQLTypes[\"FileContentSentMail\"];\n };\n [\"FileContentBase\"]: {\n __typename:\n | \"FileContentCloud\"\n | \"FileContentReceivedMail\"\n | \"FileContentSentMail\";\n parts: Array<GraphQLTypes[\"FileContentPart\"]>;\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: GraphQLTypes[\"BigInt\"];\n type: GraphQLTypes[\"FileContentType\"];\n [\"...on FileContentCloud\"]: \"__union\" & GraphQLTypes[\"FileContentCloud\"];\n [\"...on FileContentReceivedMail\"]: \"__union\" &\n GraphQLTypes[\"FileContentReceivedMail\"];\n [\"...on FileContentSentMail\"]: \"__union\" &\n GraphQLTypes[\"FileContentSentMail\"];\n };\n [\"FileContentCloud\"]: {\n __typename: \"FileContentCloud\";\n parts: Array<GraphQLTypes[\"FileContentPart\"]>;\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: GraphQLTypes[\"BigInt\"];\n type: GraphQLTypes[\"FileContentType\"];\n publicKey: string;\n };\n [\"FileContentPart\"]: {\n __typename: \"FileContentPart\";\n contentUrl: string;\n order: number;\n md5: string;\n };\n [\"FileContentReceivedMail\"]: {\n __typename: \"FileContentReceivedMail\";\n parts: Array<GraphQLTypes[\"FileContentPart\"]>;\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: GraphQLTypes[\"BigInt\"];\n type: GraphQLTypes[\"FileContentType\"];\n senderPublicKey: string;\n };\n [\"FileContentSentMail\"]: {\n __typename: \"FileContentSentMail\";\n parts: Array<GraphQLTypes[\"FileContentPart\"]>;\n key: string;\n md5: string;\n md5Encrypted: string;\n totalSize: GraphQLTypes[\"BigInt\"];\n type: GraphQLTypes[\"FileContentType\"];\n };\n [\"FileContentType\"]: FileContentType;\n [\"FilePart\"]: {\n __typename: \"FilePart\";\n id: string;\n file: GraphQLTypes[\"File\"];\n fileId: string;\n size: GraphQLTypes[\"BigInt\"];\n order: number;\n md5: string;\n validatedAt?: GraphQLTypes[\"DateTime\"];\n };\n [\"FilePartResponse\"]: {\n __typename: \"FilePartResponse\";\n fields: GraphQLTypes[\"Json\"];\n url: string;\n order: number;\n };\n [\"FileResponse\"]: {\n __typename: \"FileResponse\";\n fileId: string;\n parts: Array<GraphQLTypes[\"FilePartResponse\"]>;\n filePartSize: GraphQLTypes[\"BigInt\"];\n };\n [\"FileShared\"]: {\n __typename: \"FileShared\";\n userId: string;\n message?: string;\n appId: string;\n id: string;\n filename: string;\n size: number;\n sizeBefore: number;\n };\n [\"FileSharedContent\"]: {\n __typename: \"FileSharedContent\";\n ownerId?: string;\n pubKey?: string;\n message?: string;\n appId: string;\n id: string;\n type: string;\n filename: string;\n contentUrl: string;\n key: string;\n size: number;\n sizeBefore: number;\n };\n [\"FilesOnMails\"]: {\n __typename: \"FilesOnMails\";\n file: GraphQLTypes[\"File\"];\n fileKey: string;\n filename: string;\n mail: GraphQLTypes[\"Mail\"];\n };\n [\"FilesOnUsersOnApplications\"]: {\n __typename: \"FilesOnUsersOnApplications\";\n file: GraphQLTypes[\"File\"];\n userApp: GraphQLTypes[\"ApplicationsOnUsers\"];\n /** Encrypted with UserApp keys */\n key: string;\n };\n [\"Folder\"]: {\n __typename: \"Folder\";\n id: string;\n isFavorite: boolean;\n createdAt: GraphQLTypes[\"DateTime\"];\n deletedAt?: GraphQLTypes[\"DateTime\"];\n updatedAt: GraphQLTypes[\"DateTime\"];\n createdBy: GraphQLTypes[\"ApplicationsOnUsers\"];\n userApps: Array<GraphQLTypes[\"FoldersOnUsersOnApplications\"]>;\n userApp?: GraphQLTypes[\"FoldersOnUsersOnApplications\"];\n name: string;\n parentFolder?: GraphQLTypes[\"Folder\"];\n subfolders: Array<GraphQLTypes[\"Folder\"]>;\n vFiles: Array<GraphQLTypes[\"VFile\"]>;\n breadcrumb: Array<GraphQLTypes[\"FolderBreadcrumbItem\"]>;\n };\n [\"FolderBreadcrumbItem\"]: {\n __typename: \"FolderBreadcrumbItem\";\n id: string;\n name: string;\n pubKey: string;\n nameKey?: string;\n };\n [\"FolderSize\"]: {\n __typename: \"FolderSize\";\n size: GraphQLTypes[\"BigInt\"];\n sizeBefore: GraphQLTypes[\"BigInt\"];\n };\n [\"FoldersOnUsersOnApplications\"]: {\n __typename: \"FoldersOnUsersOnApplications\";\n folder: GraphQLTypes[\"Folder\"];\n userApp: GraphQLTypes[\"ApplicationsOnUsers\"];\n rights: GraphQLTypes[\"Rights\"];\n nameKey?: string;\n isRoot: boolean;\n };\n [\"MailFileInput\"]: {\n id: string;\n name: string;\n fileKey: string;\n };\n [\"MailRecipientInput\"]: {\n body: string;\n subject: string;\n recipientId: string;\n files: Array<GraphQLTypes[\"MailFileInput\"]>;\n };\n [\"NameKeyInput\"]: {\n id: string;\n nameKey: string;\n files: Array<GraphQLTypes[\"ShareFileKeyInput\"]>;\n };\n [\"NameKeyInputFolders\"]: {\n id: string;\n nameKey: string;\n };\n [\"PayInput\"]: {\n type: GraphQLTypes[\"PayInputType\"];\n token: string;\n firstName: string;\n lastName: string;\n street: string;\n postalCode: string;\n city: string;\n country: string;\n number: string;\n month: string;\n year: string;\n cvv: string;\n };\n [\"PayInputType\"]: PayInputType;\n [\"ShareFileInHistoryInput\"]: {\n fileId: string;\n users: Array<GraphQLTypes[\"ShareFileKeyInput\"]>;\n };\n [\"ShareFileKeyInput\"]: {\n id: string;\n key: string;\n };\n [\"ShareFoldersInput\"]: {\n folders: Array<GraphQLTypes[\"NameKeyInputFolders\"]>;\n vFiles: Array<GraphQLTypes[\"NameKeyInput\"]>;\n };\n [\"Limits\"]: {\n __typename: \"Limits\";\n downloadBandwidth?: GraphQLTypes[\"BigInt\"];\n downloadCount?: GraphQLTypes[\"BigInt\"];\n hardFileCount?: GraphQLTypes[\"BigInt\"];\n hardFileSize?: GraphQLTypes[\"BigInt\"];\n perFileSize?: GraphQLTypes[\"BigInt\"];\n receivedMails: GraphQLTypes[\"MailLimits\"];\n sentMails: GraphQLTypes[\"MailLimits\"];\n uploadBandwidth?: GraphQLTypes[\"BigInt\"];\n uploadCount?: GraphQLTypes[\"BigInt\"];\n };\n [\"MailLimits\"]: {\n __typename: \"MailLimits\";\n count?: GraphQLTypes[\"BigInt\"];\n fileCount?: GraphQLTypes[\"BigInt\"];\n fileSize?: GraphQLTypes[\"BigInt\"];\n hardCount?: GraphQLTypes[\"BigInt\"];\n hardFileCount?: GraphQLTypes[\"BigInt\"];\n hardFileSize?: GraphQLTypes[\"BigInt\"];\n perFileSize?: GraphQLTypes[\"BigInt\"];\n };\n [\"MailLimitsValues\"]: {\n __typename: \"MailLimitsValues\";\n count: GraphQLTypes[\"BigInt\"];\n maxCount?: GraphQLTypes[\"BigInt\"];\n fileCount: GraphQLTypes[\"BigInt\"];\n maxFileCount?: GraphQLTypes[\"BigInt\"];\n fileSize: GraphQLTypes[\"BigInt\"];\n maxFileSize?: GraphQLTypes[\"BigInt\"];\n };\n [\"QueryLimits\"]: {\n __typename: \"QueryLimits\";\n cloud: GraphQLTypes[\"CloudLimits\"];\n mail: GraphQLTypes[\"UserMailLimits\"];\n };\n [\"UserMailLimits\"]: {\n __typename: \"UserMailLimits\";\n sent: GraphQLTypes[\"MailLimitsValues\"];\n received: GraphQLTypes[\"MailLimitsValues\"];\n };\n [\"Mail\"]: {\n __typename: \"Mail\";\n id: string;\n app: GraphQLTypes[\"Application\"];\n body: string;\n createdAt: GraphQLTypes[\"DateTime\"];\n deletedAt?: GraphQLTypes[\"DateTime\"];\n files: Array<GraphQLTypes[\"FilesOnMails\"]>;\n mailIntegrity?: GraphQLTypes[\"MailIntegrity\"];\n mailIntegrityDraft?: GraphQLTypes[\"MailIntegrityDraft\"];\n openedAt?: GraphQLTypes[\"DateTime\"];\n recipient: GraphQLTypes[\"User\"];\n sender: GraphQLTypes[\"User\"];\n subject: string;\n type: GraphQLTypes[\"MailType\"];\n recipients: Array<GraphQLTypes[\"User\"]>;\n };\n [\"MailIntegrity\"]: {\n __typename: \"MailIntegrity\";\n id: string;\n hash: string;\n hashKey: string;\n answers: Array<GraphQLTypes[\"MailIntegrity\"]>;\n app: GraphQLTypes[\"Application\"];\n mails: Array<GraphQLTypes[\"Mail\"]>;\n recipients: Array<GraphQLTypes[\"User\"]>;\n temporaryRecipients: Array<GraphQLTypes[\"TemporaryUser\"]>;\n replyTo?: GraphQLTypes[\"MailIntegrity\"];\n };\n [\"MailIntegrityDraft\"]: {\n __typename: \"MailIntegrityDraft\";\n id: string;\n hash: string;\n hashKey: string;\n app: GraphQLTypes[\"Application\"];\n mail: GraphQLTypes[\"Mail\"];\n recipients: Array<GraphQLTypes[\"User\"]>;\n temporaryRecipients: Array<GraphQLTypes[\"TemporaryUser\"]>;\n replyTo?: GraphQLTypes[\"MailIntegrity\"];\n };\n [\"Plan\"]: {\n __typename: \"Plan\";\n id: string;\n kind: GraphQLTypes[\"PlanKind\"];\n codes: Array<string>;\n limits: GraphQLTypes[\"Limits\"];\n };\n [\"Report\"]: {\n __typename: \"Report\";\n id: string;\n user: GraphQLTypes[\"User\"];\n reportedUser: GraphQLTypes[\"User\"];\n customMessage?: string;\n };\n [\"AddFileToHistoryResponse\"]: {\n __typename: \"AddFileToHistoryResponse\";\n addFileToHistory: GraphQLTypes[\"VFile\"];\n };\n [\"CancelPaymentResponse\"]: {\n __typename: \"CancelPaymentResponse\";\n cancelPayment?: boolean;\n };\n [\"ChangeUserPlanResponse\"]: {\n __typename: \"ChangeUserPlanResponse\";\n changeUserPlan?: GraphQLTypes[\"User\"];\n };\n [\"CreateApplicationResponse\"]: {\n __typename: \"CreateApplicationResponse\";\n createApplication?: string;\n };\n [\"CreateDraftMailResponse\"]: {\n __typename: \"CreateDraftMailResponse\";\n createDraftMail?: GraphQLTypes[\"Mail\"];\n };\n [\"CreateFolderResponse\"]: {\n __typename: \"CreateFolderResponse\";\n createFolder?: GraphQLTypes[\"Folder\"];\n };\n [\"DbConfigMutationResponse\"]: {\n __typename: \"DbConfigMutationResponse\";\n dbConfigMutation: GraphQLTypes[\"Json\"];\n };\n [\"DbSetResponse\"]: {\n __typename: \"DbSetResponse\";\n dbSet?: GraphQLTypes[\"Json\"];\n };\n [\"DeleteDraftMailResponse\"]: {\n __typename: \"DeleteDraftMailResponse\";\n deleteDraftMail?: boolean;\n };\n [\"DeleteFileResponse\"]: {\n __typename: \"DeleteFileResponse\";\n deleteFile: boolean;\n };\n [\"DeleteFolderResponse\"]: {\n __typename: \"DeleteFolderResponse\";\n deleteFolder?: boolean;\n };\n [\"DeleteFolderCloudTrashResponse\"]: {\n __typename: \"DeleteFolderCloudTrashResponse\";\n deleteFolderCloudTrash?: boolean;\n };\n [\"DeleteFolderSharingResponse\"]: {\n __typename: \"DeleteFolderSharingResponse\";\n deleteFolderSharing: boolean;\n };\n [\"DeleteMailResponse\"]: {\n __typename: \"DeleteMailResponse\";\n deleteMail: boolean;\n };\n [\"DeleteMailTrashResponse\"]: {\n __typename: \"DeleteMailTrashResponse\";\n deleteMailTrash: boolean;\n };\n [\"DeleteUserResponse\"]: {\n __typename: \"DeleteUserResponse\";\n deleteUser?: boolean;\n };\n [\"DeleteVFileResponse\"]: {\n __typename: \"DeleteVFileResponse\";\n deleteVFile: boolean;\n };\n [\"DeleteVFileCloudTrashResponse\"]: {\n __typename: \"DeleteVFileCloudTrashResponse\";\n deleteVFileCloudTrash?: boolean;\n };\n [\"DeleteVFileSharingResponse\"]: {\n __typename: \"DeleteVFileSharingResponse\";\n deleteVFileSharing: boolean;\n };\n [\"DuplicateVFileResponse\"]: {\n __typename: \"DuplicateVFileResponse\";\n duplicateVFile: boolean;\n };\n [\"EmptyCloudTrashResponse\"]: {\n __typename: \"EmptyCloudTrashResponse\";\n emptyCloudTrash?: boolean;\n };\n [\"EmptyMailTrashResponse\"]: {\n __typename: \"EmptyMailTrashResponse\";\n emptyMailTrash?: boolean;\n };\n [\"LogoutResponse\"]: {\n __typename: \"LogoutResponse\";\n logout?: boolean;\n };\n [\"MoveFilesResponse\"]: {\n __typename: \"MoveFilesResponse\";\n moveFiles?: boolean;\n };\n [\"MoveFoldersResponse\"]: {\n __typename: \"MoveFoldersResponse\";\n moveFolders?: boolean;\n };\n [\"PayResponse\"]: {\n __typename: \"PayResponse\";\n pay: boolean;\n };\n [\"ReadMailResponse\"]: {\n __typename: \"ReadMailResponse\";\n readMail?: boolean;\n };\n [\"RecoverFolderResponse\"]: {\n __typename: \"RecoverFolderResponse\";\n recoverFolder?: boolean;\n };\n [\"RecoverMailResponse\"]: {\n __typename: \"RecoverMailResponse\";\n recoverMail: boolean;\n };\n [\"RecoverVFileResponse\"]: {\n __typename: \"RecoverVFileResponse\";\n recoverVFile: boolean;\n };\n [\"SaveInCloudResponse\"]: {\n __typename: \"SaveInCloudResponse\";\n saveInCloud?: GraphQLTypes[\"VFile\"];\n };\n [\"SendDraftMailResponse\"]: {\n __typename: \"SendDraftMailResponse\";\n sendDraftMail?: boolean;\n };\n [\"SendOneMailResponse\"]: {\n __typename: \"SendOneMailResponse\";\n sendOneMail?: boolean;\n };\n [\"SendReportResponse\"]: {\n __typename: \"SendReportResponse\";\n sendReport?: GraphQLTypes[\"Report\"];\n };\n [\"ShareFileInHistoryResponse\"]: {\n __typename: \"ShareFileInHistoryResponse\";\n shareFileInHistory: boolean;\n };\n [\"ShareFolderFinishResponse\"]: {\n __typename: \"ShareFolderFinishResponse\";\n shareFolderFinish?: boolean;\n };\n [\"ShareVFileResponse\"]: {\n __typename: \"ShareVFileResponse\";\n shareVFile?: boolean;\n };\n [\"UnreadMailResponse\"]: {\n __typename: \"UnreadMailResponse\";\n unreadMail?: boolean;\n };\n [\"UpdateAppNotificationsResponse\"]: {\n __typename: \"UpdateAppNotificationsResponse\";\n updateAppNotifications?: GraphQLTypes[\"UserAppNotifications\"];\n };\n [\"UpdateAppSettingsResponse\"]: {\n __typename: \"UpdateAppSettingsResponse\";\n updateAppSettings: GraphQLTypes[\"UserAppSettings\"];\n };\n [\"UpdateDraftMailResponse\"]: {\n __typename: \"UpdateDraftMailResponse\";\n updateDraftMail?: GraphQLTypes[\"Mail\"];\n };\n [\"UpdateFileResponse\"]: {\n __typename: \"UpdateFileResponse\";\n updateFile?: GraphQLTypes[\"VFile\"];\n };\n [\"UpdateFolderResponse\"]: {\n __typename: \"UpdateFolderResponse\";\n updateFolder?: GraphQLTypes[\"Folder\"];\n };\n [\"UpdateProfileResponse\"]: {\n __typename: \"UpdateProfileResponse\";\n updateProfile?: GraphQLTypes[\"User\"];\n };\n [\"UploadAnonymousResponse\"]: {\n __typename: \"UploadAnonymousResponse\";\n uploadAnonymous?: GraphQLTypes[\"FileResponse\"];\n };\n [\"UploadFileResponse\"]: {\n __typename: \"UploadFileResponse\";\n uploadFile?: GraphQLTypes[\"FileResponse\"];\n };\n [\"UploadFileEndResponse\"]: {\n __typename: \"UploadFileEndResponse\";\n uploadFileEnd?: string;\n };\n [\"UploadFilePartEndResponse\"]: {\n __typename: \"UploadFilePartEndResponse\";\n uploadFilePartEnd: boolean;\n };\n [\"BlogResponse\"]: {\n __typename: \"BlogResponse\";\n blogItems: Array<GraphQLTypes[\"BlogItem\"]>;\n };\n [\"DbConfigResponse\"]: {\n __typename: \"DbConfigResponse\";\n json: GraphQLTypes[\"Json\"];\n };\n [\"DbGetResponse\"]: {\n __typename: \"DbGetResponse\";\n json?: GraphQLTypes[\"Json\"];\n };\n [\"DbSearchResponse\"]: {\n __typename: \"DbSearchResponse\";\n json?: GraphQLTypes[\"Json\"];\n };\n [\"DeletedFoldersResponse\"]: {\n __typename: \"DeletedFoldersResponse\";\n deletedFolders: Array<GraphQLTypes[\"Folder\"]>;\n };\n [\"DeletedMailsResponse\"]: {\n __typename: \"DeletedMailsResponse\";\n deletedMails: Array<GraphQLTypes[\"Mail\"]>;\n };\n [\"DeletedVFilesResponse\"]: {\n __typename: \"DeletedVFilesResponse\";\n deletedVFiles: Array<GraphQLTypes[\"VFile\"]>;\n };\n [\"FaqResponse\"]: {\n __typename: \"FaqResponse\";\n faq: Array<GraphQLTypes[\"FaqItem\"]>;\n };\n [\"FileQueryResponse\"]: {\n __typename: \"FileQueryResponse\";\n file?: GraphQLTypes[\"File\"];\n };\n [\"FileContentResponse\"]: {\n __typename: \"FileContentResponse\";\n file?: GraphQLTypes[\"FileContent\"];\n };\n [\"FolderResponse\"]: {\n __typename: \"FolderResponse\";\n folder?: GraphQLTypes[\"Folder\"];\n };\n [\"FolderSharedWithMeResponse\"]: {\n __typename: \"FolderSharedWithMeResponse\";\n foldersSharedWithMe: Array<GraphQLTypes[\"Folder\"]>;\n };\n [\"FolderSizeResponse\"]: {\n __typename: \"FolderSizeResponse\";\n size: GraphQLTypes[\"BigInt\"];\n sizeBefore: GraphQLTypes[\"BigInt\"];\n };\n [\"QueryMailResponse\"]: {\n __typename: \"QueryMailResponse\";\n mail?: GraphQLTypes[\"Mail\"];\n };\n [\"PaymentInfosResponse\"]: {\n __typename: \"PaymentInfosResponse\";\n paymentInfos?: GraphQLTypes[\"PaymentInfos\"];\n };\n [\"PlanResponse\"]: {\n __typename: \"PlanResponse\";\n plan: Array<GraphQLTypes[\"Plan\"]>;\n };\n [\"SharedFoldersResponse\"]: {\n __typename: \"SharedFoldersResponse\";\n sharedFolders: Array<GraphQLTypes[\"Folder\"]>;\n };\n [\"SharedVFilesResponse\"]: {\n __typename: \"SharedVFilesResponse\";\n sharedVFiles: Array<GraphQLTypes[\"VFile\"]>;\n };\n [\"UnreadReceivedMailsCountResponse\"]: {\n __typename: \"UnreadReceivedMailsCountResponse\";\n count: number;\n };\n [\"UserResponse\"]: {\n __typename: \"UserResponse\";\n user?: GraphQLTypes[\"User\"];\n };\n [\"UserListResponse\"]: {\n __typename: \"UserListResponse\";\n userList: Array<GraphQLTypes[\"User\"]>;\n };\n [\"VFileResponse\"]: {\n __typename: \"VFileResponse\";\n vFile?: GraphQLTypes[\"VFile\"];\n };\n [\"VFilesSharedWithMeResponse\"]: {\n __typename: \"VFilesSharedWithMeResponse\";\n vFilesSharedWithMe: Array<GraphQLTypes[\"VFile\"]>;\n };\n [\"TemporaryUser\"]: {\n __typename: \"TemporaryUser\";\n id: string;\n mails: Array<GraphQLTypes[\"MailIntegrity\"]>;\n draftMails: Array<GraphQLTypes[\"MailIntegrityDraft\"]>;\n email?: string;\n };\n [\"User\"]: {\n __typename: \"User\";\n id: string;\n deletedAt?: GraphQLTypes[\"DateTime\"];\n lang: GraphQLTypes[\"Lang\"];\n reportSent: Array<GraphQLTypes[\"Report\"]>;\n godFather?: GraphQLTypes[\"User\"];\n godChildren: Array<GraphQLTypes[\"User\"]>;\n firstname: string;\n lastname: string;\n email: string;\n phone: string;\n lastLogin: GraphQLTypes[\"DateTime\"];\n role: GraphQLTypes[\"UserRole\"];\n sessions: Array<GraphQLTypes[\"UserSession\"]>;\n createdAt: GraphQLTypes[\"DateTime\"];\n receivedMails: Array<GraphQLTypes[\"Mail\"]>;\n waitingReceivedMails: Array<GraphQLTypes[\"WaitingReceivedMail\"]>;\n sentMails: Array<GraphQLTypes[\"Mail\"]>;\n draftMails: Array<GraphQLTypes[\"Mail\"]>;\n appSettings?: GraphQLTypes[\"UserAppSettings\"];\n applications: Array<GraphQLTypes[\"ApplicationsOnUsers\"]>;\n publicKey: string;\n };\n [\"UserAppNotifications\"]: {\n __typename: \"UserAppNotifications\";\n id: string;\n enableAll: boolean;\n mail: boolean;\n cloud: boolean;\n disableAllUntil?: GraphQLTypes[\"DateTime\"];\n };\n [\"UserAppSettings\"]: {\n __typename: \"UserAppSettings\";\n id: string;\n cloudFileDaysForDelete: number;\n cloudFolderDaysForDelete: number;\n historyFileDaysForDelete?: number;\n historyMaxFileCount: number;\n autoDisconnectDelay?: number;\n };\n [\"UserSession\"]: {\n __typename: \"UserSession\";\n id: string;\n appSessions: Array<GraphQLTypes[\"AppSession\"]>;\n lastActivity?: GraphQLTypes[\"DateTime\"];\n userAgent?: string;\n ip?: string;\n city?: string;\n country?: string;\n createdAt: GraphQLTypes[\"DateTime\"];\n };\n [\"VFile\"]: {\n __typename: \"VFile\";\n id: string;\n isFavorite: boolean;\n createdAt: GraphQLTypes[\"DateTime\"];\n deletedAt?: GraphQLTypes[\"DateTime\"];\n filename: string;\n userApps: Array<GraphQLTypes[\"VFilesOnUsersOnApplications\"]>;\n createdBy: GraphQLTypes[\"ApplicationsOnUsers\"];\n userApp?: GraphQLTypes[\"VFilesOnUsersOnApplications\"];\n folder: GraphQLTypes[\"Folder\"];\n history: Array<GraphQLTypes[\"File\"]>;\n current?: GraphQLTypes[\"File\"];\n updatedAt: GraphQLTypes[\"DateTime\"];\n };\n [\"VFilesOnUsersOnApplications\"]: {\n __typename: \"VFilesOnUsersOnApplications\";\n vFile: GraphQLTypes[\"VFile\"];\n userApp: GraphQLTypes[\"ApplicationsOnUsers\"];\n rights: GraphQLTypes[\"Rights\"];\n nameKey: string;\n isRoot: boolean;\n };\n [\"WaitingReceivedMail\"]: {\n __typename: \"WaitingReceivedMail\";\n sender: GraphQLTypes[\"User\"];\n date: GraphQLTypes[\"DateTime\"];\n recipients: Array<GraphQLTypes[\"User\"]>;\n temporaryRecipients: Array<GraphQLTypes[\"TemporaryUser\"]>;\n attachmentsCount: number;\n };\n [\"PaymentInfos\"]: {\n __typename: \"PaymentInfos\";\n hostedUrl: string;\n currentSubscription: GraphQLTypes[\"RecurlySubscription\"];\n invoices: Array<GraphQLTypes[\"RecurlyInvoices\"]>;\n };\n [\"RecurlyInvoices\"]: {\n __typename: \"RecurlyInvoices\";\n pdf: string;\n date: GraphQLTypes[\"DateTime\"];\n due: GraphQLTypes[\"DateTime\"];\n status: string;\n total: number;\n name: string;\n currency: string;\n };\n [\"RecurlySubscription\"]: {\n __typename: \"RecurlySubscription\";\n autorenew: boolean;\n activatedAt?: GraphQLTypes[\"DateTime\"];\n currentPeriodEndsAt?: GraphQLTypes[\"DateTime\"];\n currentPeriodStartedAt?: GraphQLTypes[\"DateTime\"];\n canceledAt?: GraphQLTypes[\"DateTime\"];\n createdAt?: GraphQLTypes[\"DateTime\"];\n expiresAt?: GraphQLTypes[\"DateTime\"];\n pausedAt?: GraphQLTypes[\"DateTime\"];\n trialEndsAt?: GraphQLTypes[\"DateTime\"];\n trialStartedAt?: GraphQLTypes[\"DateTime\"];\n updatedAt?: GraphQLTypes[\"DateTime\"];\n state: string;\n collectionMethod: string;\n plan?: string;\n planCode?: string;\n total?: number;\n };\n [\"ShareFolderResponse\"]: {\n __typename: \"ShareFolderResponse\";\n folders: Array<string>;\n vFiles: Array<string>;\n };\n [\"Query\"]: {\n __typename: \"Query\";\n appNotifications?: GraphQLTypes[\"AppNotificationsResult\"];\n blog?: GraphQLTypes[\"BlogResult\"];\n dbConfig?: GraphQLTypes[\"DbConfigResult\"];\n dbGet?: GraphQLTypes[\"DbGetResult\"];\n dbSearch?: GraphQLTypes[\"DbSearchResult\"];\n deletedFolders?: GraphQLTypes[\"DeletedFoldersResult\"];\n deletedMails?: GraphQLTypes[\"DeletedMailsResult\"];\n deletedVFiles?: GraphQLTypes[\"DeletedVFilesResult\"];\n faq?: GraphQLTypes[\"FaqResult\"];\n file?: GraphQLTypes[\"FileResult\"];\n fileContent?: GraphQLTypes[\"FileContentResult\"];\n filesSharedWithMe: Array<GraphQLTypes[\"FileSharedContent\"]>;\n folder?: GraphQLTypes[\"FolderResult\"];\n folderSize?: GraphQLTypes[\"FolderSizeResult\"];\n foldersSharedWithMe?: GraphQLTypes[\"FoldersSharedWithMeResult\"];\n limits?: GraphQLTypes[\"LimitsResult\"];\n mail?: GraphQLTypes[\"MailResult\"];\n paymentInfos?: GraphQLTypes[\"PaymentInfosResult\"];\n plans?: GraphQLTypes[\"PlansResult\"];\n sharedFolders?: GraphQLTypes[\"SharedFoldersResult\"];\n sharedVFiles?: GraphQLTypes[\"SharedVFilesResult\"];\n test?: boolean;\n unreadReceivedMailsCount?: GraphQLTypes[\"UnreadReceivedMailsCountResult\"];\n user?: GraphQLTypes[\"UserResult\"];\n vFile?: GraphQLTypes[\"VFileResult\"];\n vFilesSharedWithMe?: GraphQLTypes[\"VFilesSharedWithMeResult\"];\n userList?: GraphQLTypes[\"UserListResult\"];\n };\n [\"Mutation\"]: {\n __typename: \"Mutation\";\n addFileToHistory?: GraphQLTypes[\"AddFileToHistoryResult\"];\n cancelPayment?: GraphQLTypes[\"CancelPaymentResult\"];\n createApplication?: GraphQLTypes[\"CreateApplicationResult\"];\n createDraftMail?: GraphQLTypes[\"CreateDraftMailResult\"];\n createFolder?: GraphQLTypes[\"CreateFolderResult\"];\n dbConfigMutation?: GraphQLTypes[\"DbConfigMutationResult\"];\n dbSet?: GraphQLTypes[\"DbSetResult\"];\n deleteDraftMail?: GraphQLTypes[\"DeleteDraftMailResult\"];\n deleteFile?: GraphQLTypes[\"DeleteFileResult\"];\n deleteFolder?: GraphQLTypes[\"DeleteFolderResult\"];\n deleteFolderCloudTrash?: GraphQLTypes[\"DeleteFolderCloudTrashResult\"];\n deleteFolderSharing?: GraphQLTypes[\"DeleteFolderSharingResult\"];\n deleteMail?: GraphQLTypes[\"DeleteMailResult\"];\n deleteMailTrash?: GraphQLTypes[\"DeleteMailTrashResult\"];\n deleteUser?: GraphQLTypes[\"DeleteUserResult\"];\n deleteVFile?: GraphQLTypes[\"DeleteVFileResult\"];\n deleteVFileCloudTrash?: GraphQLTypes[\"DeleteVFileCloudTrashResult\"];\n deleteVFileSharing?: GraphQLTypes[\"DeleteVFileSharingResult\"];\n duplicateVFile?: GraphQLTypes[\"DuplicateVFileResult\"];\n emptyCloudTrash?: GraphQLTypes[\"EmptyCloudTrashResult\"];\n emptyMailTrash?: GraphQLTypes[\"EmptyMailTrashResult\"];\n logout?: GraphQLTypes[\"LogoutResult\"];\n moveFiles?: GraphQLTypes[\"MoveFilesResult\"];\n moveFolders?: GraphQLTypes[\"MoveFoldersResult\"];\n pay?: GraphQLTypes[\"PayResult\"];\n readMail?: GraphQLTypes[\"ReadMailResult\"];\n recoverFolder?: GraphQLTypes[\"RecoverFolderResult\"];\n recoverMail?: GraphQLTypes[\"RecoverMailResult\"];\n recoverVFile?: GraphQLTypes[\"RecoverVFileResult\"];\n saveInCloud?: GraphQLTypes[\"SaveInCloudResult\"];\n sendDraftMail?: GraphQLTypes[\"SendDraftMailResult\"];\n sendOneMail?: GraphQLTypes[\"SendOneMailResult\"];\n sendReport?: GraphQLTypes[\"SendReportResult\"];\n shareFileInHistory?: GraphQLTypes[\"ShareFileInHistoryResult\"];\n shareFolder?: GraphQLTypes[\"ShareFolderResult\"];\n shareFolderFinish?: GraphQLTypes[\"ShareFolderFinishResult\"];\n shareVFile?: GraphQLTypes[\"ShareVFileResult\"];\n unreadMail?: GraphQLTypes[\"UnreadMailResult\"];\n updateAppNotifications?: GraphQLTypes[\"UpdateAppNotificationsResult\"];\n updateAppSettings?: GraphQLTypes[\"UpdateAppSettingsResult\"];\n updateDraftMail?: GraphQLTypes[\"UpdateDraftMailResult\"];\n updateFile?: GraphQLTypes[\"UpdateFileResult\"];\n updateFolder?: GraphQLTypes[\"UpdateFolderResult\"];\n updateProfile?: GraphQLTypes[\"UpdateProfileResult\"];\n uploadAnonymous?: GraphQLTypes[\"FileResponse\"];\n uploadFile?: GraphQLTypes[\"UploadFileResult\"];\n uploadFileEnd?: GraphQLTypes[\"UploadFileEndResult\"];\n uploadFilePartEnd?: GraphQLTypes[\"UploadFilePartEndResult\"];\n changeUserPlan?: GraphQLTypes[\"ChangeUserPlanResult\"];\n };\n [\"Subscription\"]: {\n __typename: \"Subscription\";\n test: boolean;\n };\n};\nexport enum Lang {\n fr = \"fr\",\n en = \"en\",\n it = \"it\",\n de = \"de\",\n pt = \"pt\",\n ja = \"ja\",\n es = \"es\",\n nl = \"nl\",\n pl = \"pl\",\n ru = \"ru\",\n zh = \"zh\",\n ar = \"ar\",\n he = \"he\",\n hi = \"hi\",\n ko = \"ko\"\n}\nexport enum PlanKind {\n free = \"free\",\n basic = \"basic\",\n advanced = \"advanced\",\n pro = \"pro\"\n}\nexport enum UserRole {\n user = \"user\",\n admin = \"admin\"\n}\nexport enum MailType {\n sent = \"sent\",\n received = \"received\"\n}\nexport enum Rights {\n admin = \"admin\",\n write = \"write\",\n read = \"read\"\n}\nexport enum FileContentType {\n cloud = \"cloud\",\n sent_mail = \"sent_mail\",\n received_mail = \"received_mail\"\n}\nexport enum PayInputType {\n secure = \"secure\",\n classic = \"classic\"\n}\nexport class GraphQLError extends Error {\n constructor(public response: GraphQLResponse) {\n super(\"\");\n console.error(response);\n }\n toString() {\n return \"GraphQL Response Error\";\n }\n}\n\nexport type UnwrapPromise<T> = T extends Promise<infer R> ? R : T;\nexport type ZeusState<T extends (...args: any[]) => Promise<any>> = NonNullable<\n UnwrapPromise<ReturnType<T>>\n>;\nexport type ZeusHook<\n T extends (\n ...args: any[]\n ) => Record<string, (...args: any[]) => Promise<any>>,\n N extends keyof ReturnType<T>\n> = ZeusState<ReturnType<T>[N]>;\n\ntype WithTypeNameValue<T> = T & {\n __typename?: boolean;\n};\ntype AliasType<T> = WithTypeNameValue<T> & {\n __alias?: Record<string, WithTypeNameValue<T>>;\n};\nexport interface GraphQLResponse {\n data?: Record<string, any>;\n errors?: Array<{\n message: string;\n }>;\n}\ntype DeepAnify<T> = {\n [P in keyof T]?: any;\n};\ntype IsPayLoad<T> = T extends [any, infer PayLoad] ? PayLoad : T;\ntype IsArray<T, U> = T extends Array<infer R>\n ? InputType<R, U>[]\n : InputType<T, U>;\ntype FlattenArray<T> = T extends Array<infer R> ? R : T;\n\ntype IsInterfaced<SRC extends DeepAnify<DST>, DST> = FlattenArray<SRC> extends\n | ZEUS_INTERFACES\n | ZEUS_UNIONS\n ? {\n [P in keyof SRC]: SRC[P] extends \"__union\" & infer R\n ? P extends keyof DST\n ? IsArray<\n R,\n \"__typename\" extends keyof DST\n ? DST[P] & { __typename: true }\n : DST[P]\n >\n : {}\n : never;\n }[keyof DST] & {\n [P in keyof Omit<\n Pick<\n SRC,\n {\n [P in keyof DST]: SRC[P] extends \"__union\" ? never : P;\n }[keyof DST]\n >,\n \"__typename\"\n >]: IsPayLoad<DST[P]> extends boolean ? SRC[P] : IsArray<SRC[P], DST[P]>;\n }\n : {\n [P in keyof Pick<SRC, keyof DST>]: IsPayLoad<DST[P]> extends boolean\n ? SRC[P]\n : IsArray<SRC[P], DST[P]>;\n };\n\nexport type MapType<SRC, DST> = SRC extends DeepAnify<DST>\n ? IsInterfaced<SRC, DST>\n : never;\nexport type InputType<SRC, DST> = IsPayLoad<DST> extends { __alias: infer R }\n ? {\n [P in keyof R]: MapType<SRC, R[P]>;\n } & MapType<SRC, Omit<IsPayLoad<DST>, \"__alias\">>\n : MapType<SRC, IsPayLoad<DST>>;\ntype Func<P extends any[], R> = (...args: P) => R;\ntype AnyFunc = Func<any, any>;\nexport type ArgsType<F extends AnyFunc> = F extends Func<infer P, any>\n ? P\n : never;\nexport type OperationOptions = {\n variables?: Record<string, any>;\n operationName?: string;\n};\nexport type SubscriptionToGraphQL<Z, T> = {\n ws: WebSocket;\n on: (fn: (args: InputType<T, Z>) => void) => void;\n off: (\n fn: (e: {\n data?: InputType<T, Z>;\n code?: number;\n reason?: string;\n message?: string;\n }) => void\n ) => void;\n error: (\n fn: (e: { data?: InputType<T, Z>; errors?: string[] }) => void\n ) => void;\n open: () => void;\n};\nexport type SelectionFunction<V> = <T>(t: T | V) => T;\nexport type fetchOptions = ArgsType<typeof fetch>;\ntype websocketOptions = typeof WebSocket extends new (\n ...args: infer R\n) => WebSocket\n ? R\n : never;\nexport type chainOptions =\n | [fetchOptions[0], fetchOptions[1] & { websocket?: websocketOptions }]\n | [fetchOptions[0]];\nexport type FetchFunction = (\n query: string,\n variables?: Record<string, any>\n) => Promise<any>;\nexport type SubscriptionFunction = (query: string) => any;\ntype NotUndefined<T> = T extends undefined ? never : T;\nexport type ResolverType<F> = NotUndefined<\n F extends [infer ARGS, any] ? ARGS : undefined\n>;\n\nexport const ZeusSelect = <T>() => ((t: any) => t) as SelectionFunction<T>;\n\nexport const ScalarResolver = (scalar: string, value: any) => {\n switch (scalar) {\n case \"String\":\n return `${JSON.stringify(value)}`;\n case \"Int\":\n return `${value}`;\n case \"Float\":\n return `${value}`;\n case \"Boolean\":\n return `${value}`;\n case \"ID\":\n return `\"${value}\"`;\n case \"enum\":\n return `${value}`;\n case \"scalar\":\n return `${value}`;\n default:\n return false;\n }\n};\n\nexport const TypesPropsResolver = ({\n value,\n type,\n name,\n key,\n blockArrays\n}: {\n value: any;\n type: string;\n name: string;\n key?: string;\n blockArrays?: boolean;\n}): string => {\n if (value === null) {\n return `null`;\n }\n let resolvedValue = AllTypesProps[type][name];\n if (key) {\n resolvedValue = resolvedValue[key];\n }\n if (!resolvedValue) {\n throw new Error(`Cannot resolve ${type} ${name}${key ? ` ${key}` : \"\"}`);\n }\n const typeResolved = resolvedValue.type;\n const isArray = resolvedValue.array;\n const isArrayRequired = resolvedValue.arrayRequired;\n if (typeof value === \"string\" && value.startsWith(`ZEUS_VAR$`)) {\n const isRequired = resolvedValue.required ? \"!\" : \"\";\n let t = `${typeResolved}`;\n if (isArray) {\n if (isRequired) {\n t = `${t}!`;\n }\n t = `[${t}]`;\n if (isArrayRequired) {\n t = `${t}!`;\n }\n } else {\n if (isRequired) {\n t = `${t}!`;\n }\n }\n return `\\$${value.split(`ZEUS_VAR$`)[1]}__ZEUS_VAR__${t}`;\n }\n if (isArray && !blockArrays) {\n return `[${value\n .map((v: any) =>\n TypesPropsResolver({ value: v, type, name, key, blockArrays: true })\n )\n .join(\",\")}]`;\n }\n const reslovedScalar = ScalarResolver(typeResolved, value);\n if (!reslovedScalar) {\n const resolvedType = AllTypesProps[typeResolved];\n if (typeof resolvedType === \"object\") {\n const argsKeys = Object.keys(resolvedType);\n return `{${argsKeys\n .filter(ak => value[ak] !== undefined)\n .map(\n ak =>\n `${ak}:${TypesPropsResolver({\n value: value[ak],\n type: typeResolved,\n name: ak\n })}`\n )}}`;\n }\n return ScalarResolver(AllTypesProps[typeResolved], value) as string;\n }\n return reslovedScalar;\n};\n\nconst isArrayFunction = (parent: string[], a: any[]) => {\n const [values, r] = a;\n const [mainKey, key, ...keys] = parent;\n const keyValues = Object.keys(values).filter(\n k => typeof values[k] !== \"undefined\"\n );\n\n if (!keys.length) {\n return keyValues.length > 0\n ? `(${keyValues\n .map(\n v =>\n `${v}:${TypesPropsResolver({\n value: values[v],\n type: mainKey,\n name: key,\n key: v\n })}`\n )\n .join(\",\")})${r ? traverseToSeekArrays(parent, r) : \"\"}`\n : traverseToSeekArrays(parent, r);\n }\n\n const [typeResolverKey] = keys.splice(keys.length - 1, 1);\n let valueToResolve = ReturnTypes[mainKey][key];\n for (const k of keys) {\n valueToResolve = ReturnTypes[valueToResolve][k];\n }\n\n const argumentString =\n keyValues.length > 0\n ? `(${keyValues\n .map(\n v =>\n `${v}:${TypesPropsResolver({\n value: values[v],\n type: valueToResolve,\n name: typeResolverKey,\n key: v\n })}`\n )\n .join(\",\")})${r ? traverseToSeekArrays(parent, r) : \"\"}`\n : traverseToSeekArrays(parent, r);\n return argumentString;\n};\n\nconst resolveKV = (\n k: string,\n v: boolean | string | { [x: string]: boolean | string }\n) =>\n typeof v === \"boolean\"\n ? k\n : typeof v === \"object\"\n ? `${k}{${objectToTree(v)}}`\n : `${k}${v}`;\n\nconst objectToTree = (o: { [x: string]: boolean | string }): string =>\n `{${Object.keys(o)\n .map(k => `${resolveKV(k, o[k])}`)\n .join(\" \")}}`;\n\nconst traverseToSeekArrays = (parent: string[], a?: any): string => {\n if (!a) return \"\";\n if (Object.keys(a).length === 0) {\n return \"\";\n }\n let b: Record<string, any> = {};\n if (Array.isArray(a)) {\n return isArrayFunction([...parent], a);\n } else {\n if (typeof a === \"object\") {\n Object.keys(a)\n .filter(k => typeof a[k] !== \"undefined\")\n .forEach(k => {\n if (k === \"__alias\") {\n Object.keys(a[k]).forEach(aliasKey => {\n const aliasOperations = a[k][aliasKey];\n const aliasOperationName = Object.keys(aliasOperations)[0];\n const aliasOperation = aliasOperations[aliasOperationName];\n b[\n `${aliasOperationName}__alias__${aliasKey}: ${aliasOperationName}`\n ] = traverseToSeekArrays(\n [...parent, aliasOperationName],\n aliasOperation\n );\n });\n } else {\n b[k] = traverseToSeekArrays([...parent, k], a[k]);\n }\n });\n } else {\n return \"\";\n }\n }\n return objectToTree(b);\n};\n\nconst buildQuery = (type: string, a?: Record<any, any>) =>\n traverseToSeekArrays([type], a);\n\nconst inspectVariables = (query: string) => {\n const regex = /\\$\\b\\w*__ZEUS_VAR__\\[?[^!^\\]^\\s^,^\\)^\\}]*[!]?[\\]]?[!]?/g;\n let result;\n const AllVariables: string[] = [];\n while ((result = regex.exec(query))) {\n if (AllVariables.includes(result[0])) {\n continue;\n }\n AllVariables.push(result[0]);\n }\n if (!AllVariables.length) {\n return query;\n }\n let filteredQuery = query;\n AllVariables.forEach(variable => {\n while (filteredQuery.includes(variable)) {\n filteredQuery = filteredQuery.replace(\n variable,\n variable.split(\"__ZEUS_VAR__\")[0]\n );\n }\n });\n return `(${AllVariables.map(a => a.split(\"__ZEUS_VAR__\"))\n .map(([variableName, variableType]) => `${variableName}:${variableType}`)\n .join(\", \")})${filteredQuery}`;\n};\n\nexport const queryConstruct =\n (\n t: \"query\" | \"mutation\" | \"subscription\",\n tName: string,\n operationName?: string\n ) =>\n (o: Record<any, any>) =>\n `${t.toLowerCase()}${\n operationName ? \" \" + operationName : \"\"\n }${inspectVariables(buildQuery(tName, o))}`;\n\nexport const fullChainConstruct =\n (fn: FetchFunction) =>\n (t: \"query\" | \"mutation\" | \"subscription\", tName: string) =>\n (o: Record<any, any>, options?: OperationOptions) =>\n fn(\n queryConstruct(t, tName, options?.operationName)(o),\n options?.variables\n ).then((r: any) => {\n seekForAliases(r);\n return r;\n });\n\nexport const fullSubscriptionConstruct =\n (fn: SubscriptionFunction) =>\n (t: \"query\" | \"mutation\" | \"subscription\", tName: string) =>\n (o: Record<any, any>, options?: OperationOptions) =>\n fn(queryConstruct(t, tName, options?.operationName)(o));\n\nconst seekForAliases = (response: any) => {\n const traverseAlias = (value: any) => {\n if (Array.isArray(value)) {\n value.forEach(seekForAliases);\n } else {\n if (typeof value === \"object\") {\n seekForAliases(value);\n }\n }\n };\n if (typeof response === \"object\" && response) {\n const keys = Object.keys(response);\n if (keys.length < 1) {\n return;\n }\n keys.forEach(k => {\n const value = response[k];\n if (k.indexOf(\"__alias__\") !== -1) {\n const [operation, alias] = k.split(\"__alias__\");\n response[alias] = {\n [operation]: value\n };\n delete response[k];\n }\n traverseAlias(value);\n });\n }\n};\n\nexport const $ = (t: TemplateStringsArray): any => `ZEUS_VAR$${t.join(\"\")}`;\n\nexport const resolverFor = <\n X,\n T extends keyof ValueTypes,\n Z extends keyof ValueTypes[T]\n>(\n _type: T,\n _field: Z,\n fn: (\n args: Required<ValueTypes[T]>[Z] extends [infer Input, any] ? Input : any,\n source: any\n ) => Z extends keyof ModelTypes[T]\n ? ModelTypes[T][Z] | Promise<ModelTypes[T][Z]> | X\n : any\n) => fn as (args?: any, source?: any) => any;\n\nconst handleFetchResponse = (\n response: Parameters<\n Extract<Parameters<ReturnType<typeof fetch>[\"then\"]>[0], Function>\n >[0]\n): Promise<GraphQLResponse> => {\n if (!response.ok) {\n return new Promise((_, reject) => {\n response\n .text()\n .then(text => {\n try {\n reject(JSON.parse(text));\n } catch (err) {\n reject(text);\n }\n })\n .catch(reject);\n });\n }\n return response.json();\n};\n\nexport const apiFetch =\n (options: fetchOptions) =>\n (query: string, variables: Record<string, any> = {}) => {\n let fetchFunction = fetch;\n let queryString = query;\n let fetchOptions = options[1] || {};\n if (fetchOptions.method && fetchOptions.method === \"GET\") {\n queryString = encodeURIComponent(query);\n return fetchFunction(`${options[0]}?query=${queryString}`, fetchOptions)\n .then(handleFetchResponse)\n .then((response: GraphQLResponse) => {\n if (response.errors) {\n throw new GraphQLError(response);\n }\n return response.data;\n });\n }\n return fetchFunction(`${options[0]}`, {\n body: JSON.stringify({ query: queryString, variables }),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n ...fetchOptions\n })\n .then(handleFetchResponse)\n .then((response: GraphQLResponse) => {\n if (response.errors) {\n throw new GraphQLError(response);\n }\n return response.data;\n });\n };\n\nexport const apiSubscription = (options: chainOptions) => (query: string) => {\n try {\n const queryString = options[0] + \"?query=\" + encodeURIComponent(query);\n const wsString = queryString.replace(\"http\", \"ws\");\n const host = (options.length > 1 && options[1]?.websocket?.[0]) || wsString;\n const webSocketOptions = options[1]?.websocket || [host];\n const ws = new WebSocket(...webSocketOptions);\n return {\n ws,\n on: (e: (args: any) => void) => {\n ws.onmessage = (event: any) => {\n if (event.data) {\n const parsed = JSON.parse(event.data);\n const data = parsed.data;\n if (data) {\n seekForAliases(data);\n }\n return e(data);\n }\n };\n },\n off: (e: (args: any) => void) => {\n ws.onclose = e;\n },\n error: (e: (args: any) => void) => {\n ws.onerror = e;\n },\n open: (e: () => void) => {\n ws.onopen = e;\n }\n };\n } catch {\n throw new Error(\"No websockets implemented\");\n }\n};\n\nconst allOperations = {\n query: \"Query\",\n mutation: \"Mutation\",\n subscription: \"Subscription\"\n};\n\nexport type GenericOperation<O> = O extends \"query\"\n ? \"Query\"\n : O extends \"mutation\"\n ? \"Mutation\"\n : \"Subscription\";\n\nexport const Thunder =\n (fn: FetchFunction) =>\n <\n O extends \"query\" | \"mutation\" | \"subscription\",\n R extends keyof ValueTypes = GenericOperation<O>\n >(\n operation: O\n ) =>\n <Z extends ValueTypes[R]>(o: Z | ValueTypes[R], ops?: OperationOptions) =>\n fullChainConstruct(fn)(operation, allOperations[operation])(\n o as any,\n ops\n ) as Promise<InputType<GraphQLTypes[R], Z>>;\n\nexport const Chain = (...options: chainOptions) => Thunder(apiFetch(options));\n\nexport const SubscriptionThunder =\n (fn: SubscriptionFunction) =>\n <\n O extends \"query\" | \"mutation\" | \"subscription\",\n R extends keyof ValueTypes = GenericOperation<O>\n >(\n operation: O\n ) =>\n <Z extends ValueTypes[R]>(o: Z | ValueTypes[R], ops?: OperationOptions) =>\n fullSubscriptionConstruct(fn)(operation, allOperations[operation])(\n o as any,\n ops\n ) as SubscriptionToGraphQL<Z, GraphQLTypes[R]>;\n\nexport const Subscription = (...options: chainOptions) =>\n SubscriptionThunder(apiSubscription(options));\nexport const Zeus = <\n Z extends ValueTypes[R],\n O extends \"query\" | \"mutation\" | \"subscription\",\n R extends keyof ValueTypes = GenericOperation<O>\n>(\n operation: O,\n o: Z | ValueTypes[R],\n operationName?: string\n) =>\n queryConstruct(operation, allOperations[operation], operationName)(o as any);\nexport const Selector = <T extends keyof ValueTypes>(_key: T) =>\n ZeusSelect<ValueTypes[T]>();\n\nexport const Gql = Chain(\"http://localhost:4000/graphql\");\n","import type { fetchOptions, GraphQLResponse } from \"./zeus/index.js\";\nimport { GraphQLError, Thunder } from \"./zeus/index.js\";\n\nconst handleFetchResponse = (\n response: Parameters<\n // TODO: cette erreur\n // eslint-disable-next-line @typescript-eslint/ban-types\n Extract<Parameters<ReturnType<typeof fetch>[\"then\"]>[0], Function>\n >[0]\n): Promise<GraphQLResponse> => {\n if (!response.ok) {\n return new Promise((_, reject) => {\n response\n .text()\n .then(text => {\n try {\n reject(JSON.parse(text));\n } catch (err) {\n reject(text);\n }\n })\n .catch(reject);\n });\n }\n return response.json() as Promise<GraphQLResponse>;\n};\n\nconst apiFetch =\n (options: fetchOptions, session?: string | null | undefined) =>\n async (\n query: string,\n variables: Record<string, any> = {}\n ): Promise<Record<string, any> | undefined> => {\n const fetchFunction = fetch;\n let queryString = query;\n const fetchOptions = options[1] || {};\n if (fetchOptions.method && fetchOptions.method === \"GET\") {\n queryString = encodeURIComponent(query);\n return fetchFunction(`${options[0]}?query=${queryString}`, fetchOptions)\n .then(handleFetchResponse)\n .then((response: GraphQLResponse) => {\n if (response.errors) {\n throw new GraphQLError(response);\n }\n return response.data;\n });\n }\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n \"accept-language\": navigator.language\n };\n\n if (session) {\n headers[\"secrecy-session\"] = session;\n }\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), 20000);\n const res = await fetchFunction(`${options[0]}`, {\n body: JSON.stringify({ query: queryString, variables }),\n method: \"POST\",\n headers,\n signal: controller.signal,\n ...fetchOptions\n })\n .then(handleFetchResponse)\n .then((response: GraphQLResponse) => {\n if (response.errors) {\n throw new GraphQLError(response);\n }\n return response.data;\n });\n clearTimeout(id);\n return res;\n };\n\nexport const createThunder = (\n url: string,\n session?: string | null | undefined\n): ReturnType<typeof Thunder> =>\n Thunder(\n apiFetch(\n [\n url,\n {\n mode: \"cors\",\n credentials: \"same-origin\"\n }\n ],\n session\n )\n );\n","import sodium from \"libsodium-wrappers\";\n\nexport async function setup(): Promise<void> {\n await sodium.ready;\n}\n\nexport { sodium };\n","import type { MessageTag } from \"libsodium-wrappers\";\nimport { setup, sodium } from \"../sodium.js\";\nimport SparkMD5 from \"spark-md5\";\nimport { chunks } from \"../utils.js\";\n\nexport type EncryptedFile = {\n data: Uint8Array;\n md5: string;\n md5Encrypted: string;\n};\n\nfunction assert(c: boolean, message: string): void {\n if (!c) {\n throw new Error(message);\n }\n}\n\ntype EncryptFn = (tag: number, plaintext: Uint8Array) => Uint8Array;\n\ntype DecryptFn = (ciphertext: Uint8Array) => MessageTag;\n\nexport function secretstreamKeygen(): Uint8Array {\n return sodium.crypto_secretstream_xchacha20poly1305_keygen();\n}\n\nfunction encrypt(key: Uint8Array): {\n destroy: () => void;\n encrypt: EncryptFn;\n header: Uint8Array;\n} {\n let destroyed = false;\n const { state, header } =\n sodium.crypto_secretstream_xchacha20poly1305_init_push(key);\n\n const encrypt: EncryptFn = (tag, plaintext) => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_push(\n state,\n plaintext,\n null,\n tag\n );\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n encrypt,\n destroy,\n header\n };\n}\n\nfunction decrypt(\n header: Uint8Array,\n key: Uint8Array\n): {\n destroy: () => void;\n decrypt: DecryptFn;\n} {\n assert(\n header.byteLength >=\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n `header must be at least HEADERBYTES (${sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES}) long`\n );\n assert(\n key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,\n `key must be at least KEYBYTES (${sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES}) long`\n );\n\n let destroyed = false;\n const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(\n header,\n key\n );\n\n const decrypt: DecryptFn = ciphertext => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);\n };\n\n function destroy(): void {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n decrypt,\n destroy\n };\n}\n\nexport const CHUNK_SIZE = 8192;\n\nexport type Progress = {\n percent: number;\n total: number;\n current: number;\n};\n\nexport async function encryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<EncryptedFile> {\n await setup();\n const { encrypt: crypt, destroy, header } = encrypt(key);\n const cryptedChunk =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max =\n Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n const sparkEncrypted = new SparkMD5.ArrayBuffer();\n const spark = new SparkMD5.ArrayBuffer();\n\n final.set(header);\n sparkEncrypted.append(header);\n let total = header.byteLength;\n progress?.({\n percent: total / max,\n total: max,\n current: total\n });\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, CHUNK_SIZE)) {\n if (abort?.signal.aborted) {\n throw new Error(`Encrypt aborted`);\n }\n spark.append(chunk);\n const tag =\n chunk.length < CHUNK_SIZE\n ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL\n : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;\n const crypted = crypt(tag, chunk);\n sparkEncrypted.append(crypted);\n final.set(crypted, total);\n total += crypted.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return {\n data: final.slice(0, total),\n md5Encrypted: sparkEncrypted.end(),\n md5: spark.end()\n };\n}\n\nexport async function decryptSecretstream(\n key: Uint8Array,\n data: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n abort?: AbortController\n): Promise<Uint8Array> {\n await setup();\n const header = data.slice(\n 0,\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES\n );\n data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);\n\n const { decrypt: decryptt, destroy } = decrypt(header, key);\n const chunkSize =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n let total = 0;\n\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, chunkSize)) {\n if (abort?.signal.aborted) {\n throw new Error(`Decrypt aborted`);\n }\n const tmp = decryptt(chunk);\n final.set(tmp.message, total);\n total += tmp.message.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return final.slice(0, total);\n}\n\n// async function mainSecretstream(random: Uint8Array): Promise<void> {\n// const key = secretstreamKeygen();\n// console.time(\"secretstream_encrypt\");\n// const crypted = encryptSecretstream(key, random);\n// console.timeEnd(\"secretstream_encrypt\");\n// console.time(\"secretstream_decrypt\");\n// const decrypted = decryptSecretstream(key, crypted);\n// console.timeEnd(\"secretstream_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n// async function mainSecretbox(random: Uint8Array): Promise<void> {\n// const key = generateSecretBox();\n// console.time(\"secretbox_encrypt\");\n// const crypted = encryptFile(random, key);\n// console.timeEnd(\"secretbox_encrypt\");\n// console.time(\"secretbox_decrypt\");\n// const decrypted = decryptFile(crypted, key);\n// console.timeEnd(\"secretbox_decrypt\");\n// const first = to_hex(random).slice(0, 32);\n// const final = to_hex(decrypted).slice(0, 32);\n// console.log({\n// first,\n// final,\n// equals: first === final\n// });\n// }\n\n// async function main(): Promise<void> {\n// await ready;\n// console.time(\"randombytes_buf\");\n// const random = randombytes_buf(1_000_000 * 1024);\n// console.timeEnd(\"randombytes_buf\");\n// await Promise.all([mainSecretstream(random), mainSecretbox(random)]);\n// }\n\n// main();\n","export function concatenate(...arrays: Uint8Array[]): Uint8Array {\n let totalLength = 0;\n for (const arr of arrays) {\n totalLength += arr.length;\n }\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\nexport function* enumerate<T>(\n iterable: Iterable<T>\n): IterableIterator<[number, T]> {\n let i = 0;\n\n for (const x of iterable) {\n yield [i, x];\n i++;\n }\n}\n\nexport function* chunks(\n arr: Uint8Array,\n n: number\n): Generator<Uint8Array, void, unknown> {\n for (let i = 0; i < arr.length; i += n) {\n yield arr.slice(i, i + n);\n }\n}\n\nexport const promiseAllLimit = async <T>(\n n: number,\n list: (() => Promise<T>)[]\n): Promise<T[]> => {\n const head = list.slice(0, n);\n const tail = list.slice(n);\n const result: T[] = [];\n const execute = async (\n promise: () => Promise<T>,\n i: number,\n runNext: () => Promise<void>\n ): Promise<void> => {\n result[i] = await promise();\n await runNext();\n };\n const runNext = async (): Promise<void> => {\n const i = list.length - tail.length;\n const promise = tail.shift();\n if (promise !== undefined) {\n await execute(promise, i, runNext);\n }\n };\n await Promise.all(head.map((promise, i) => execute(promise, i, runNext)));\n return result;\n};\n","// lz4-ts @license BSD-3-Clause / Copyright (c) 2015, Pierre Curto / 2016, oov. All rights reserved.\n/**\n * Copyright (c) 2015, Pierre Curto\n * Copyright (c) 2016, oov\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of xxHash nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst errInvalidSource = new Error(\"invalid source\");\nconst errShortBuffer = new Error(\"short buffer\");\n\n// The following constants are used to setup the compression algorithm.\nconst minMatch = 4; // the minimum size of the match sequence size (4 bytes)\nconst winSizeLog = 16; // LZ4 64Kb window size limit\nconst winSize = 1 << winSizeLog;\nconst winMask = winSize - 1; // 64Kb window of previous data for dependent blocks\n\n// hashSizeLog determines the size of the hash table used to quickly find a previous match position.\n// Its value influences the compression speed and memory usage, the lower the faster,\n// but at the expense of the compression ratio.\n// 16 seems to be the best compromise.\nconst hashSizeLog = 16;\nconst hashSize = 1 << hashSizeLog;\nconst hashShift = minMatch * 8 - hashSizeLog;\n\nconst mfLimit = 8 + minMatch; // The last match cannot start within the last 12 bytes.\nconst skipStrength = 6; // variable step for fast scan\n\nconst hasher = 2654435761 | 0; // prime number used to hash minMatch\n\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/imul#Polyfill\nfunction imulPolyfill(a: number, b: number): number {\n const ah = (a >>> 16) & 0xffff;\n const al = a & 0xffff;\n const bh = (b >>> 16) & 0xffff;\n const bl = b & 0xffff;\n // the shift by 0 fixes the sign on the high part\n // the final |0 converts the unsigned value into a signed value\n return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\n}\nconst imul = Math.imul ? Math.imul : imulPolyfill;\n\nfunction getUint32(a: Uint8Array, i: number): number {\n return a[i + 3] | (a[i + 2] << 8) | (a[i + 1] << 16) | (a[i] << 24);\n}\n\nfunction copy(\n dest: Uint8Array,\n src: Uint8Array,\n di: number,\n si: number,\n len: number\n): void {\n for (let i = 0; i < len; ++i) {\n dest[di++] = src[si++];\n }\n}\n\nexport function calcUncompressedLen(src: Uint8Array): number {\n const sn = src.length;\n if (sn === 0) {\n return 0;\n }\n\n let si = 0;\n let di = 0;\n\n while (true) {\n // literals and match lengths (token)\n let lLen = src[si] >> 4;\n let mLen = src[si] & 0xf;\n if (++si === sn) {\n throw errInvalidSource;\n }\n\n // literals\n if (lLen > 0) {\n if (lLen === 0xf) {\n while (src[si] === 0xff) {\n lLen += 0xff;\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n lLen += src[si];\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n di += lLen;\n si += lLen;\n if (si >= sn) {\n return di;\n }\n }\n\n si += 2;\n if (si >= sn) {\n throw errInvalidSource;\n }\n const offset = src[si - 2] | (src[si - 1] << 8);\n if (di - offset < 0 || offset === 0) {\n throw errInvalidSource;\n }\n\n // match\n if (mLen === 0xf) {\n while (src[si] === 0xff) {\n mLen += 0xff;\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n mLen += src[si];\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n // minimum match length is 4\n mLen += 4;\n\n // copy the match (NB. match is at least 4 bytes long)\n for (; mLen >= offset; mLen -= offset) {\n di += offset;\n }\n di += mLen;\n }\n}\n\nexport function uncompressBlock(src: Uint8Array, dest: Uint8Array): number {\n const sn = src.length;\n const dn = dest.length;\n if (sn === 0) {\n return 0;\n }\n\n let si = 0;\n let di = 0;\n\n while (true) {\n // literals and match lengths (token)\n let lLen = src[si] >> 4;\n let mLen = src[si] & 0xf;\n if (++si === sn) {\n throw errInvalidSource;\n }\n\n // literals\n if (lLen > 0) {\n if (lLen === 0xf) {\n while (src[si] === 0xff) {\n lLen += 0xff;\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n lLen += src[si];\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n if (dn - di < lLen || si + lLen > sn) {\n throw errShortBuffer;\n }\n copy(dest, src, di, si, lLen);\n di += lLen;\n si += lLen;\n if (si >= sn) {\n return di;\n }\n }\n\n si += 2;\n if (si >= sn) {\n throw errInvalidSource;\n }\n const offset = src[si - 2] | (src[si - 1] << 8);\n if (di - offset < 0 || offset === 0) {\n throw errInvalidSource;\n }\n\n // match\n if (mLen === 0xf) {\n while (src[si] === 0xff) {\n mLen += 0xff;\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n mLen += src[si];\n if (++si === sn) {\n throw errInvalidSource;\n }\n }\n // minimum match length is 4\n mLen += 4;\n if (dn - di <= mLen) {\n throw errShortBuffer;\n }\n\n // copy the match (NB. match is at least 4 bytes long)\n for (; mLen >= offset; mLen -= offset) {\n copy(dest, dest, di, di - offset, offset);\n di += offset;\n }\n copy(dest, dest, di, di - offset, mLen);\n di += mLen;\n }\n}\n\nexport function compressBlockBound(n: number): number {\n return n + ((n / 255) | 0) + 16;\n}\n\nexport function compressBlock(\n src: Uint8Array,\n dest: Uint8Array,\n soffset: number\n): number {\n const sn = src.length - mfLimit;\n const dn = dest.length;\n if (sn <= 0 || dn === 0 || soffset >= sn) {\n return 0;\n }\n let si = 0,\n di = 0;\n\n // fast scan strategy:\n // we only need a hash table to store the last sequences (4 bytes)\n const hashTable = new Uint32Array(hashSize);\n\n // Initialise the hash table with the first 64Kb of the input buffer\n // (used when compressing dependent blocks)\n while (si < soffset) {\n const h = imul(getUint32(src, si), hasher) >>> hashShift;\n hashTable[h] = ++si;\n }\n\n let anchor = si;\n let fma = 1 << skipStrength;\n while (si < sn - minMatch) {\n // hash the next 4 bytes (sequence)...\n const h = imul(getUint32(src, si), hasher) >>> hashShift;\n // -1 to separate existing entries from new ones\n const ref = hashTable[h] - 1;\n // ...and store the position of the hash in the hash table (+1 to compensate the -1 upon saving)\n hashTable[h] = si + 1;\n // no need to check the last 3 bytes in the first literal 4 bytes as\n // this guarantees that the next match, if any, is compressed with\n // a lower size, since to have some compression we must have:\n // ll+ml-overlap > 1 + (ll-15)/255 + (ml-4-15)/255 + 2 (uncompressed size>compressed size)\n // => ll+ml>3+2*overlap => ll+ml>= 4+2*overlap\n // and by definition we do have:\n // ll >= 1, ml >= 4\n // => ll+ml >= 5\n // => so overlap must be 0\n\n // the sequence is new, out of bound (64kb) or not valid: try next sequence\n if (\n ref < 0 || //(fma & ((1 << skipStrength) - 1)) < 4 || // this code seems has a big penalty for size...\n (si - ref) >> winSizeLog > 0 ||\n src[ref] !== src[si] ||\n src[ref + 1] !== src[si + 1] ||\n src[ref + 2] !== src[si + 2] ||\n src[ref + 3] !== src[si + 3]\n ) {\n // variable step: improves performance on non-compressible data\n si += fma >> skipStrength;\n ++fma;\n continue;\n }\n // match found\n fma = 1 << skipStrength;\n const lLen = si - anchor;\n const offset = si - ref;\n\n // encode match length part 1\n si += minMatch;\n let mLen = si; // match length has minMatch already\n while (si <= sn && src[si] === src[si - offset]) {\n si++;\n }\n mLen = si - mLen;\n if (mLen < 0xf) {\n dest[di] = mLen;\n } else {\n dest[di] = 0xf;\n }\n\n // encode literals length\n if (lLen < 0xf) {\n dest[di] |= lLen << 4;\n } else {\n dest[di] |= 0xf0;\n if (++di === dn) {\n throw errShortBuffer;\n }\n let l = lLen - 0xf;\n for (; l >= 0xff; l -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = l & 0xff;\n }\n if (++di === dn) {\n throw errShortBuffer;\n }\n\n // literals\n if (di + lLen >= dn) {\n throw errShortBuffer;\n }\n copy(dest, src, di, anchor, lLen);\n di += lLen;\n anchor = si;\n\n // encode offset\n di += 2;\n if (di >= dn) {\n throw errShortBuffer;\n }\n dest[di - 2] = offset;\n dest[di - 1] = offset >> 8;\n\n // encode match length part 2\n if (mLen >= 0xf) {\n for (mLen -= 0xf; mLen >= 0xff; mLen -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = mLen;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n }\n\n if (anchor === 0) {\n // incompressible\n return 0;\n }\n\n // last literals\n let lLen = src.length - anchor;\n if (lLen < 0xf) {\n dest[di] = lLen << 4;\n } else {\n dest[di] = 0xf0;\n if (++di === dn) {\n throw errShortBuffer;\n }\n for (lLen -= 0xf; lLen >= 0xff; lLen -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = lLen;\n }\n if (++di === dn) {\n throw errShortBuffer;\n }\n\n // write literals\n const lastLen = src.length - anchor;\n const n = di + lastLen;\n if (n > dn) {\n throw errShortBuffer;\n } else if (n >= sn) {\n // incompressible\n return 0;\n }\n copy(dest, src, di, anchor, lastLen);\n di += lastLen;\n return di;\n}\n\nexport function compressBlockHC(\n src: Uint8Array,\n dest: Uint8Array,\n soffset: number\n): number {\n const sn = src.length - mfLimit;\n const dn = dest.length;\n if (sn <= 0 || dn === 0 || soffset >= sn) {\n return 0;\n }\n let si = 0;\n let di = 0;\n\n // Hash Chain strategy:\n // we need a hash table and a chain table\n // the chain table cannot contain more entries than the window size (64Kb entries)\n const hashTable = new Uint32Array(hashSize);\n const chainTable = new Uint32Array(winSize);\n\n // Initialise the hash table with the first 64Kb of the input buffer\n // (used when compressing dependent blocks)\n while (si < soffset) {\n const h = imul(getUint32(src, si), hasher) >>> hashShift;\n chainTable[si & winMask] = hashTable[h];\n hashTable[h] = ++si;\n }\n\n let anchor = si;\n while (si < sn - minMatch) {\n // hash the next 4 bytes (sequence)...\n const h = imul(getUint32(src, si), hasher) >>> hashShift;\n\n // follow the chain until out of window and give the longest match\n let mLen = 0;\n let offset = 0;\n for (\n let next = hashTable[h] - 1;\n next > 0 && next > si - winSize;\n next = chainTable[next & winMask] - 1\n ) {\n // the first (mLen==0) or next byte (mLen>=minMatch) at current match length must match to improve on the match length\n if (src[next + mLen] === src[si + mLen]) {\n for (let ml = 0; ; ++ml) {\n if (src[next + ml] !== src[si + ml] || si + ml > sn) {\n // found a longer match, keep its position and length\n if (mLen < ml && ml >= minMatch) {\n mLen = ml;\n offset = si - next;\n }\n break;\n }\n }\n }\n }\n chainTable[si & winMask] = hashTable[h];\n hashTable[h] = si + 1;\n\n // no match found\n if (mLen === 0) {\n ++si;\n continue;\n }\n\n let si2 = si + 1;\n const ml = si + mLen;\n\n // match found\n // update hash/chain tables with overlaping bytes:\n // si already hashed, add everything from si+1 up to the match length\n while (si2 < ml) {\n const h = imul(getUint32(src, si2), hasher) >>> hashShift;\n chainTable[si2 & winMask] = hashTable[h];\n hashTable[h] = ++si2;\n }\n\n const lLen = si - anchor;\n si += mLen;\n mLen -= minMatch; // match length does not include minMatch\n\n if (mLen < 0xf) {\n dest[di] = mLen;\n } else {\n dest[di] = 0xf;\n }\n\n // encode literals length\n if (lLen < 0xf) {\n dest[di] |= lLen << 4;\n } else {\n dest[di] |= 0xf0;\n if (++di === dn) {\n throw errShortBuffer;\n }\n let l = lLen - 0xf;\n for (; l >= 0xff; l -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = l & 0xff;\n }\n if (++di === dn) {\n throw errShortBuffer;\n }\n\n // literals\n if (di + lLen >= dn) {\n throw errShortBuffer;\n }\n copy(dest, src, di, anchor, lLen);\n di += lLen;\n anchor = si;\n\n // encode offset\n di += 2;\n if (di >= dn) {\n throw errShortBuffer;\n }\n dest[di - 2] = offset;\n dest[di - 1] = offset >> 8;\n\n // encode match length part 2\n if (mLen >= 0xf) {\n for (mLen -= 0xf; mLen >= 0xff; mLen -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = mLen;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n }\n\n if (anchor === 0) {\n // incompressible\n return 0;\n }\n\n // last literals\n let lLen = src.length - anchor;\n if (lLen < 0xf) {\n dest[di] = lLen << 4;\n } else {\n dest[di] = 0xf0;\n if (++di === dn) {\n throw errShortBuffer;\n }\n for (lLen -= 0xf; lLen >= 0xff; lLen -= 0xff) {\n dest[di] = 0xff;\n if (++di === dn) {\n throw errShortBuffer;\n }\n }\n dest[di] = lLen;\n }\n if (++di === dn) {\n throw errShortBuffer;\n }\n\n // write literals\n const lastLen = src.length - anchor;\n const n = di + lastLen;\n if (n > dn) {\n throw errShortBuffer;\n } else if (n >= sn) {\n // incompressible\n return 0;\n }\n copy(dest, src, di, anchor, lastLen);\n di += lastLen;\n return di;\n}\n","import {\n calcUncompressedLen,\n compressBlockBound,\n compressBlockHC,\n uncompressBlock\n} from \"./lz4.js\";\nimport { concatenate } from \"../utils.js\";\n\nexport function compress(data: Uint8Array): Uint8Array {\n if (data.byteLength > 15_000_000) {\n return concatenate(new Uint8Array([0]), data);\n }\n const compressed = new Uint8Array(compressBlockBound(data.byteLength));\n const compressedSize = compressBlockHC(data, compressed, 0);\n if (compressedSize === 0) {\n return concatenate(new Uint8Array([0]), data);\n }\n return concatenate(new Uint8Array([1]), compressed.slice(0, compressedSize));\n}\n\nexport function uncompress(data: Uint8Array): Uint8Array {\n const realData = data.slice(1);\n if (data[0] === 0) {\n return realData;\n }\n const dst = new Uint8Array(calcUncompressedLen(realData));\n const uncompressedSize = uncompressBlock(realData, dst);\n return dst.slice(0, uncompressedSize);\n}\n","import { concatenate } from \"../utils.js\";\nimport { sodium } from \"../sodium.js\";\n\nexport interface KeyPair {\n publicKey: string;\n privateKey: string;\n}\n\nexport function encryptCryptoBox(\n data: Uint8Array,\n publicKeyBob: string,\n privateKeyAlice: string\n): Uint8Array {\n const nonce = sodium.randombytes_buf(sodium.crypto_box_NONCEBYTES);\n const crypt = sodium.crypto_box_easy(\n data,\n nonce,\n sodium.from_hex(publicKeyBob),\n sodium.from_hex(privateKeyAlice)\n );\n return concatenate(nonce, crypt);\n}\n\nexport function generateCryptoBoxKeyPair(): KeyPair {\n return sodium.crypto_box_keypair(\"hex\");\n}\n\nexport function decryptCryptoBox(\n data: Uint8Array,\n publicKeyAlice: string,\n privateKeyBob: string\n): Uint8Array {\n const nonce = data.slice(0, sodium.crypto_box_NONCEBYTES);\n const cipher = data.slice(sodium.crypto_box_NONCEBYTES);\n return sodium.crypto_box_open_easy(\n cipher,\n nonce,\n sodium.from_hex(publicKeyAlice),\n sodium.from_hex(privateKeyBob)\n );\n}\n\nexport function generateSecretBoxKey(): string {\n return sodium.randombytes_buf(sodium.crypto_secretbox_KEYBYTES, \"hex\");\n}\n\nexport function encryptSecretBox(data: Uint8Array, key: string): Uint8Array {\n const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);\n const crypt = sodium.crypto_secretbox_easy(data, nonce, sodium.from_hex(key));\n return concatenate(nonce, crypt);\n}\n\nexport function decryptSecretBox(data: Uint8Array, key: string): Uint8Array {\n const nonce = data.slice(0, sodium.crypto_secretbox_NONCEBYTES);\n const cipher = data.slice(sodium.crypto_secretbox_NONCEBYTES);\n return sodium.crypto_secretbox_open_easy(cipher, nonce, sodium.from_hex(key));\n}\n\nexport function encryptAnonymous(\n data: Uint8Array,\n receiverPublicKey: string\n): Uint8Array {\n return sodium.crypto_box_seal(data, sodium.from_hex(receiverPublicKey));\n}\n\nexport function decryptAnonymous(\n data: Uint8Array,\n { privateKey, publicKey }: KeyPair\n): Uint8Array {\n return sodium.crypto_box_seal_open(\n data,\n sodium.from_hex(publicKey),\n sodium.from_hex(privateKey)\n );\n}\n","import { filesCache } from \"../../cache.js\";\nimport type { KeyPair } from \"../../crypto/index.js\";\nimport { decryptCryptoBox } from \"../../crypto/index.js\";\nimport { sodium } from \"../../sodium.js\";\nimport type { GQLFile, InternalFile, File } from \"../types/index.js\";\n\nexport function gqlFileToInternal(\n gql: GQLFile,\n keyPair: KeyPair\n): InternalFile {\n const file: InternalFile = {\n ...gql,\n createdAt: new Date(gql.createdAt),\n size: BigInt(gql.size),\n sizeBefore: BigInt(gql.sizeBefore),\n user: null\n };\n\n if (gql.user?.userApp.keyPair) {\n file.user = {\n ...gql.user,\n key: sodium.to_hex(\n decryptCryptoBox(\n sodium.from_hex(gql.user.key),\n gql.user.userApp.keyPair.pub,\n keyPair.privateKey\n )\n )\n };\n }\n filesCache.set(file.id, file);\n return file;\n}\n\nexport function internalFileToFile(internal: InternalFile): File {\n const file: File = { ...internal };\n // @ts-ignore\n delete file.user;\n return file;\n}\n\nexport function gqlFileToExternal(gql: GQLFile, keyPair: KeyPair): File {\n return internalFileToFile(gqlFileToInternal(gql, keyPair));\n}\n","import { vFilesCache } from \"../../cache.js\";\nimport type { KeyPair } from \"../../crypto/index.js\";\nimport { decryptCryptoBox } from \"../../crypto/index.js\";\nimport { decryptSecretstream } from \"../../crypto/file.js\";\nimport { sodium } from \"../../sodium.js\";\nimport type {\n GQLVFile,\n GQLVFileWithFolder,\n InternalVFile,\n InternalVFileWithFolder,\n VFile,\n VFileWithFolder\n} from \"../types/index.js\";\nimport { gqlFileToInternal, internalFileToFile } from \"./file.js\";\nimport { gqlFolderToInternal, internalFolderToFolder } from \"./folder.js\";\n\nexport async function gqlVFileToInternal(\n gql: GQLVFile | GQLVFileWithFolder,\n keyPair: KeyPair\n): Promise<InternalVFile | InternalVFileWithFolder> {\n if (!gql.current) {\n throw `VFile ${gql.id} doesn't have current file`;\n }\n\n if (!gql.userApp) {\n throw `VFile ${gql.id} doesn't have userApp`;\n }\n\n // console.dir(gql, { depth: Infinity })\n\n const nameKey = decryptCryptoBox(\n sodium.from_hex(gql.userApp.nameKey),\n gql.createdBy.user.publicKey,\n keyPair.privateKey\n );\n const internal: InternalVFile = {\n ...gql,\n createdBy: gql.createdBy.user,\n filename: sodium.to_string(\n await decryptSecretstream(nameKey, sodium.from_hex(gql.filename))\n ),\n userApp: {\n userApp: gql.userApp.userApp,\n rights: gql.userApp.rights,\n isRoot: gql.userApp.isRoot,\n nameKey: sodium.to_hex(nameKey)\n },\n users: gql.userApps.map(u => [u.userApp.user, u.rights]),\n createdAt: new Date(gql.createdAt),\n updatedAt: new Date(gql.updatedAt),\n deletedAt: gql.deletedAt ? new Date(gql.deletedAt) : null,\n current: gqlFileToInternal(gql.current, keyPair),\n history: gql.history.map(f => gqlFileToInternal(f, keyPair))\n };\n if (\"folder\" in gql) {\n const internalWithFolder: InternalVFileWithFolder = {\n ...internal,\n folder: await gqlFolderToInternal(gql.folder, keyPair)\n };\n vFilesCache.set(internal.id, internalWithFolder);\n return internalWithFolder;\n }\n\n // @ts-expect-error\n delete internal.userApps;\n\n vFilesCache.set(internal.id, internal);\n return internal;\n}\n\nexport function internalVFileToVFile(\n internal: InternalVFile | InternalVFileWithFolder\n): VFile | VFileWithFolder {\n const vFile: VFile = {\n ...internal,\n current: internalFileToFile(internal.current),\n history: internal.history.map(internalFileToFile)\n };\n // @ts-ignore\n delete vFile.nameKey;\n\n if (\"folder\" in internal) {\n return {\n ...internal,\n folder: internalFolderToFolder(internal.folder)\n };\n }\n\n return vFile;\n}\n\nexport async function gqlVFileToExternal(\n gql: GQLVFile | GQLVFileWithFolder,\n keyPair: KeyPair\n): Promise<VFile | VFileWithFolder> {\n return internalVFileToVFile(await gqlVFileToInternal(gql, keyPair));\n}\n","import { sodium } from \"../../sodium.js\";\nimport type { KeyPair } from \"../../crypto/index.js\";\nimport { decryptCryptoBox } from \"../../crypto/index.js\";\nimport type {\n GQLFolder,\n InternalFolder,\n Folder,\n GQLFolderFull,\n InternalFolderFull,\n FolderFull\n} from \"../types/index.js\";\nimport { gqlVFileToInternal, internalVFileToVFile } from \"./vFile.js\";\nimport { foldersCache } from \"../../cache.js\";\nimport { decryptSecretstream } from \"../../crypto/file.js\";\n\nexport async function gqlFolderToInternal(\n gql: GQLFolder,\n keyPair: KeyPair\n): Promise<InternalFolder> {\n if (!gql.userApp) {\n throw `Can't access folder ${gql.id}`;\n }\n const internal: InternalFolder = {\n id: gql.id,\n userApp: gql.userApp,\n name: gql.name,\n isFavorite: gql.isFavorite,\n breadcrumb: gql.breadcrumb,\n createdBy: gql.createdBy.user,\n createdAt: new Date(gql.createdAt),\n updatedAt: new Date(gql.updatedAt),\n deletedAt: gql.deletedAt ? new Date(gql.deletedAt) : null,\n users: gql.userApps.map(u => [u.userApp.user, u.rights])\n };\n\n internal.userApp = { ...gql.userApp };\n\n if (gql.userApp.nameKey) {\n const key = decryptCryptoBox(\n sodium.from_hex(gql.userApp.nameKey),\n gql.createdBy.user.publicKey,\n keyPair.privateKey\n );\n internal.name = sodium.to_string(\n await decryptSecretstream(key, sodium.from_hex(internal.name))\n );\n\n internal.userApp.nameKey = sodium.to_hex(key);\n }\n\n for (const b of internal.breadcrumb) {\n if (!b.nameKey) {\n continue;\n }\n const key = decryptCryptoBox(\n sodium.from_hex(b.nameKey),\n b.pubKey,\n keyPair.privateKey\n );\n b.nameKey = sodium.to_hex(key);\n\n b.name = sodium.to_string(\n await decryptSecretstream(key, sodium.from_hex(b.name))\n );\n }\n\n foldersCache.set(internal.id, internal);\n return internal;\n}\n\nexport async function gqlFolderFullToInternalFull(\n gql: GQLFolderFull,\n keyPair: KeyPair\n): Promise<InternalFolderFull> {\n const f = await gqlFolderToInternal(gql, keyPair);\n return {\n ...f,\n vFiles: await Promise.all(\n gql.vFiles\n .filter(f => f.userApp)\n .map(vFile => gqlVFileToInternal(vFile, keyPair))\n ),\n parentFolder: gql.parentFolder\n ? await gqlFolderToInternal(gql.parentFolder, keyPair)\n : null,\n subfolders: await Promise.all(\n gql.subfolders.map(s => gqlFolderToInternal(s, keyPair))\n )\n };\n}\n\nexport function internalFolderToFolder(internal: InternalFolder): Folder {\n const folder: Folder = {\n ...internal\n };\n\n for (const b of folder.breadcrumb) {\n // @ts-ignore\n delete b.nameKey;\n }\n // @ts-ignore\n delete folder.nameKey;\n return folder;\n}\n\nexport function internalFolderFullToFolderFull(\n internal: InternalFolderFull\n): FolderFull {\n return {\n ...internalFolderToFolder(internal),\n vFiles: internal.vFiles.map(internalVFileToVFile),\n parentFolder: internal.parentFolder\n ? internalFolderToFolder(internal.parentFolder)\n : null,\n subfolders: internal.subfolders.map(internalFolderToFolder)\n };\n}\n\nexport async function gqlFolderToExternalFolderFull(\n gql: GQLFolderFull,\n keyPair: KeyPair\n): Promise<FolderFull> {\n return internalFolderFullToFolderFull(\n await gqlFolderFullToInternalFull(gql, keyPair)\n );\n}\n\nexport async function gqlFolderToExternal(\n gql: GQLFolder,\n keyPair: KeyPair\n): Promise<Folder> {\n return internalFolderToFolder(await gqlFolderToInternal(gql, keyPair));\n}\n","export const workerSodiumScript = `let sodium;\n\nself.sodium = {\n onload: (sod) => {\n sodium = sod\n postMessage({ event: \"ready\" })\n }\n};\n\nimportScripts('https://cdn.jsdelivr.net/gh/jedisct1/libsodium.js@master/dist/browsers/sodium.js');\nimportScripts('https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.0/spark-md5.min.js');\n\nfunction* chunks(arr, n) {\n for (let i = 0; i < arr.length; i += n) {\n yield arr.slice(i, i + n);\n }\n}\n\nfunction assert(c, message) {\n if (!c) {\n throw new Error(message);\n }\n}\n\nfunction encrypt(key) {\n let destroyed = false;\n const {\n state,\n header\n } = sodium.crypto_secretstream_xchacha20poly1305_init_push(key);\n\n const encrypt = (tag, plaintext) => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_push(\n state,\n plaintext,\n null,\n tag\n );\n };\n\n function destroy() {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n encrypt,\n destroy,\n header\n };\n}\n\nfunction decrypt(header, key) {\n assert(\n header.byteLength >=\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n \"header must be at least HEADERBYTES (\" + sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES + \") long\"\n );\n assert(\n key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES,\n \"key must be at least KEYBYTES (\" + sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES + \") long\"\n );\n\n let destroyed = false;\n const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(\n header,\n key\n );\n\n const decrypt = ciphertext => {\n assert(destroyed === false, \"state already destroyed\");\n\n return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);\n };\n\n function destroy() {\n assert(destroyed === false, \"state already destroyed\");\n destroyed = true;\n }\n\n return {\n decrypt,\n destroy\n };\n}\n\nconst CHUNK_SIZE = 8192;\n\nasync function encryptSecretstream(key, data, progress) {\n const { encrypt: crypt, destroy, header } = encrypt(key);\n const cryptedChunk =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max =\n Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n const sparkEncrypted = new SparkMD5.ArrayBuffer();\n const spark = new SparkMD5.ArrayBuffer();\n\n final.set(header);\n sparkEncrypted.append(header);\n let total = header.byteLength;\n progress?.({\n percent: total / max,\n total: max,\n current: total\n });\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, CHUNK_SIZE)) {\n spark.append(chunk);\n const tag =\n chunk.length < CHUNK_SIZE\n ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL\n : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;\n const crypted = crypt(tag, chunk);\n sparkEncrypted.append(crypted);\n final.set(crypted, total);\n total += crypted.byteLength;\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return {\n data: final.slice(0, total),\n md5Encrypted: sparkEncrypted.end(),\n md5: spark.end()\n };\n}\n\nasync function decryptSecretstream(key, data, progress) {\n const header = data.slice(\n 0,\n sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES\n );\n data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);\n\n const { decrypt: decryptt, destroy } = decrypt(header, key);\n const chunkSize =\n CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;\n const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;\n\n progress?.({\n percent: 0,\n total: max,\n current: 0\n });\n const final = new Uint8Array(max);\n let total = 0;\n let lastPercent = total / max;\n\n for (const chunk of chunks(data, chunkSize)) {\n const tmp = decryptt(chunk);\n final.set(tmp.message, total);\n total += tmp.message.byteLength;\n\n const percent = total / max;\n if (percent > lastPercent + 0.01) {\n progress?.({\n percent,\n total: max,\n current: total\n });\n lastPercent = percent;\n }\n }\n\n destroy();\n progress?.({\n percent: 1,\n total,\n current: total\n });\n return final.slice(0, total);\n}\n\nself.onmessage = async ({ data }) => {\n switch (data.event) {\n case \"encrypt\": {\n postMessage({ event: \"working\" })\n postMessage({\n event: \"encrypt-result\",\n data: await encryptSecretstream(data.key, data.data, progress => postMessage({\n event: \"encrypt-progress\",\n data: progress\n }))\n });\n postMessage({ event: \"ready\" })\n break;\n }\n case \"decrypt\": {\n postMessage({ event: \"working\" })\n postMessage({\n event: \"decrypt-result\",\n data: await decryptSecretstream(data.key, data.data, progress => postMessage({\n event: \"decrypt-progress\",\n data: progress\n }))\n });\n postMessage({ event: \"ready\" })\n break;\n }\n }\n}`;\n\nexport const workerMd5Script = `importScripts('https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.0/spark-md5.min.js');\n\nfunction* chunks(arr, n) {\n for (let i = 0; i < arr.length; i += n) {\n yield arr.slice(i, i + n);\n }\n}\n\nconst CHUNK_SIZE = 8192;\n\nfunction md5(data) {\n const spark = new SparkMD5.ArrayBuffer();\n for (const chunk of chunks(data, CHUNK_SIZE)) {\n spark.append(chunk);\n }\n return spark.end();\n}\n\n\nself.onmessage = ({ data }) => {\n switch (data.event) {\n case \"md5\": {\n postMessage({\n event: \"md5-result\",\n data: md5(data.data)\n });\n break;\n }\n }\n}`;\n","import { workerMd5Script } from \"./workerCodes.js\";\n\nexport async function md5(data: Uint8Array): Promise<string> {\n return new Promise((resolve, reject) => {\n const worker = new Worker(\n URL.createObjectURL(\n new Blob([workerMd5Script], { type: \"text/javascript\" })\n )\n );\n worker.addEventListener(\"error\", reject);\n worker.addEventListener(\"messageerror\", reject);\n\n worker.addEventListener(\"message\", ({ data }) => {\n if (data.event === \"md5-result\") {\n worker.terminate();\n return resolve(data.data);\n }\n });\n\n worker.postMessage({\n event: \"md5\",\n data\n });\n });\n}\n","import type { EncryptedFile, Progress } from \"../crypto/file.js\";\nimport { workerSodiumScript } from \"./workerCodes.js\";\n\n// const ensureNonDetachedUniqueBuffers = (\n// values: Transferable[]\n// ): Set<Transferable> =>\n// new Set(\n// values.filter(v => {\n// if (v instanceof ArrayBuffer) {\n// return v.byteLength === 0;\n// } else {\n// return true;\n// }\n// })\n// );\n\nexport async function encrypt(\n key: Uint8Array,\n dataToEncrypt: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n signal?: AbortSignal\n): Promise<EncryptedFile> {\n return new Promise((resolve, reject) => {\n progress?.({\n current: 0,\n percent: 0,\n total: dataToEncrypt.byteLength\n });\n const worker = new Worker(\n URL.createObjectURL(\n new Blob([workerSodiumScript], { type: \"text/javascript\" })\n )\n );\n worker.addEventListener(\"error\", reject);\n worker.addEventListener(\"messageerror\", reject);\n worker.addEventListener(\"message\", ({ data }) => {\n switch (data.event) {\n case \"ready\": {\n const postData = {\n event: \"encrypt\",\n data: dataToEncrypt,\n key\n };\n worker.postMessage(\n postData,\n [postData.data.buffer]\n // // @ts-expect-error - Typescript expects the transfer list to be an Array, but it can actually be any iterable.\n // ensureNonDetachedUniqueBuffers([postData.data.buffer])\n );\n break;\n }\n case \"encrypt-progress\": {\n if (signal?.aborted) {\n const abortError = new Error(\"Aborted\");\n abortError.name = \"AbortError\";\n worker.terminate();\n reject(abortError);\n }\n progress?.(data.data);\n break;\n }\n case \"encrypt-result\": {\n worker.terminate();\n return resolve(data.data);\n }\n }\n });\n });\n}\n\nexport async function decrypt(\n key: Uint8Array,\n dataToDecrypt: Uint8Array,\n progress?: (progress: Progress) => Promise<void>,\n signal?: AbortSignal\n): Promise<Uint8Array> {\n return new Promise((resolve, reject) => {\n progress?.({\n current: 0,\n percent: 0,\n total: dataToDecrypt.byteLength\n });\n const worker = new Worker(\n URL.createObjectURL(\n new Blob([workerSodiumScript], { type: \"text/javascript\" })\n )\n );\n worker.addEventListener(\"error\", reject);\n worker.addEventListener(\"messageerror\", reject);\n\n worker.addEventListener(\"message\", ({ data }) => {\n switch (data.event) {\n case \"ready\": {\n const postData = {\n event: \"decrypt\",\n key,\n data: dataToDecrypt\n };\n worker.postMessage(\n postData,\n [postData.data.buffer]\n // // @ts-expect-error - Typescript expects the transfer list to be an Array, but it can actually be any iterable.\n // ensureNonDetachedUniqueBuffers([postData.data.buffer])\n );\n break;\n }\n case \"decrypt-progress\": {\n if (signal?.aborted) {\n const abortError = new Error(\"Aborted\");\n abortError.name = \"AbortError\";\n worker.terminate();\n reject(abortError);\n }\n progress?.(data.data);\n break;\n }\n case \"decrypt-result\": {\n worker.terminate();\n return resolve(data.data);\n }\n }\n });\n });\n}\n","export const gqlFileQuery = {\n id: true,\n size: true,\n sizeBefore: true,\n createdAt: true,\n md5: true,\n md5Encrypted: true,\n user: {\n key: true,\n userApp: {\n keyPair: {\n pub: true\n }\n }\n }\n} as const;\n\nexport const gqlVFileQuery = {\n id: true,\n filename: true,\n createdBy: {\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n }\n },\n userApps: {\n rights: true,\n isRoot: true,\n userApp: {\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n }\n }\n },\n userApp: {\n userApp: {\n user: {\n id: true\n }\n },\n nameKey: true,\n rights: true,\n isRoot: true\n },\n isFavorite: true,\n createdAt: true,\n deletedAt: true,\n updatedAt: true,\n current: {\n ...gqlFileQuery\n },\n history: {\n ...gqlFileQuery\n }\n} as const;\n\nexport const gqlFolderQuery = {\n id: true,\n isFavorite: true,\n createdAt: true,\n deletedAt: true,\n updatedAt: true,\n name: true,\n createdBy: {\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n }\n },\n userApps: {\n rights: true,\n isRoot: true,\n userApp: {\n user: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n }\n }\n },\n userApp: {\n userApp: {\n user: {\n id: true\n }\n },\n nameKey: true,\n rights: true,\n isRoot: true\n },\n breadcrumb: {\n id: true,\n name: true,\n nameKey: true,\n pubKey: true\n }\n} as const;\n\nexport const gqlFolderFullQuery = {\n ...gqlFolderQuery,\n vFiles: {\n ...gqlVFileQuery\n },\n parentFolder: gqlFolderQuery,\n subfolders: gqlFolderQuery\n} as const;\n\nexport const gqlVFileWithFolderQuery = {\n ...gqlVFileQuery,\n folder: {\n ...gqlFolderQuery\n }\n} as const;\n\nexport const gqlMailQuery = {\n id: true,\n type: true,\n body: true,\n subject: true,\n openedAt: true,\n createdAt: true,\n deletedAt: true,\n recipients: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n recipient: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n sender: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n mailIntegrity: {\n temporaryRecipients: {\n email: true\n },\n recipients: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n id: true,\n hash: true,\n hashKey: true,\n replyTo: {\n id: true\n }\n },\n mailIntegrityDraft: {\n temporaryRecipients: {\n email: true\n },\n recipients: {\n id: true,\n firstname: true,\n lastname: true,\n email: true,\n publicKey: true\n },\n id: true,\n hash: true,\n hashKey: true,\n replyTo: {\n id: true\n }\n },\n files: {\n fileKey: true,\n filename: true,\n file: {\n id: true\n }\n }\n} as const;\n","import type { KeyPair } from \"../../crypto/index.js\";\nimport type { InternalMail, Mail } from \"../types/index.js\";\nimport { sodium, decryptCryptoBox } from \"../../index.js\";\n\nexport function convertInternalMailToExternal(\n data: InternalMail,\n keys: KeyPair\n): Mail | null {\n if (data.mailIntegrityDraft) {\n data.type = \"draft\";\n }\n\n const mI =\n data.type === \"draft\" ? data.mailIntegrityDraft : data.mailIntegrity;\n\n if (!mI) {\n return null;\n }\n\n const pubKey =\n data.type === \"received\" ? data.sender.publicKey : keys.publicKey;\n\n const body = sodium.to_string(\n decryptCryptoBox(sodium.from_hex(data.body), pubKey, keys.privateKey)\n );\n\n const subject = sodium.to_string(\n decryptCryptoBox(sodium.from_hex(data.subject), pubKey, keys.privateKey)\n );\n\n const hash = sodium.crypto_generichash(\n sodium.crypto_generichash_BYTES,\n JSON.stringify({ body, subject }),\n mI.hashKey,\n \"hex\"\n );\n\n return {\n type: data.type,\n id: data.id,\n mailIntegrityId: mI.id,\n replyTo: mI.replyTo?.id,\n body,\n subject,\n createdAt: new Date(data.createdAt),\n deletedAt: data.deletedAt ? new Date(data.deletedAt) : null,\n openedAt: data.openedAt ? new Date(data.openedAt) : null,\n isAltered: hash !== mI.hash,\n temporaryRecipients: mI.temporaryRecipients,\n recipients: data.type === \"draft\" ? mI.recipients : data.recipients,\n sender: data.sender,\n files: data.files.map(f => {\n const name = sodium.to_string(\n decryptCryptoBox(sodium.from_hex(f.filename), pubKey, keys.privateKey)\n );\n\n return {\n id: f.file.id,\n name,\n key: f.fileKey\n };\n })\n };\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport type {\n PlanKind,\n SecrecyEnv,\n SuccessResponse,\n User\n} from \"../../index.js\";\nimport { storeBuddy } from \"../../utils/store-buddy.js\";\nimport { BaseClient } from \"../../BaseClient.js\";\nimport type { ErrorAccessDenied } from \"../../error.js\";\n\n/* TODO\n- query pour lister les users avec pagination et input optionnel \"search\" et boolean pour filtrer les bans\n- mutation changer le plan d'un user (sans payer du coup)\n- query pour renvoyer les apps d'un user\n- query pour donner les limites d'un user\n- query pour donner les reports d'un user\n- mutation pour ban un user\n- query pour get les bans d'un user\n- mutation pour delete un user (déjà existant?)\n- mutation changer le role du user (user/admin)\n- mutation pour déco une ou des sessions meta ou app d'un user\n- query afficher les sessions meta ou app d'un user\n- query pour afficher des infos sur le cloud d'un user\n- mutation pour delete, restore, delete trash, dans le cloud d'un user\n- query pour afficher les infos sur les mails d'un user\n- mutation pour delete, restore, delete trash, dans les mails d'un user\n- query pour afficher les limites max et actuels d'un user\n- query de stats?\n*/\n\nexport type UserAdminPanel = User<{ withPublicKey: false }>;\nconst userSelector = {\n id: true,\n firstname: true,\n lastname: true,\n lang: true,\n email: true,\n phone: true,\n role: true,\n deletedAt: true,\n lastLogin: true\n} as const;\n\nexport class AdminSecrecyClient extends BaseClient {\n async userList(\n search?: string | null | undefined\n ): Promise<SuccessResponse<UserAdminPanel[]> | ErrorAccessDenied | null> {\n const { userList } = await this.client(\"query\")({\n userList: [\n {\n search\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UserListResponse\": {\n __typename: true,\n userList: userSelector\n }\n }\n ]\n });\n\n if (!userList) {\n return null;\n }\n\n if (userList.__typename === \"ErrorAccessDenied\") {\n return userList;\n }\n\n const result = userList.userList.map(user => ({\n ...user,\n lastLogin: new Date(user.lastLogin),\n deletedAt: user.deletedAt ? new Date(user.deletedAt) : null\n }));\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async changeUserPlan(\n userId: string,\n plan: PlanKind\n ): Promise<SuccessResponse<UserAdminPanel> | ErrorAccessDenied | null> {\n const { changeUserPlan } = await this.client(\"mutation\")({\n changeUserPlan: [\n {\n userId,\n plan\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ChangeUserPlanResponse\": {\n __typename: true,\n changeUserPlan: userSelector\n }\n }\n ]\n });\n\n if (!changeUserPlan) {\n return null;\n }\n\n if (changeUserPlan.__typename === \"ErrorAccessDenied\") {\n return changeUserPlan;\n }\n\n if (!changeUserPlan.changeUserPlan) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: {\n deletedAt: changeUserPlan.changeUserPlan.deletedAt\n ? new Date(changeUserPlan.changeUserPlan.deletedAt)\n : null,\n lastLogin: new Date(changeUserPlan.changeUserPlan.lastLogin),\n email: changeUserPlan.changeUserPlan.email,\n firstname: changeUserPlan.changeUserPlan.firstname,\n id: changeUserPlan.changeUserPlan.id,\n lang: changeUserPlan.changeUserPlan.lang,\n lastname: changeUserPlan.changeUserPlan.lastname,\n phone: changeUserPlan.changeUserPlan.phone,\n role: changeUserPlan.changeUserPlan.role\n }\n };\n }\n}\n\nexport function getSecrecyAdminClient(\n env: SecrecyEnv,\n session?: boolean | undefined\n): AdminSecrecyClient | null {\n const userSession = storeBuddy<string>(`secrecy.user_session`, session).init(\n \"\"\n );\n const uaSession = userSession.load();\n if (uaSession === \"\") {\n return null;\n }\n\n return new AdminSecrecyClient(uaSession, env);\n}\n","import type { Rights } from \"../../zeus/index.js\";\nimport type { PublicUser } from \"./index.js\";\nimport type { VFile, GQLVFile, InternalVFile } from \"./VFile.js\";\n\nexport type FoldersOnUsersOnApplications<\n T extends Record<string, unknown> = Record<string, unknown>\n> = T & {\n rights: Rights;\n isRoot: boolean;\n userApp: {\n user: {\n id: string;\n };\n };\n};\n\nexport type FolderBreadcrumbItem = {\n id: string;\n name: string;\n pubKey: string;\n};\n\ntype NameKey = {\n nameKey?: string;\n};\n\nexport type InternalFolderBreadcrumbItem = FolderBreadcrumbItem & NameKey;\n\nexport type Folder<\n T extends FolderBreadcrumbItem = FolderBreadcrumbItem,\n U extends Record<string, unknown> = Record<string, unknown>\n> = {\n id: string;\n isFavorite: boolean;\n createdAt: Date;\n deletedAt: Date | null;\n updatedAt: Date;\n name: string;\n breadcrumb: T[];\n createdBy: PublicUser;\n userApp?: FoldersOnUsersOnApplications<U>;\n users: [PublicUser, Rights][];\n};\n\nexport type FolderFull<\n T extends FolderBreadcrumbItem = FolderBreadcrumbItem,\n U extends Record<string, unknown> = Record<string, unknown>,\n V extends Record<string, unknown> = VFile\n> = Folder<T, U> & {\n vFiles: V[];\n parentFolder: Folder<T, U> | null;\n subfolders: Folder<T, U>[];\n};\n\nexport type InternalFolder = Folder<InternalFolderBreadcrumbItem, NameKey>;\n\nexport type InternalFolderFull = FolderFull<\n InternalFolderBreadcrumbItem,\n NameKey,\n InternalVFile\n>;\n\nexport type GQLFolder = {\n id: string;\n isFavorite: boolean;\n createdAt: string;\n deletedAt?: string;\n updatedAt: string;\n name: string;\n userApp?: FoldersOnUsersOnApplications<NameKey>;\n createdBy: {\n user: PublicUser;\n };\n userApps: {\n rights: Rights;\n isRoot: boolean;\n userApp: {\n user: PublicUser;\n };\n }[];\n breadcrumb: InternalFolderBreadcrumbItem[];\n};\n\nexport type GQLFolderFull = GQLFolder & {\n vFiles: GQLVFile[];\n parentFolder?: GQLFolder;\n subfolders: GQLFolder[];\n};\n\nexport function isFolder(obj: Folder | VFile): obj is Folder {\n return \"breadcrumb\" in obj;\n}\n\nexport function isFolderFull(\n obj: InternalFolder | InternalFolderFull\n): obj is FolderFull {\n return \"parentFolder\" in obj && \"subfolders\" in obj && \"vFiles\" in obj;\n}\n","import type { Folder, GQLFolder, InternalFolder } from \"./Folder.js\";\nimport type { File, GQLFile, InternalFile } from \"./File.js\";\nimport type { PublicUser } from \"./index.js\";\nimport type { Rights } from \"../../zeus/index.js\";\n\nexport type VFile<\n T extends File = File,\n U extends Record<string, unknown> = Record<string, unknown>\n> = {\n id: string;\n isFavorite: boolean;\n createdAt: Date;\n updatedAt: Date;\n deletedAt: Date | null;\n filename: string;\n current: T;\n history: T[];\n createdBy: PublicUser;\n userApp: VFilesOnUsersOnApplications<U>;\n users: [PublicUser, Rights][];\n};\n\nexport type VFileWithFolder<T extends File = File> = VFile<T> & {\n folder: Folder;\n};\n\nexport type VFilesOnUsersOnApplications<\n T extends Record<string, unknown> = Record<string, unknown>\n> = T & {\n rights: Rights;\n isRoot: boolean;\n userApp: {\n user: {\n id: string;\n };\n };\n};\n\ntype NameKey = {\n nameKey: string;\n};\n\nexport type InternalVFile = VFile<InternalFile, NameKey>;\n\nexport type InternalVFileWithFolder = InternalVFile & {\n folder: InternalFolder;\n};\n\nexport type GQLVFile = {\n id: string;\n isFavorite: boolean;\n createdAt: string;\n updatedAt: string;\n deletedAt?: string;\n filename: string;\n createdBy: {\n user: PublicUser;\n };\n userApps: {\n rights: Rights;\n isRoot: boolean;\n userApp: {\n user: PublicUser;\n };\n }[];\n userApp?: VFilesOnUsersOnApplications<NameKey>;\n current?: GQLFile;\n history: GQLFile[];\n};\n\nexport type GQLVFileWithFolder = GQLVFile & {\n folder: GQLFolder;\n};\n\nexport function isVFile(obj: Folder | VFile): obj is VFile {\n return \"history\" in obj && \"filename\" in obj;\n}\n","/**\n * TS Rewrite of https://github.com/enhancv/popup-tools\n */\n\ntype YesNo = \"yes\" | \"no\";\ntype Options = {\n width?: number;\n height?: number;\n menubar: YesNo;\n resizable: YesNo;\n location: YesNo;\n scrollbars: YesNo;\n centered?: boolean;\n left?: number;\n top?: number;\n};\n\nconst defaultOptions: Options = {\n width: 700,\n height: 520,\n menubar: \"no\",\n resizable: \"yes\",\n location: \"yes\",\n scrollbars: \"no\",\n centered: true\n};\n\ntype Callback = (err?: Error, data?: unknown) => void;\n\ntype WindowOpen = (\n popupUrl: string,\n popupName: string,\n optionsString: string\n) => Window | null;\n\nlet popupCount = 1;\n\n/**\n * Return options converted to a string\n *\n * @param {Object} options\n * @return {String}\n */\nfunction optionsToString<T extends Options>(options: T): string {\n return Object.entries(options)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n}\n\n/**\n * Get a unique name on each call\n * @return {String}\n */\nfunction defaultPopupName(): string {\n popupCount += 1;\n return `Popup ${popupCount}`;\n}\n\n/**\n * Convert \"centered: true\" key into concrete left and top arguments\n * Both can be overwritten\n *\n * @param {Object} options\n * @return {Object}\n */\nfunction optionsResolveCentered(options: Options): Options {\n if (!options.width || !options.height) {\n throw new Error(\"Should have width and height\");\n }\n const result = { ...options };\n const width = window.outerWidth - options.width;\n const height = window.outerHeight - options.height;\n\n if (options.centered) {\n result.left = options.left || Math.round(window.screenX + width / 2);\n result.top = options.top || Math.round(window.screenY + height / 2.5);\n delete result.centered;\n }\n return result;\n}\n\n/**\n * Create a form element, add hidden inputs for all the post data\n * and post it into a newly opened popup\n *\n * @param {String} url\n * @param {Object} postData\n * @param {String} name\n * @param {Object} options\n * @return {Object}\n */\nfunction openPopupWithPost(\n url: string,\n postData: Record<string, string>,\n name: string,\n options: string\n): Window | null {\n const form = document.createElement(\"form\");\n let win: Window | null = null;\n\n form.setAttribute(\"method\", \"post\");\n form.setAttribute(\"action\", url);\n form.setAttribute(\"target\", name);\n\n Object.keys(postData).forEach(function addFormItem(key) {\n const input = document.createElement(\"input\");\n input.type = \"hidden\";\n input.name = key;\n input.value = postData[key];\n form.appendChild(input);\n });\n\n document.body.appendChild(form);\n\n win = window.open(\"/\", name, options);\n win?.document.write(\"Loading...\");\n\n form.submit();\n document.body.removeChild(form);\n\n return win;\n}\n\n/**\n * Open a popup using the first argument. Wait for it to close.\n * Returns the window object\n *\n * @param {Function}\n * @param {String}\n * @param {String}\n * @param {Object}\n * @param {Function}\n * @return {Object}\n */\nfunction popupExecute(\n execute: WindowOpen,\n url: string,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n const popupName = name || defaultPopupName();\n const popupOptions = optionsResolveCentered(\n Object.assign({}, defaultOptions, options)\n );\n const popupCallback =\n callback ||\n function noop(): void {\n //\n };\n const optionsString = optionsToString(popupOptions);\n const win = execute(url, popupName, optionsString);\n let isMessageSent = false;\n let interval: number;\n\n function popupCallbackOnce(err?: Error, data?: unknown): void {\n if (!isMessageSent) {\n isMessageSent = true;\n popupCallback(err, data);\n }\n }\n\n function onMessage(message?: MessageEvent): void {\n const data = message ? message.data : undefined;\n\n if (data) {\n popupCallbackOnce(undefined, data);\n window.removeEventListener(\"message\", onMessage);\n }\n }\n\n window.addEventListener(\"message\", onMessage, false);\n\n if (win) {\n interval = window.setInterval(function closePopupCallback() {\n if (win === null || win.closed) {\n setTimeout(function delayWindowClosing() {\n clearInterval(interval);\n popupCallbackOnce(new Error(\"Popup closed\"));\n }, 500);\n }\n }, 100);\n } else {\n popupCallbackOnce(new Error(\"Popup blocked\"));\n }\n\n return win;\n}\n\n/**\n * Open a popup using the first argument.\n * Wait for it to close and call the callback.\n * Set the options string using the options object\n * Returns the window object\n *\n * @param {String} url\n * @param {String} name\n * @param {Object} options\n * @param {Function} callback\n * @return {Object}\n */\nexport function popup(\n url: string,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n return popupExecute(window.open, url, name, options, callback);\n}\n\n/**\n * Open a popup using the first argument.\n * Post the data into the open popup.\n * Wait for it to close and call the callback.\n * Set the options string using the options object\n * Returns the window object\n *\n * @param {String} url\n * @param {Object} postData\n * @param {String} name\n * @param {Object} options\n * @param {Function} callback\n * @return {Object}\n */\nexport function popupWithPost(\n url: string,\n postData: Record<string, string>,\n name: string,\n options: Partial<Options>,\n callback: Callback\n): Window | null {\n function openWithPostData(\n popupUrl: string,\n popupName: string,\n optionsString: string\n ): Window | null {\n return openPopupWithPost(popupUrl, postData, popupName, optionsString);\n }\n\n return popupExecute(openWithPostData, url, name, options, callback);\n}\n\n/**\n * Return html that when executed, will trigger the popup to callback with a response\n *\n * @param {Object}\n * @return {String}\n */\nexport function popupResponse<T>(data: T): string {\n const jsonData = JSON.stringify(data);\n\n return `<script>window.opener.postMessage(${jsonData}, \"*\");setTimeout(function() { window.close(); }, 50);</script>`;\n}\n","import { SecrecyClient } from \"./index.js\";\nimport { popup } from \"../PopupTools.js\";\nimport type { SecrecyUserApp } from \"./types/index.js\";\nimport { getStorage } from \"./storage.js\";\n\nexport function parseInfos(): SecrecyUserApp | null {\n if (!window.location.hash) {\n return null;\n }\n const hash = window.location.hash.substr(1);\n try {\n const res = JSON.parse(atob(hash));\n window.location.hash = \"\";\n // TODO Add object content validation\n return res;\n } catch {\n return null;\n }\n}\n\nexport type HashInfos = {\n appUrl: string;\n backPath?: string;\n appCode?: string | null | undefined;\n path?: string | null | undefined;\n redirect?: boolean;\n scopes?: {\n email: boolean;\n };\n};\nexport type SecrecyEnv = \"dev\" | \"prod\";\nexport type UseSecrecyParams = Omit<HashInfos, \"appUrl\"> & {\n env: SecrecyEnv;\n session?: boolean | undefined;\n};\n\nexport type Value<T extends UseSecrecyParams> = T extends { redirect: true }\n ? SecrecyClient | null\n : SecrecyClient;\n\nexport function getSecrecyClient(\n env: SecrecyEnv,\n session?: boolean | undefined\n): SecrecyClient | null {\n const storage = getStorage(session);\n const uaSession = storage.userAppSession.load();\n const uaKeys = storage.userAppKeys.load();\n const uaJwt = storage.jwt.load();\n if (!uaSession || !uaKeys || !uaJwt) {\n const infos = parseInfos();\n if (infos) {\n storage.userAppKeys.save(infos.keys);\n storage.userAppSession.save(infos.uaSession);\n storage.jwt.save(infos.jwt);\n return new SecrecyClient(infos.uaSession, infos.keys, infos.jwt, env);\n }\n return null;\n }\n\n return new SecrecyClient(uaSession, uaKeys, uaJwt, env);\n}\n\nexport function login<T extends UseSecrecyParams>(\n { appCode, path, redirect, scopes, backPath, env, session }: T = {} as T\n): Promise<Value<T>> {\n return new Promise((resolve, reject) => {\n const appUrl = window.location.origin;\n if (appCode && !appUrl.includes(\"localhost\")) {\n return reject(\"Can't use appCode if not in localhost\");\n }\n const client = getSecrecyClient(env);\n\n if (!client) {\n const infos: HashInfos = {\n appUrl,\n appCode,\n redirect,\n path,\n scopes,\n backPath\n };\n const data = btoa(JSON.stringify(infos)).replaceAll(\"=\", \"\");\n\n let envStr = \"\";\n if (env === \"dev\") {\n envStr = \"dev.\";\n }\n\n const lang = document.documentElement.lang;\n\n const url = `https://auth.${envStr}secrecy.me${\n lang ? `/${lang}` : \"\"\n }/login#${data}`;\n\n const validate = (infos: SecrecyUserApp): void => {\n const storage = getStorage(session);\n storage.userAppSession.save(infos.uaSession);\n storage.userAppKeys.save(infos.keys);\n storage.jwt.save(infos.jwt);\n return resolve(\n new SecrecyClient(\n infos.uaSession,\n infos.keys,\n infos.jwt,\n env\n ) as Value<T>\n );\n };\n\n if (redirect) {\n const infos = parseInfos();\n if (infos) {\n return validate(infos);\n } else {\n window.location.href = url;\n return resolve(null as Value<T>);\n }\n } else {\n popup(url, \"Secrecy Login\", {}, (err, data) => {\n if (err) {\n return reject(err);\n } else {\n const infos = data as SecrecyUserApp;\n if (infos) {\n return validate(infos);\n }\n }\n });\n }\n } else {\n return resolve(client as Value<T>);\n }\n });\n}\n"],"mappings":"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","names":[]}