@secrecy/lib 1.0.0-dev.67 → 1.0.0-dev.69

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 (196) hide show
  1. package/dist/index.cjs +257 -2
  2. package/dist/index.d.ts +5016 -18
  3. package/dist/index.js +257 -2
  4. package/package.json +5 -5
  5. package/dist/BaseClient-e5e97df7.d.ts +0 -351
  6. package/dist/BaseClient.cjs +0 -2
  7. package/dist/BaseClient.cjs.map +0 -1
  8. package/dist/BaseClient.d.ts +0 -16
  9. package/dist/BaseClient.js +0 -2
  10. package/dist/BaseClient.js.map +0 -1
  11. package/dist/PopupTools.cjs +0 -2
  12. package/dist/PopupTools.cjs.map +0 -1
  13. package/dist/PopupTools.d.ts +0 -18
  14. package/dist/PopupTools.js +0 -2
  15. package/dist/PopupTools.js.map +0 -1
  16. package/dist/ZeusThunder.cjs +0 -2
  17. package/dist/ZeusThunder.cjs.map +0 -1
  18. package/dist/ZeusThunder.d.ts +0 -6
  19. package/dist/ZeusThunder.js +0 -2
  20. package/dist/ZeusThunder.js.map +0 -1
  21. package/dist/cache.cjs +0 -2
  22. package/dist/cache.cjs.map +0 -1
  23. package/dist/cache.d.ts +0 -24
  24. package/dist/cache.js +0 -2
  25. package/dist/cache.js.map +0 -1
  26. package/dist/chunk-5WPCTUWH.cjs +0 -2
  27. package/dist/chunk-5WPCTUWH.cjs.map +0 -1
  28. package/dist/chunk-KMTF2BZE.js +0 -2
  29. package/dist/chunk-KMTF2BZE.js.map +0 -1
  30. package/dist/client/SecrecyAppClient.cjs +0 -2
  31. package/dist/client/SecrecyAppClient.cjs.map +0 -1
  32. package/dist/client/SecrecyAppClient.d.ts +0 -16
  33. package/dist/client/SecrecyAppClient.js +0 -2
  34. package/dist/client/SecrecyAppClient.js.map +0 -1
  35. package/dist/client/SecrecyCloudClient.cjs +0 -2
  36. package/dist/client/SecrecyCloudClient.cjs.map +0 -1
  37. package/dist/client/SecrecyCloudClient.d.ts +0 -16
  38. package/dist/client/SecrecyCloudClient.js +0 -2
  39. package/dist/client/SecrecyCloudClient.js.map +0 -1
  40. package/dist/client/SecrecyDbClient.cjs +0 -2
  41. package/dist/client/SecrecyDbClient.cjs.map +0 -1
  42. package/dist/client/SecrecyDbClient.d.ts +0 -16
  43. package/dist/client/SecrecyDbClient.js +0 -2
  44. package/dist/client/SecrecyDbClient.js.map +0 -1
  45. package/dist/client/SecrecyMailClient.cjs +0 -2
  46. package/dist/client/SecrecyMailClient.cjs.map +0 -1
  47. package/dist/client/SecrecyMailClient.d.ts +0 -16
  48. package/dist/client/SecrecyMailClient.js +0 -2
  49. package/dist/client/SecrecyMailClient.js.map +0 -1
  50. package/dist/client/SecrecyPayClient.cjs +0 -2
  51. package/dist/client/SecrecyPayClient.cjs.map +0 -1
  52. package/dist/client/SecrecyPayClient.d.ts +0 -16
  53. package/dist/client/SecrecyPayClient.js +0 -2
  54. package/dist/client/SecrecyPayClient.js.map +0 -1
  55. package/dist/client/SecrecyWalletClient.cjs +0 -2
  56. package/dist/client/SecrecyWalletClient.cjs.map +0 -1
  57. package/dist/client/SecrecyWalletClient.d.ts +0 -16
  58. package/dist/client/SecrecyWalletClient.js +0 -2
  59. package/dist/client/SecrecyWalletClient.js.map +0 -1
  60. package/dist/client/convert/file.cjs +0 -2
  61. package/dist/client/convert/file.cjs.map +0 -1
  62. package/dist/client/convert/file.d.ts +0 -11
  63. package/dist/client/convert/file.js +0 -2
  64. package/dist/client/convert/file.js.map +0 -1
  65. package/dist/client/convert/mail.cjs +0 -2
  66. package/dist/client/convert/mail.cjs.map +0 -1
  67. package/dist/client/convert/mail.d.ts +0 -13
  68. package/dist/client/convert/mail.js +0 -2
  69. package/dist/client/convert/mail.js.map +0 -1
  70. package/dist/client/convert/node.cjs +0 -2
  71. package/dist/client/convert/node.cjs.map +0 -1
  72. package/dist/client/convert/node.d.ts +0 -18
  73. package/dist/client/convert/node.js +0 -2
  74. package/dist/client/convert/node.js.map +0 -1
  75. package/dist/client/helpers.cjs +0 -2
  76. package/dist/client/helpers.cjs.map +0 -1
  77. package/dist/client/helpers.d.ts +0 -16
  78. package/dist/client/helpers.js +0 -2
  79. package/dist/client/helpers.js.map +0 -1
  80. package/dist/client/index.cjs +0 -2
  81. package/dist/client/index.cjs.map +0 -1
  82. package/dist/client/index.d.ts +0 -16
  83. package/dist/client/index.js +0 -2
  84. package/dist/client/index.js.map +0 -1
  85. package/dist/client/storage.cjs +0 -2
  86. package/dist/client/storage.cjs.map +0 -1
  87. package/dist/client/storage.d.ts +0 -10
  88. package/dist/client/storage.js +0 -2
  89. package/dist/client/storage.js.map +0 -1
  90. package/dist/client/types/File.cjs +0 -1
  91. package/dist/client/types/File.cjs.map +0 -1
  92. package/dist/client/types/File.d.ts +0 -18
  93. package/dist/client/types/File.js +0 -1
  94. package/dist/client/types/File.js.map +0 -1
  95. package/dist/client/types/Inputs.cjs +0 -1
  96. package/dist/client/types/Inputs.cjs.map +0 -1
  97. package/dist/client/types/Inputs.d.ts +0 -18
  98. package/dist/client/types/Inputs.js +0 -1
  99. package/dist/client/types/Inputs.js.map +0 -1
  100. package/dist/client/types/Node.cjs +0 -1
  101. package/dist/client/types/Node.cjs.map +0 -1
  102. package/dist/client/types/Node.d.ts +0 -9
  103. package/dist/client/types/Node.js +0 -1
  104. package/dist/client/types/Node.js.map +0 -1
  105. package/dist/client/types/UserAppNotifications.cjs +0 -1
  106. package/dist/client/types/UserAppNotifications.cjs.map +0 -1
  107. package/dist/client/types/UserAppNotifications.d.ts +0 -8
  108. package/dist/client/types/UserAppNotifications.js +0 -1
  109. package/dist/client/types/UserAppNotifications.js.map +0 -1
  110. package/dist/client/types/UserAppSettings.cjs +0 -1
  111. package/dist/client/types/UserAppSettings.cjs.map +0 -1
  112. package/dist/client/types/UserAppSettings.d.ts +0 -7
  113. package/dist/client/types/UserAppSettings.js +0 -1
  114. package/dist/client/types/UserAppSettings.js.map +0 -1
  115. package/dist/client/types/index.cjs +0 -2
  116. package/dist/client/types/index.cjs.map +0 -1
  117. package/dist/client/types/index.d.ts +0 -176
  118. package/dist/client/types/index.js +0 -2
  119. package/dist/client/types/index.js.map +0 -1
  120. package/dist/client/types/selectors.cjs +0 -2
  121. package/dist/client/types/selectors.cjs.map +0 -1
  122. package/dist/client/types/selectors.d.ts +0 -402
  123. package/dist/client/types/selectors.js +0 -2
  124. package/dist/client/types/selectors.js.map +0 -1
  125. package/dist/crypto/file.cjs +0 -2
  126. package/dist/crypto/file.cjs.map +0 -1
  127. package/dist/crypto/file.d.ts +0 -16
  128. package/dist/crypto/file.js +0 -2
  129. package/dist/crypto/file.js.map +0 -1
  130. package/dist/crypto/index.cjs +0 -2
  131. package/dist/crypto/index.cjs.map +0 -1
  132. package/dist/crypto/index.d.ts +0 -14
  133. package/dist/crypto/index.js +0 -2
  134. package/dist/crypto/index.js.map +0 -1
  135. package/dist/error.cjs +0 -1
  136. package/dist/error.cjs.map +0 -1
  137. package/dist/error.d.ts +0 -35
  138. package/dist/error.js +0 -1
  139. package/dist/error.js.map +0 -1
  140. package/dist/index.cjs.map +0 -1
  141. package/dist/index.js.map +0 -1
  142. package/dist/minify/index.cjs +0 -2
  143. package/dist/minify/index.cjs.map +0 -1
  144. package/dist/minify/index.d.ts +0 -4
  145. package/dist/minify/index.js +0 -2
  146. package/dist/minify/index.js.map +0 -1
  147. package/dist/minify/lz4.cjs +0 -3
  148. package/dist/minify/lz4.cjs.map +0 -1
  149. package/dist/minify/lz4.d.ts +0 -7
  150. package/dist/minify/lz4.js +0 -3
  151. package/dist/minify/lz4.js.map +0 -1
  152. package/dist/sodium.cjs +0 -2
  153. package/dist/sodium.cjs.map +0 -1
  154. package/dist/sodium.d.ts +0 -5
  155. package/dist/sodium.js +0 -2
  156. package/dist/sodium.js.map +0 -1
  157. package/dist/utils/store-buddy.cjs +0 -2
  158. package/dist/utils/store-buddy.cjs.map +0 -1
  159. package/dist/utils/store-buddy.d.ts +0 -15
  160. package/dist/utils/store-buddy.js +0 -2
  161. package/dist/utils/store-buddy.js.map +0 -1
  162. package/dist/utils/time.cjs +0 -2
  163. package/dist/utils/time.cjs.map +0 -1
  164. package/dist/utils/time.d.ts +0 -12
  165. package/dist/utils/time.js +0 -2
  166. package/dist/utils/time.js.map +0 -1
  167. package/dist/utils/utils.cjs +0 -2
  168. package/dist/utils/utils.cjs.map +0 -1
  169. package/dist/utils/utils.d.ts +0 -6
  170. package/dist/utils/utils.js +0 -2
  171. package/dist/utils/utils.js.map +0 -1
  172. package/dist/worker/md5.cjs +0 -2
  173. package/dist/worker/md5.cjs.map +0 -1
  174. package/dist/worker/md5.d.ts +0 -3
  175. package/dist/worker/md5.js +0 -2
  176. package/dist/worker/md5.js.map +0 -1
  177. package/dist/worker/sodium.cjs +0 -2
  178. package/dist/worker/sodium.cjs.map +0 -1
  179. package/dist/worker/sodium.d.ts +0 -6
  180. package/dist/worker/sodium.js +0 -2
  181. package/dist/worker/sodium.js.map +0 -1
  182. package/dist/worker/workerCodes.cjs +0 -254
  183. package/dist/worker/workerCodes.cjs.map +0 -1
  184. package/dist/worker/workerCodes.d.ts +0 -4
  185. package/dist/worker/workerCodes.js +0 -254
  186. package/dist/worker/workerCodes.js.map +0 -1
  187. package/dist/zeus/const.cjs +0 -2
  188. package/dist/zeus/const.cjs.map +0 -1
  189. package/dist/zeus/const.d.ts +0 -9
  190. package/dist/zeus/const.js +0 -2
  191. package/dist/zeus/const.js.map +0 -1
  192. package/dist/zeus/index.cjs +0 -5
  193. package/dist/zeus/index.cjs.map +0 -1
  194. package/dist/zeus/index.d.ts +0 -8218
  195. package/dist/zeus/index.js +0 -5
  196. package/dist/zeus/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyCloudClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { AxiosProgressEvent } from \"axios\";\nimport axios from \"axios\";\nimport ky from \"ky\";\nimport type {\n DownloadProgress,\n ProgressCallback,\n SecrecyClient,\n SuccessResponse\n} from \"../index.js\";\nimport { encryptName } from \"../index.js\";\nimport { nodesCache, filesCache } from \"../cache.js\";\nimport { secretstreamKeygen } from \"../crypto/file.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport { decryptCryptoBox } from \"../crypto/index.js\";\nimport { encryptCryptoBox } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorLimit,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport { compress, uncompress } from \"../minify/index.js\";\nimport { sodium } from \"../sodium.js\";\nimport {\n enumerate,\n chunks,\n promiseAllLimit,\n concatenate\n} from \"../utils/utils.js\";\nimport { md5 } from \"../worker/md5.js\";\nimport { decrypt, encrypt } from \"../worker/sodium.js\";\nimport type { NodeType, Rights, Thunder } from \"../zeus/index.js\";\nimport { gqlFileToExternal } from \"./convert/file.js\";\nimport {\n gqlNodeFullToInternalFull,\n gqlNodeToExternal,\n gqlNodeToExternalNodeFull,\n internalNodeToNode\n} from \"./convert/node.js\";\nimport type {\n FileContentPart,\n FileMetadata,\n FilePartResponse,\n NameKeyInput,\n Node,\n NodeFull,\n ShareFileInHistoryInput,\n ShareNodesInput\n} from \"./types/index.js\";\nimport {\n fileSelector,\n nodeFullSelector,\n nodeSelector\n} from \"./types/selectors.js\";\n// import { md5 } from \"../worker/index.js\";\n// import { firstValueFrom, of } from \"rxjs\";\n\nexport class SecrecyCloudClient {\n #client: SecrecyClient;\n\n #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async addFileToHistory({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<Node> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { addFileToHistory } = await this.#thunder(\"mutation\")({\n addFileToHistory: [\n {\n fileId,\n nodeId\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: nodeFullSelector\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 node = await gqlNodeFullToInternalFull(\n addFileToHistory.addFileToHistory,\n this.#keys\n );\n const file = node.history.find(f => f.id === fileId);\n if (file) {\n const users = node.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 sodium.from_hex(file.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n }))\n };\n\n await this.#thunder(\"mutation\")({\n shareFileInHistory: [\n { input, nodeId },\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 = internalNodeToNode(node);\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.#thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\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.#thunder(\"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.#thunder(\"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, AxiosProgressEvent> = {};\n const onProgress = (\n part: number,\n progressEvent: AxiosProgressEvent\n ): 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 nodeId,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n name: string;\n nodeId?: string;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<NodeFull>\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 nodeId\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 === \"ErrorLimit\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\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 deletedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { deletedNodes } = await this.#thunder(\"query\")({\n deletedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedNodesResponse\": {\n __typename: true,\n deletedNodes: nodeSelector\n }\n }\n });\n\n if (!deletedNodes) {\n return null;\n }\n\n if (deletedNodes.__typename === \"ErrorAccessDenied\") {\n return deletedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const node of deletedNodes.deletedNodes) {\n nodes.push(await gqlNodeToExternal(node, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async sharedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { sharedNodes } = await this.#thunder(\"query\")({\n sharedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on SharedNodesResponse\": {\n __typename: true,\n sharedNodes: nodeSelector\n }\n }\n });\n\n if (!sharedNodes) {\n return null;\n }\n\n if (sharedNodes.__typename === \"ErrorAccessDenied\") {\n return sharedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of sharedNodes.sharedNodes) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async nodesSharedWithMe(\n type?: NodeType | null | undefined\n ): Promise<SuccessResponse<Node[]> | ErrorAccessDenied | null> {\n const { nodesSharedWithMe } = await this.#thunder(\"query\")({\n nodesSharedWithMe: [\n {\n type\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodesSharedWithMeResponse\": {\n __typename: true,\n nodesSharedWithMe: nodeSelector\n }\n }\n ]\n });\n\n if (!nodesSharedWithMe) {\n return null;\n }\n\n if (nodesSharedWithMe.__typename === \"ErrorAccessDenied\") {\n return nodesSharedWithMe;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of nodesSharedWithMe.nodesSharedWithMe) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async deleteNodeSharing({\n nodeId,\n userId\n }: {\n nodeId: string;\n userId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeSharing } = await this.#thunder(\"mutation\")({\n deleteNodeSharing: [\n {\n nodeId,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeSharingResponse\": {\n __typename: true,\n deleteNodeSharing: true\n }\n }\n ]\n });\n\n if (!deleteNodeSharing) {\n return null;\n }\n\n if (deleteNodeSharing.__typename === \"ErrorAccessDenied\") {\n return deleteNodeSharing;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeSharing.deleteNodeSharing\n };\n }\n\n async duplicateNode({\n nodeId,\n folderId,\n customName\n }: {\n nodeId: string;\n folderId?: string | null | undefined;\n customName?: string | null | undefined;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw new Error(`Node (${nodeId}) does not exists`);\n }\n }\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n customName = customName\n ? await encryptName(customName, node.access.nameKey)\n : null;\n\n const { duplicateNode } = await this.#thunder(\"mutation\")({\n duplicateNode: [\n {\n nodeId,\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 DuplicateNodeResponse\": {\n __typename: true,\n duplicateNode: true\n }\n }\n ]\n });\n\n if (!duplicateNode) {\n return null;\n }\n\n if (duplicateNode.__typename === \"ErrorAccessDenied\") {\n return duplicateNode;\n }\n\n if (duplicateNode.__typename === \"ErrorNotFound\") {\n return duplicateNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: duplicateNode.duplicateNode\n };\n }\n\n async deleteNodeCloudTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeCloudTrash } = await this.#thunder(\"mutation\")({\n deleteNodeCloudTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeCloudTrashResponse\": {\n __typename: true,\n deleteNodeCloudTrash: true\n }\n }\n ]\n });\n\n if (!deleteNodeCloudTrash) {\n return null;\n }\n\n if (deleteNodeCloudTrash.__typename === \"ErrorAccessDenied\") {\n return deleteNodeCloudTrash;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeCloudTrash.deleteNodeCloudTrash ?? false\n };\n }\n\n async createFolder({\n name,\n parentFolderId\n }: {\n name: string;\n parentFolderId?: string | null;\n }): Promise<\n SuccessResponse<NodeFull> | 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.#thunder(\"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: nodeFullSelector\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 gqlNodeToExternalNodeFull(\n createFolder.createFolder,\n this.#keys\n );\n\n const users =\n folder.parent?.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.shareNode({\n nodeId: 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 node({\n id,\n deleted\n }: {\n id?: string | null | undefined;\n deleted?: boolean | null | undefined;\n } = {}): Promise<SuccessResponse<NodeFull> | ErrorAccessDenied | null> {\n const { node } = await this.#thunder(\"query\")({\n node: [\n { deleted, id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodeResponse\": {\n __typename: true,\n node: nodeFullSelector\n }\n }\n ]\n });\n if (!node) {\n return null;\n }\n\n if (node.__typename === \"ErrorAccessDenied\") {\n return node;\n }\n if (!node.node) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(node.node, this.#keys);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileMetadata({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<FileMetadata> | ErrorAccessDenied | null> {\n const { file } = await this.#thunder(\"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: fileSelector\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 shareNode({\n nodeId,\n userId,\n rights\n }: {\n nodeId: string;\n userId: string;\n rights: Rights;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const user = await this.#client.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 { shareNode } = await this.#thunder(\"mutation\")({\n shareNode: [\n { nodeId, userId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeResponse\": {\n __typename: true,\n nodes: true\n }\n }\n ]\n });\n\n if (!shareNode) {\n return null;\n }\n\n if (shareNode.__typename === \"ErrorAccessDenied\") {\n return shareNode;\n }\n\n if (shareNode.__typename === \"ErrorNotFound\") {\n return shareNode;\n }\n\n const shareNodes: ShareNodesInput = {\n nodes: []\n };\n\n for (const id of shareNode.nodes) {\n const nameKey = await this.perNode(id, user.data.publicKey);\n if (nameKey) {\n shareNodes.nodes.push(nameKey);\n }\n }\n\n const { shareNodeFinish } = await this.#thunder(\"mutation\")({\n shareNodeFinish: [\n {\n rights,\n userId,\n shareNodes\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeFinishResponse\": {\n __typename: true,\n shareNodeFinish: true\n }\n }\n ]\n });\n\n if (!shareNodeFinish) {\n return null;\n }\n\n if (shareNodeFinish.__typename === \"ErrorAccessDenied\") {\n return shareNodeFinish;\n }\n\n if (shareNodeFinish.__typename === \"ErrorNotFound\") {\n return shareNodeFinish;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: shareNodeFinish.shareNodeFinish ?? false\n };\n }\n\n async updateNode({\n nodeId,\n name,\n isFavorite,\n deletedAt\n }: {\n nodeId: string;\n name?: string | null | undefined;\n isFavorite?: boolean | null | undefined;\n deletedAt?: Date | null | undefined;\n }): Promise<\n SuccessResponse<NodeFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw `Can't find Node ${nodeId}`;\n }\n }\n\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n\n name = name\n ? node.access?.nameKey\n ? await encryptName(name, node.access.nameKey)\n : name\n : null;\n\n const { updateNode } = await this.#thunder(\"mutation\")({\n updateNode: [\n {\n nodeId,\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 UpdateNodeResponse\": {\n __typename: true,\n updateNode: nodeFullSelector\n }\n }\n ]\n });\n\n if (!updateNode) {\n return null;\n }\n\n if (updateNode.__typename === \"ErrorAccessDenied\") {\n return updateNode;\n }\n\n if (updateNode.__typename === \"ErrorNotExist\") {\n return updateNode;\n }\n\n if (!updateNode.updateNode) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(\n updateNode.updateNode,\n this.#keys\n );\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.#thunder(\"query\", {\n scalars: {\n Bytes: {\n decode: (e: unknown) => {\n console.log(e, typeof e);\n return Uint8Array.from([1, 2, 3]);\n },\n encode: (e: unknown) => (e as Uint8Array).toString()\n }\n }\n })({\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 FileContentLite\": {\n __typename: true,\n content: true,\n id: true,\n key: true,\n publicKey: true,\n md5: true,\n md5Encrypted: true,\n totalSize: true\n },\n \"...on FileContentReceivedMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\n key: true,\n senderPublicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentSentMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\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 encryptedContentFromParts = async (\n fileParts: FileContentPart[]\n ): Promise<Uint8Array> => {\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(\n `Invalid md5 for part ${part.order} of file ${fileId}`\n );\n }\n parts.push({\n data: buf,\n order: part.order\n });\n };\n\n await promiseAllLimit(\n 3,\n fileParts.map(p => (): Promise<void> => byPart(p))\n );\n\n return concatenate(\n ...parts.sort((a, b) => a.order - b.order).map(p => p.data)\n );\n };\n\n const finalize = async (\n encryptedContent: Uint8Array\n ): Promise<Uint8Array> => {\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 uncompress(src);\n };\n\n const encryptedContent =\n file.__typename === \"FileContentLite\"\n ? file.content\n : file.__typename === \"FileContentCloud\"\n ? await encryptedContentFromParts(file.parts)\n : file.maybeContent\n ? file.maybeContent\n : file.maybeParts\n ? await encryptedContentFromParts(file.maybeParts)\n : null;\n\n if (!encryptedContent) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: await finalize(encryptedContent)\n };\n }\n\n async deleteFile({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteFile } = await this.#thunder(\"mutation\")({\n deleteFile: [\n {\n fileId,\n nodeId\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 deleteNode({\n nodeId\n }: {\n nodeId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNode } = await this.#thunder(\"mutation\")({\n deleteNode: [\n {\n id: nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeResponse\": {\n __typename: true,\n deleteNode: true\n }\n }\n ]\n });\n\n if (!deleteNode) {\n return null;\n }\n\n if (deleteNode.__typename === \"ErrorAccessDenied\") {\n return deleteNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNode.deleteNode\n };\n }\n\n async emptyTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyCloudTrash } = await this.#thunder(\"mutation\")({\n emptyCloudTrash: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on EmptyCloudTrashResponse\": {\n __typename: true,\n emptyCloudTrash: 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.emptyCloudTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: emptyCloudTrash.emptyCloudTrash\n };\n }\n\n async recoverNode(\n id: string\n ): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { recoverNode } = await this.#thunder(\"mutation\")({\n recoverNode: [\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 RecoverNodeResponse\": {\n __typename: true,\n recoverNode: true\n }\n }\n ]\n });\n\n if (!recoverNode) {\n return null;\n }\n\n if (recoverNode.__typename === \"ErrorAccessDenied\") {\n return recoverNode;\n }\n\n if (recoverNode.__typename === \"ErrorNotExist\") {\n return recoverNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverNode.recoverNode ?? false\n };\n }\n\n async moveNodes({\n nodeIds,\n parentNodeId\n }: {\n nodeIds: string[];\n parentNodeId?: string | null | undefined;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { moveNodes } = await this.#thunder(\"mutation\")({\n moveNodes: [\n {\n nodeIds,\n parentNodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on MoveNodesResponse\": {\n __typename: true,\n moveNodes: true\n }\n }\n ]\n });\n\n if (!moveNodes) {\n return null;\n }\n\n if (moveNodes.__typename === \"ErrorAccessDenied\") {\n return moveNodes;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: moveNodes.moveNodes ?? false\n };\n }\n\n async saveInCloud({\n fileId,\n name,\n nodeId\n }: {\n fileId: string;\n name: string;\n nodeId?: string;\n }): Promise<\n | SuccessResponse<NodeFull>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorLimit\n | ErrorNotFound\n | ErrorNotExist\n | null\n > {\n if (nodeId && !nodesCache.has(nodeId)) {\n await this.node({ id: nodeId });\n if (!nodesCache.has(nodeId)) {\n return {\n __typename: \"ErrorBasic\",\n message: `The node ${nodeId} does not exists`\n };\n }\n }\n\n let key = \"\";\n\n const file = filesCache.get(fileId);\n\n if (!file) {\n await this.fileMetadata({ id: fileId });\n const file = filesCache.get(fileId) ?? null;\n if (!file) {\n const receivedMails = await this.#client.mail.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 key = file.key;\n }\n } else {\n key = file.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.#thunder(\"mutation\")({\n saveInCloud: [\n {\n fileId,\n key,\n nodeId,\n filename: encryptedName,\n nameKey: encryptedNameKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\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: nodeFullSelector\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 === \"ErrorNotFound\") {\n return saveInCloud;\n }\n if (saveInCloud.__typename === \"ErrorLimit\") {\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 node = await gqlNodeToExternalNodeFull(\n saveInCloud.saveInCloud,\n this.#keys\n );\n\n const me = node.parent?.users.find(\n ([u]) => u.publicKey === this.#keys.publicKey\n );\n\n if (me && [\"admin\", \"write\"].includes(me[1])) {\n const others =\n node.parent?.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n await Promise.all(\n others.map(([u, rights]) =>\n this.shareNode({\n nodeId: node.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: node\n };\n }\n\n private perNode = async (\n nodeId: string,\n publicKey: string\n ): Promise<NameKeyInput | null> => {\n let node = nodesCache.get(nodeId);\n\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n\n if (!node) {\n return null;\n }\n }\n\n const nameKey = node.access?.nameKey;\n\n if (!nameKey) {\n return null;\n }\n\n return {\n id: node.id,\n nameKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(nameKey),\n publicKey,\n this.#keys.privateKey\n )\n ),\n files:\n \"history\" in node\n ? node.history.map(f => ({\n id: f.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(f.key),\n publicKey,\n this.#keys.privateKey\n )\n )\n }))\n : []\n };\n };\n}\n"],"mappings":"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","names":["_client","_keys","_thunder","axios","ky","encryptName","nodesCache","filesCache","secretstreamKeygen","decryptCryptoBox","encryptCryptoBox","compress","uncompress","sodium","enumerate","chunks","promiseAllLimit","concatenate","md5","decrypt","encrypt","gqlFileToExternal","gqlNodeFullToInternalFull","gqlNodeToExternal","gqlNodeToExternalNodeFull","internalNodeToNode","fileSelector","nodeFullSelector","nodeSelector","SecrecyCloudClient","client","keys","thunder","__privateAdd","__publicField","nodeId","publicKey","_a","node","nameKey","__privateGet","f","__privateSet","fileId","addFileToHistory","file","users","u","input","result","encryptProgress","uploadProgress","signal","fileKey","fileBuffer","compressed","encryptedFile","md5File","md5Encrypted","encryptedFileKey","uploadFile","e","uploadPartEnded","order","uploadFilePartEnd","uploadEnded","uploadFileEnd","chunkParts","index","chunk","progressParts","onProgress","part","progressEvent","current","prv","cur","byPart","formData","p","key","value","name","deletedNodes","nodes","sharedNodes","folder","type","nodesSharedWithMe","userId","deleteNodeSharing","folderId","customName","duplicateNode","ids","deleteNodeCloudTrash","parentFolderId","_b","_c","encryptedName","encryptedKey","createFolder","rights","id","deleted","user","shareNode","shareNodes","shareNodeFinish","isFavorite","deletedAt","updateNode","onDownloadProgress","progressDecrypt","fileContent","transferredBytes","totalBytes","encryptedContentFromParts","fileParts","parts","buf","pr","a","b","finalize","encryptedContent","src","deleteFile","deleteNode","emptyCloudTrash","recoverNode","nodeIds","parentNodeId","moveNodes","_d","receivedMails","mail","m","fileMail","encryptedNameKey","saveInCloud","me","others"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk5WPCTUWHcjs = require('../chunk-5WPCTUWH.cjs');var t;var _bson = require('bson');class p{constructor(n,s,e){_chunk5WPCTUWHcjs.e.call(void 0, this,t,void 0);_chunk5WPCTUWHcjs.f.call(void 0, this,t,e)}async get({field:n,userId:s}){const{dbGet:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,t).call(this,"query")({dbGet:[{field:n,userId:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbGetResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist"||e.__typename==="ErrorNotFound"?e:{__typename:"SuccessResponse",data:e.json.res}:null}async set({value:n,userId:s}){if(typeof n!="object")throw new Error("value should be an object including fields you want to update.");const{dbSet:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,t).call(this,"mutation")({dbSet:[{userId:s,value:_bson.serialize.call(void 0, n).toString("base64")},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbSetResponse":{__typename:!0,dbSet:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotFound"?e:e.dbSet?{__typename:"SuccessResponse",data:e.dbSet.res}:null:null}async search({search:n,field:s}){const{dbSearch:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,t).call(this,"query",{scalars:{Json:{encode:r=>JSON.stringify(r),decode:r=>JSON.parse(r)},DateTime:{decode:r=>new Date(r),encode:r=>r.toISOString()},BigInt:{decode:r=>BigInt(r),encode:r=>r.toString()}}})({dbSearch:[{search:n,field:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DbSearchResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotExist"?e:{__typename:"SuccessResponse",data:e.json}:null}}t=new WeakMap;exports.SecrecyDbClient = p;
2
- //# sourceMappingURL=SecrecyDbClient.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyDbClient.ts"],"names":["_thunder","serialize","SecrecyDbClient","_client","_keys","thunder","__privateAdd","__privateSet","field","userId","dbGet","__privateGet","value","dbSet","search","dbSearch","e"],"mappings":"wDAAA,IAAAA,EAWA,OAAS,aAAAC,MAAiB,OAEnB,MAAMC,CAAgB,CAO3B,YACEC,EACAC,EACAC,EACA,CANFC,EAAA,KAAAN,EAAA,QASEO,EAAA,KAAKP,EAAWK,EAClB,CAEA,MAAM,IAAO,CACX,MAAAG,EACA,OAAAC,CACF,EASE,CACA,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAMC,EAAA,KAAKX,GAAL,UAAc,SAAS,CAC7C,MAAO,CACL,CACE,MAAAQ,EACA,OAAAC,CACF,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,KAAM,EACR,CACF,CACF,CACF,CAAC,EAED,OAAKC,EAIDA,EAAM,aAAe,qBAIrBA,EAAM,aAAe,iBAIrBA,EAAM,aAAe,gBAChBA,EAGF,CACL,WAAY,kBACZ,KAAOA,EAAM,KAAoB,GACnC,EAlBS,IAmBX,CAEA,MAAM,IAA4C,CAChD,MAAAE,EACA,OAAAH,CACF,EAG2E,CACzE,GAAI,OAAOG,GAAU,SACnB,MAAM,IAAI,MACR,gEACF,EAGF,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAMF,EAAA,KAAKX,GAAL,UAAc,YAAY,CAChD,MAAO,CACL,CACE,OAAAS,EACA,MAAOR,EAAUW,CAAK,EAAE,SAAS,QAAQ,CAC3C,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,MAAO,EACT,CACF,CACF,CACF,CAAC,EAED,OAAKC,EAIDA,EAAM,aAAe,qBAIrBA,EAAM,aAAe,gBAChBA,EAGJA,EAAM,MAIJ,CACL,WAAY,kBACZ,KAAOA,EAAM,MAAqB,GACpC,EANS,KAZA,IAmBX,CAEA,MAAM,OAAU,CACd,OAAAC,EACA,MAAAN,CACF,EAKE,CACA,KAAM,CAAE,SAAAO,CAAS,EAAI,MAAMJ,EAAA,KAAKX,GAAL,UAAc,QAAS,CAChD,QAAS,CACP,KAAM,CACJ,OAASgB,GAAe,KAAK,UAAUA,CAAC,EACxC,OAASA,GAAe,KAAK,MAAMA,CAAW,CAChD,EACA,SAAU,CACR,OAASA,GAAe,IAAI,KAAKA,CAAW,EAC5C,OAASA,GAAgBA,EAAW,YAAY,CAClD,EACA,OAAQ,CACN,OAASA,GAAe,OAAOA,CAAW,EAC1C,OAASA,GAAgBA,EAAa,SAAS,CACjD,CACF,CACF,GAAG,CACD,SAAU,CACR,CACE,OAAAF,EACA,MAAAN,CACF,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,mBAAoB,CAClB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,yBAA0B,CACxB,WAAY,GACZ,KAAM,EACR,CACF,CACF,CACF,CAAC,EAED,OAAKO,EAIDA,EAAS,aAAe,qBAIxBA,EAAS,aAAe,cAIxBA,EAAS,aAAe,gBACnBA,EAGF,CACL,WAAY,kBACZ,KAAMA,EAAS,IACjB,EAlBS,IAmBX,CACF,CA5MEf,EAAA","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { SecrecyClient, SuccessResponse, UserData } from \"../index.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport type { Thunder } from \"../zeus/index.js\";\nimport type { Document } from \"bson\";\nimport { serialize } from \"bson\";\n\nexport class SecrecyDbClient {\n // #client: SecrecyClient;\n\n // #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n _client: SecrecyClient,\n _keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n // this.#client = client;\n // this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async get<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.#thunder(\"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 as { res: U }).res\n };\n }\n\n async set<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.#thunder(\"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 as { res: T }).res\n };\n }\n\n async search<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.#thunder(\"query\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\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 as unknown as T[]\n };\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- export { n as SecrecyDbClient } from '../BaseClient-e5e97df7.js';
2
- import '../crypto/index.js';
3
- import '../zeus/index.js';
4
- import '../error.js';
5
- import 'bson';
6
- import 'ky';
7
- import '../crypto/file.js';
8
- import './types/File.js';
9
- import './types/selectors.js';
10
- import '../zeus/const.js';
11
- import './types/index.js';
12
- import './types/UserAppSettings.js';
13
- import './types/UserAppNotifications.js';
14
- import './types/Inputs.js';
15
- import 'jsonwebtoken';
16
- import 'ethers';
@@ -1,2 +0,0 @@
1
- import{d as o,e as u,f as i}from"../chunk-KMTF2BZE.js";var t;import{serialize as a}from"bson";class p{constructor(n,s,e){u(this,t,void 0);i(this,t,e)}async get({field:n,userId:s}){const{dbGet:e}=await o(this,t).call(this,"query")({dbGet:[{field:n,userId:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbGetResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist"||e.__typename==="ErrorNotFound"?e:{__typename:"SuccessResponse",data:e.json.res}:null}async set({value:n,userId:s}){if(typeof n!="object")throw new Error("value should be an object including fields you want to update.");const{dbSet:e}=await o(this,t).call(this,"mutation")({dbSet:[{userId:s,value:a(n).toString("base64")},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbSetResponse":{__typename:!0,dbSet:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotFound"?e:e.dbSet?{__typename:"SuccessResponse",data:e.dbSet.res}:null:null}async search({search:n,field:s}){const{dbSearch:e}=await o(this,t).call(this,"query",{scalars:{Json:{encode:r=>JSON.stringify(r),decode:r=>JSON.parse(r)},DateTime:{decode:r=>new Date(r),encode:r=>r.toISOString()},BigInt:{decode:r=>BigInt(r),encode:r=>r.toString()}}})({dbSearch:[{search:n,field:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DbSearchResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotExist"?e:{__typename:"SuccessResponse",data:e.json}:null}}t=new WeakMap;export{p as SecrecyDbClient};
2
- //# sourceMappingURL=SecrecyDbClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyDbClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { SecrecyClient, SuccessResponse, UserData } from \"../index.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport type { Thunder } from \"../zeus/index.js\";\nimport type { Document } from \"bson\";\nimport { serialize } from \"bson\";\n\nexport class SecrecyDbClient {\n // #client: SecrecyClient;\n\n // #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n _client: SecrecyClient,\n _keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n // this.#client = client;\n // this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async get<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.#thunder(\"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 as { res: U }).res\n };\n }\n\n async set<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.#thunder(\"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 as { res: T }).res\n };\n }\n\n async search<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.#thunder(\"query\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\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 as unknown as T[]\n };\n }\n}\n"],"mappings":"uDAAA,IAAAA,EAWA,OAAS,aAAAC,MAAiB,OAEnB,MAAMC,CAAgB,CAO3B,YACEC,EACAC,EACAC,EACA,CANFC,EAAA,KAAAN,EAAA,QASEO,EAAA,KAAKP,EAAWK,EAClB,CAEA,MAAM,IAAO,CACX,MAAAG,EACA,OAAAC,CACF,EASE,CACA,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAMC,EAAA,KAAKX,GAAL,UAAc,SAAS,CAC7C,MAAO,CACL,CACE,MAAAQ,EACA,OAAAC,CACF,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,KAAM,EACR,CACF,CACF,CACF,CAAC,EAED,OAAKC,EAIDA,EAAM,aAAe,qBAIrBA,EAAM,aAAe,iBAIrBA,EAAM,aAAe,gBAChBA,EAGF,CACL,WAAY,kBACZ,KAAOA,EAAM,KAAoB,GACnC,EAlBS,IAmBX,CAEA,MAAM,IAA4C,CAChD,MAAAE,EACA,OAAAH,CACF,EAG2E,CACzE,GAAI,OAAOG,GAAU,SACnB,MAAM,IAAI,MACR,gEACF,EAGF,KAAM,CAAE,MAAAC,CAAM,EAAI,MAAMF,EAAA,KAAKX,GAAL,UAAc,YAAY,CAChD,MAAO,CACL,CACE,OAAAS,EACA,MAAOR,EAAUW,CAAK,EAAE,SAAS,QAAQ,CAC3C,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,MAAO,EACT,CACF,CACF,CACF,CAAC,EAED,OAAKC,EAIDA,EAAM,aAAe,qBAIrBA,EAAM,aAAe,gBAChBA,EAGJA,EAAM,MAIJ,CACL,WAAY,kBACZ,KAAOA,EAAM,MAAqB,GACpC,EANS,KAZA,IAmBX,CAEA,MAAM,OAAU,CACd,OAAAC,EACA,MAAAN,CACF,EAKE,CACA,KAAM,CAAE,SAAAO,CAAS,EAAI,MAAMJ,EAAA,KAAKX,GAAL,UAAc,QAAS,CAChD,QAAS,CACP,KAAM,CACJ,OAASgB,GAAe,KAAK,UAAUA,CAAC,EACxC,OAASA,GAAe,KAAK,MAAMA,CAAW,CAChD,EACA,SAAU,CACR,OAASA,GAAe,IAAI,KAAKA,CAAW,EAC5C,OAASA,GAAgBA,EAAW,YAAY,CAClD,EACA,OAAQ,CACN,OAASA,GAAe,OAAOA,CAAW,EAC1C,OAASA,GAAgBA,EAAa,SAAS,CACjD,CACF,CACF,GAAG,CACD,SAAU,CACR,CACE,OAAAF,EACA,MAAAN,CACF,EACA,CACE,0BAA2B,CACzB,WAAY,GACZ,QAAS,EACX,EACA,mBAAoB,CAClB,WAAY,GACZ,QAAS,EACX,EACA,sBAAuB,CACrB,WAAY,GACZ,QAAS,EACX,EACA,yBAA0B,CACxB,WAAY,GACZ,KAAM,EACR,CACF,CACF,CACF,CAAC,EAED,OAAKO,EAIDA,EAAS,aAAe,qBAIxBA,EAAS,aAAe,cAIxBA,EAAS,aAAe,gBACnBA,EAGF,CACL,WAAY,kBACZ,KAAMA,EAAS,IACjB,EAlBS,IAmBX,CACF,CA5MEf,EAAA","names":["_thunder","serialize","SecrecyDbClient","_client","_keys","thunder","__privateAdd","__privateSet","field","userId","dbGet","__privateGet","value","dbSet","search","dbSearch","e"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk5WPCTUWHcjs = require('../chunk-5WPCTUWH.cjs');var h,i,c;var _shortid = require('shortid');var _cachejs = require('../cache.js');var _indexjs = require('../index.js');var _mailjs = require('./convert/mail.js');var _selectorsjs = require('./types/selectors.js');class C{constructor(r,e,t){_chunk5WPCTUWHcjs.e.call(void 0, this,h,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,i,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,c,void 0);_chunk5WPCTUWHcjs.c.call(void 0, this,"_eachUser",async(r,e,t,s)=>{let u=_cachejs.usersCache.get(s);if(!u||!("publicKey"in u)){try{const o=await _chunk5WPCTUWHcjs.d.call(void 0, this,h).user({userId:s,withPublicKey:!0});if(!o||o.__typename!=="SuccessResponse")return null;u=o.data}catch(o){return null}if(!u)return null}if(!("publicKey"in u))throw new Error(`User ${s} have no public key`);const f=new Array;for(const o of r){let p=_cachejs.filesCache.get(o.id);if(!p&&(await _chunk5WPCTUWHcjs.d.call(void 0, this,h).cloud.fileMetadata({id:o.id}),p=_cachejs.filesCache.get(o.id),!p))throw new Error(`File ${o.name} (${o.id}) does not exists`);const d=p.key;f.push({id:o.id,name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(o.name),u.publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_hex(d),u.publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey))})}return{recipientId:u.id,body:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(t),u.publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),subject:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),u.publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),files:f}});_chunk5WPCTUWHcjs.f.call(void 0, this,h,r),_chunk5WPCTUWHcjs.f.call(void 0, this,i,e),_chunk5WPCTUWHcjs.f.call(void 0, this,c,t)}async get({id:r}){const{mail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({mail:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on QueryMailResponse":{__typename:!0,mail:_selectorsjs.mailSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;if(!e.mail)return null;const t=_mailjs.convertInternalMailToExternal.call(void 0, e.mail,_chunk5WPCTUWHcjs.d.call(void 0, this,i));return t?{__typename:"SuccessResponse",data:t}:null}async recover({mailId:r}){const{recoverMail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({recoverMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverMailResponse":{__typename:!0,recoverMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"?e:{__typename:"SuccessResponse",data:e.recoverMail}:null}async deletedMails({mailType:r}){const{deletedMails:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({deletedMails:[{mailType:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedMailsResponse":{__typename:!0,deletedMails:_selectorsjs.mailSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const s of e.deletedMails){const u=_mailjs.convertInternalMailToExternal.call(void 0, s,_chunk5WPCTUWHcjs.d.call(void 0, this,i));u&&t.push(u)}return{__typename:"SuccessResponse",data:t}}async create(r,e){const t=await this.createDraft(r);if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename==="ErrorBasic"||t.__typename==="ErrorAccessDenied")return t;const s=await this.sendDraft(t.data.mailIntegrityId,e);return s?s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorBasic"?s:{__typename:"SuccessResponse",data:s.data}:null}async waitingReceivedMails(){const{user:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query")({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{waitingReceivedMails:{date:!0,attachmentsCount:!0,sender:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},recipients:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},temporaryRecipients:{email:!0}}}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=r.user.waitingReceivedMails.map(t=>_chunk5WPCTUWHcjs.b.call(void 0, _chunk5WPCTUWHcjs.a.call(void 0, {id:_shortid.generate.call(void 0, )},t),{date:new Date(t.date)}));return{__typename:"SuccessResponse",data:e}}async updateDraft(r,{body:e,subject:t,files:s,recipientsIds:u,replyTo:f}){const o=await this.draftMails();if(!o)return null;if(o.__typename!=="SuccessResponse")return o;if(!o.data.find(l=>l.mailIntegrityId===r))throw new Error(`Invalid draft ${r}`);let d=null,R=null;(e||t)&&(d=_indexjs.sodium.randombytes_buf(_indexjs.sodium.crypto_generichash_KEYBYTES,"hex"),R=_indexjs.sodium.crypto_generichash(_indexjs.sodium.crypto_generichash_BYTES,JSON.stringify({body:e,subject:t}),d,"hex"));const m=new Array;if(s)for(const l of s){let E=_cachejs.filesCache.get(l.id);if(!E&&(await _chunk5WPCTUWHcjs.d.call(void 0, this,h).cloud.fileMetadata({id:l.id}),E=_cachejs.filesCache.get(l.id),!E))throw new Error(`File ${l.name} (${l.id}) does not exists`);m.push({id:E.id,fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(E.key),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(l.name),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey))})}const{updateDraftMail:_}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation",{scalars:{Json:{encode:l=>JSON.stringify(l),decode:l=>JSON.parse(l)},DateTime:{decode:l=>new Date(l),encode:l=>l.toISOString()},BigInt:{decode:l=>BigInt(l),encode:l=>l.toString()}}})({updateDraftMail:[{draftId:r,recipients:u,replyTo:f,body:e?_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)):null,subject:t?_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(t),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)):null,senderFiles:m,hash:R,hashKey:d},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on UpdateDraftMailResponse":{__typename:!0,updateDraftMail:_selectorsjs.mailSelector}}]});if(!_)return null;if(_.__typename==="ErrorAccessDenied"||_.__typename==="ErrorBasic")return _;if(!_.updateDraftMail)return null;const b=_mailjs.convertInternalMailToExternal.call(void 0, _.updateDraftMail,_chunk5WPCTUWHcjs.d.call(void 0, this,i));return{__typename:"SuccessResponse",data:b}}async deleteDraft(r){var t;const{deleteDraftMail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({deleteDraftMail:[{draftId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteDraftMailResponse":{__typename:!0,deleteDraftMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteDraftMail?{__typename:"SuccessResponse",data:(t=e.deleteDraftMail)!=null?t:!1}:null:null}async deleteTrash({ids:r}){const{deleteMailTrash:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({deleteMailTrash:[{ids:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailTrashResponse":{__typename:!0,deleteMailTrash:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteMailTrash?{__typename:"SuccessResponse",data:e.deleteMailTrash}:null:null}async emptyTrash(){const{emptyMailTrash:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({emptyMailTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyMailTrashResponse":{__typename:!0,emptyMailTrash:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:r.emptyMailTrash?{__typename:"SuccessResponse",data:r.emptyMailTrash}:null:null}async delete({mailId:r}){const{deleteMail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({deleteMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailResponse":{__typename:!0,deleteMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.deleteMail}:null}async sendDraft(r,e){const t=await this.draftMails();if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const s=t.data.find(p=>p.mailIntegrityId===r);if(!s)return{__typename:"SuccessResponse",data:!1};const u=new Array,f=new Array;for(const{email:p}of s.temporaryRecipients){if(!p)continue;const d=await this._eachUser(s.files,s.subject,s.body,p);d?u.push(d):f.push(p)}for(const{id:p}of s.recipients){const d=await this._eachUser(s.files,s.subject,s.body,p);d?u.push(d):f.push(p)}const{sendDraftMail:o}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({sendDraftMail:[{temporaryRecipients:f,recipients:u,draftMailId:s.mailIntegrityId,customMessage:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on SendDraftMailResponse":{__typename:!0,sendDraftMail:!0}}]});return o?o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorBasic"?o:o.sendDraftMail?{__typename:"SuccessResponse",data:o.sendDraftMail}:null:null}async sendWaitingEmails(){const r=await this.sentMails();if(!r)return{__typename:"SuccessResponse",data:!1};if(r.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const e=r.data.filter(t=>t.temporaryRecipients.length>0);for(const t of e)for(const{email:s}of t.temporaryRecipients)if(!!s)try{const u=await this._eachUser(t.files,t.subject,t.body,s);if(!u)continue;await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({sendOneMail:[{mailIntegrityId:t.mailIntegrityId,recipient:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]})}catch(u){continue}return{__typename:"SuccessResponse",data:!1}}async createDraft({body:r,subject:e,files:t,recipientsIds:s,replyTo:u}){const f=_indexjs.sodium.randombytes_buf(_indexjs.sodium.crypto_generichash_KEYBYTES,"hex"),o=_indexjs.sodium.crypto_generichash(_indexjs.sodium.crypto_generichash_BYTES,JSON.stringify({body:r,subject:e}),f,"hex"),p=new Array;for(const m of t){let _=_cachejs.filesCache.get(m.id);if(!_&&(await _chunk5WPCTUWHcjs.d.call(void 0, this,h).cloud.fileMetadata({id:m.id}),_=_cachejs.filesCache.get(m.id),!_))throw new Error(`File ${m.name} (${m.id}) does not exists`);p.push({id:_.id,fileKey:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(_.key),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),name:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(m.name),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey))})}const{createDraftMail:d}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation",{scalars:{DateTime:{decode:m=>new Date(m),encode:m=>m.toISOString()}}})({createDraftMail:[{recipients:s,replyTo:u,body:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(r),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),subject:_indexjs.sodium.to_hex(_indexjs.encryptCryptoBox.call(void 0, _indexjs.sodium.from_string(e),_chunk5WPCTUWHcjs.d.call(void 0, this,i).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,i).privateKey)),senderFiles:p,hash:o,hashKey:f},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on CreateDraftMailResponse":{__typename:!0,createDraftMail:_selectorsjs.mailSelector}}]});if(!d)return null;if(d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorBasic")return d;if(!d.createDraftMail)return null;const R=_mailjs.convertInternalMailToExternal.call(void 0, d.createDraftMail,_chunk5WPCTUWHcjs.d.call(void 0, this,i));return{__typename:"SuccessResponse",data:R}}async read({mailId:r}){const{readMail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({readMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ReadMailResponse":{__typename:!0,readMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.readMail?{__typename:"SuccessResponse",data:e.readMail}:null:null}async unread({mailId:r}){const{unreadMail:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"mutation")({unreadMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UnreadMailResponse":{__typename:!0,unreadMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.unreadMail?{__typename:"SuccessResponse",data:e.unreadMail}:null:null}async receivedMails(){const{user:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{receivedMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.receivedMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,_chunk5WPCTUWHcjs.d.call(void 0, this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async sentMails(){const{user:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{sentMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.sentMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,_chunk5WPCTUWHcjs.d.call(void 0, this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async draftMails(){const{user:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{draftMails:_selectorsjs.mailSelector}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.draftMails){const s=_mailjs.convertInternalMailToExternal.call(void 0, t,_chunk5WPCTUWHcjs.d.call(void 0, this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async unreadReceivedMailsCount(){const{unreadReceivedMailsCount:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,c).call(this,"query")({unreadReceivedMailsCount:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UnreadReceivedMailsCountResponse":{__typename:!0,count:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:r.count}:null}}h=new WeakMap,i=new WeakMap,c=new WeakMap;exports.SecrecyMailClient = C;
2
- //# sourceMappingURL=SecrecyMailClient.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyMailClient.ts"],"names":["_client","_keys","_thunder","generate","filesCache","usersCache","encryptCryptoBox","sodium","convertInternalMailToExternal","mailSelector","SecrecyMailClient","client","keys","thunder","__privateAdd","__publicField","files","subject","body","idOrMail","req","__privateGet","e","recipientsFiles","f","fileInHistory","key","__privateSet","id","mail","result","mailId","recoverMail","mailType","deletedMails","mails","m","data","customMessage","user","__spreadProps","__spreadValues","draftId","recipientsIds","replyTo","drafts","d","hashKey","hash","senderFiles","file","updateDraftMail","_a","deleteDraftMail","ids","deleteMailTrash","emptyMailTrash","deleteMail","draft","recipients","temporaryRecipients","email","input","sendDraftMail","filtered","createDraftMail","readMail","unreadMail","receivedMails","sentMails","draftMails","unreadReceivedMailsCount"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { generate } from \"shortid\";\nimport { filesCache, usersCache } from \"../cache.js\";\nimport type { ErrorAccessDenied, ErrorBasic, ErrorNotFound } from \"../error.js\";\nimport type {\n SuccessResponse,\n KeyPair,\n NewMail,\n SecrecyClient\n} from \"../index.js\";\nimport { encryptCryptoBox, sodium } from \"../index.js\";\nimport type { MailType, Thunder } from \"../zeus/index.js\";\nimport { convertInternalMailToExternal } from \"./convert/mail.js\";\nimport type {\n DraftMail,\n Mail,\n MailFileInput,\n MailRecipientInput,\n ReceivedMail,\n SentMail,\n WaitingReceivedMail\n} from \"./types/index.js\";\nimport { mailSelector } from \"./types/selectors.js\";\n\nexport class SecrecyMailClient {\n #client: SecrecyClient;\n\n #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async get({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<Mail> | ErrorAccessDenied | null> {\n const { mail } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\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: mailSelector\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 recover({\n mailId\n }: {\n mailId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { recoverMail } = await this.#thunder(\"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 deletedMails({\n mailType\n }: {\n mailType: MailType;\n }): Promise<SuccessResponse<Mail[]> | ErrorAccessDenied | null> {\n const { deletedMails } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n deletedMails: [\n { mailType },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedMailsResponse\": {\n __typename: true,\n deletedMails: mailSelector\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 create(\n data: NewMail,\n customMessage?: string | null | undefined\n ): Promise<SuccessResponse<boolean> | ErrorBasic | ErrorAccessDenied | null> {\n const mail = await this.createDraft(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.sendDraft(\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.#thunder(\"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 as string)\n }));\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async updateDraft(\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.#client.cloud.fileMetadata({ 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 senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.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.#thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\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: mailSelector\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 deleteDraft(\n draftId: string\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteDraftMail } = await this.#thunder(\"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 deleteTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMailTrash } = await this.#thunder(\"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 emptyTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyMailTrash } = await this.#thunder(\"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 delete({\n mailId\n }: {\n mailId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMail } = await this.#thunder(\"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 sendDraft(\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.#thunder(\"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 try {\n const input = await this._eachUser(\n mail.files,\n mail.subject,\n mail.body,\n email\n );\n\n if (!input) {\n continue;\n }\n await this.#thunder(\"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 RecoverNodeResponse\": {\n __typename: true,\n recoverNode: true\n }\n }\n ]\n });\n } catch {\n continue;\n }\n }\n }\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n async createDraft({\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.#client.cloud.fileMetadata({ 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 senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.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.#thunder(\"mutation\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\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: mailSelector\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 read({\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.#thunder(\"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 unread({\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.#thunder(\"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 receivedMails(): Promise<\n SuccessResponse<ReceivedMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n receivedMails: mailSelector\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.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n sentMails: mailSelector\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.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n draftMails: mailSelector\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 async unreadReceivedMailsCount(): Promise<\n SuccessResponse<number> | ErrorAccessDenied | null\n > {\n const { unreadReceivedMailsCount } = await this.#thunder(\"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 try {\n const req = await this.#client.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 } catch {\n return null;\n }\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.#client.cloud.fileMetadata({ 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.key;\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"]}
@@ -1,16 +0,0 @@
1
- import '../error.js';
2
- export { k as SecrecyMailClient } from '../BaseClient-e5e97df7.js';
3
- import '../crypto/index.js';
4
- import './types/index.js';
5
- import '../zeus/index.js';
6
- import 'ky';
7
- import '../crypto/file.js';
8
- import './types/File.js';
9
- import './types/selectors.js';
10
- import '../zeus/const.js';
11
- import './types/UserAppSettings.js';
12
- import './types/UserAppNotifications.js';
13
- import 'jsonwebtoken';
14
- import 'bson';
15
- import 'ethers';
16
- import './types/Inputs.js';
@@ -1,2 +0,0 @@
1
- import{a as A,b as v,c as K,d as n,e as w,f as S}from"../chunk-KMTF2BZE.js";var h,i,c;import{generate as I}from"shortid";import{filesCache as D,usersCache as T}from"../cache.js";import{encryptCryptoBox as y,sodium as a}from"../index.js";import{convertInternalMailToExternal as M}from"./convert/mail.js";import{mailSelector as g}from"./types/selectors.js";class C{constructor(r,e,t){w(this,h,void 0);w(this,i,void 0);w(this,c,void 0);K(this,"_eachUser",async(r,e,t,s)=>{let u=T.get(s);if(!u||!("publicKey"in u)){try{const o=await n(this,h).user({userId:s,withPublicKey:!0});if(!o||o.__typename!=="SuccessResponse")return null;u=o.data}catch(o){return null}if(!u)return null}if(!("publicKey"in u))throw new Error(`User ${s} have no public key`);const f=new Array;for(const o of r){let p=D.get(o.id);if(!p&&(await n(this,h).cloud.fileMetadata({id:o.id}),p=D.get(o.id),!p))throw new Error(`File ${o.name} (${o.id}) does not exists`);const d=p.key;f.push({id:o.id,name:a.to_hex(y(a.from_string(o.name),u.publicKey,n(this,i).privateKey)),fileKey:a.to_hex(y(a.from_hex(d),u.publicKey,n(this,i).privateKey))})}return{recipientId:u.id,body:a.to_hex(y(a.from_string(t),u.publicKey,n(this,i).privateKey)),subject:a.to_hex(y(a.from_string(e),u.publicKey,n(this,i).privateKey)),files:f}});S(this,h,r),S(this,i,e),S(this,c,t)}async get({id:r}){const{mail:e}=await n(this,c).call(this,"query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({mail:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on QueryMailResponse":{__typename:!0,mail:g}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;if(!e.mail)return null;const t=M(e.mail,n(this,i));return t?{__typename:"SuccessResponse",data:t}:null}async recover({mailId:r}){const{recoverMail:e}=await n(this,c).call(this,"mutation")({recoverMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverMailResponse":{__typename:!0,recoverMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"?e:{__typename:"SuccessResponse",data:e.recoverMail}:null}async deletedMails({mailType:r}){const{deletedMails:e}=await n(this,c).call(this,"query",{scalars:{DateTime:{decode:s=>new Date(s),encode:s=>s.toISOString()}}})({deletedMails:[{mailType:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedMailsResponse":{__typename:!0,deletedMails:g}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const s of e.deletedMails){const u=M(s,n(this,i));u&&t.push(u)}return{__typename:"SuccessResponse",data:t}}async create(r,e){const t=await this.createDraft(r);if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename==="ErrorBasic"||t.__typename==="ErrorAccessDenied")return t;const s=await this.sendDraft(t.data.mailIntegrityId,e);return s?s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorBasic"?s:{__typename:"SuccessResponse",data:s.data}:null}async waitingReceivedMails(){const{user:r}=await n(this,c).call(this,"query")({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{waitingReceivedMails:{date:!0,attachmentsCount:!0,sender:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},recipients:{id:!0,firstname:!0,lastname:!0,email:!0,publicKey:!0},temporaryRecipients:{email:!0}}}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=r.user.waitingReceivedMails.map(t=>v(A({id:I()},t),{date:new Date(t.date)}));return{__typename:"SuccessResponse",data:e}}async updateDraft(r,{body:e,subject:t,files:s,recipientsIds:u,replyTo:f}){const o=await this.draftMails();if(!o)return null;if(o.__typename!=="SuccessResponse")return o;if(!o.data.find(l=>l.mailIntegrityId===r))throw new Error(`Invalid draft ${r}`);let d=null,R=null;(e||t)&&(d=a.randombytes_buf(a.crypto_generichash_KEYBYTES,"hex"),R=a.crypto_generichash(a.crypto_generichash_BYTES,JSON.stringify({body:e,subject:t}),d,"hex"));const m=new Array;if(s)for(const l of s){let E=D.get(l.id);if(!E&&(await n(this,h).cloud.fileMetadata({id:l.id}),E=D.get(l.id),!E))throw new Error(`File ${l.name} (${l.id}) does not exists`);m.push({id:E.id,fileKey:a.to_hex(y(a.from_string(E.key),n(this,i).publicKey,n(this,i).privateKey)),name:a.to_hex(y(a.from_string(l.name),n(this,i).publicKey,n(this,i).privateKey))})}const{updateDraftMail:_}=await n(this,c).call(this,"mutation",{scalars:{Json:{encode:l=>JSON.stringify(l),decode:l=>JSON.parse(l)},DateTime:{decode:l=>new Date(l),encode:l=>l.toISOString()},BigInt:{decode:l=>BigInt(l),encode:l=>l.toString()}}})({updateDraftMail:[{draftId:r,recipients:u,replyTo:f,body:e?a.to_hex(y(a.from_string(e),n(this,i).publicKey,n(this,i).privateKey)):null,subject:t?a.to_hex(y(a.from_string(t),n(this,i).publicKey,n(this,i).privateKey)):null,senderFiles:m,hash:R,hashKey:d},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on UpdateDraftMailResponse":{__typename:!0,updateDraftMail:g}}]});if(!_)return null;if(_.__typename==="ErrorAccessDenied"||_.__typename==="ErrorBasic")return _;if(!_.updateDraftMail)return null;const b=M(_.updateDraftMail,n(this,i));return{__typename:"SuccessResponse",data:b}}async deleteDraft(r){var t;const{deleteDraftMail:e}=await n(this,c).call(this,"mutation")({deleteDraftMail:[{draftId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteDraftMailResponse":{__typename:!0,deleteDraftMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteDraftMail?{__typename:"SuccessResponse",data:(t=e.deleteDraftMail)!=null?t:!1}:null:null}async deleteTrash({ids:r}){const{deleteMailTrash:e}=await n(this,c).call(this,"mutation")({deleteMailTrash:[{ids:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailTrashResponse":{__typename:!0,deleteMailTrash:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:e.deleteMailTrash?{__typename:"SuccessResponse",data:e.deleteMailTrash}:null:null}async emptyTrash(){const{emptyMailTrash:r}=await n(this,c).call(this,"mutation")({emptyMailTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyMailTrashResponse":{__typename:!0,emptyMailTrash:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:r.emptyMailTrash?{__typename:"SuccessResponse",data:r.emptyMailTrash}:null:null}async delete({mailId:r}){const{deleteMail:e}=await n(this,c).call(this,"mutation")({deleteMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteMailResponse":{__typename:!0,deleteMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.deleteMail}:null}async sendDraft(r,e){const t=await this.draftMails();if(!t)return{__typename:"SuccessResponse",data:!1};if(t.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const s=t.data.find(p=>p.mailIntegrityId===r);if(!s)return{__typename:"SuccessResponse",data:!1};const u=new Array,f=new Array;for(const{email:p}of s.temporaryRecipients){if(!p)continue;const d=await this._eachUser(s.files,s.subject,s.body,p);d?u.push(d):f.push(p)}for(const{id:p}of s.recipients){const d=await this._eachUser(s.files,s.subject,s.body,p);d?u.push(d):f.push(p)}const{sendDraftMail:o}=await n(this,c).call(this,"mutation")({sendDraftMail:[{temporaryRecipients:f,recipients:u,draftMailId:s.mailIntegrityId,customMessage:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on SendDraftMailResponse":{__typename:!0,sendDraftMail:!0}}]});return o?o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorBasic"?o:o.sendDraftMail?{__typename:"SuccessResponse",data:o.sendDraftMail}:null:null}async sendWaitingEmails(){const r=await this.sentMails();if(!r)return{__typename:"SuccessResponse",data:!1};if(r.__typename!=="SuccessResponse")return{__typename:"SuccessResponse",data:!1};const e=r.data.filter(t=>t.temporaryRecipients.length>0);for(const t of e)for(const{email:s}of t.temporaryRecipients)if(!!s)try{const u=await this._eachUser(t.files,t.subject,t.body,s);if(!u)continue;await n(this,c).call(this,"mutation")({sendOneMail:[{mailIntegrityId:t.mailIntegrityId,recipient:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]})}catch(u){continue}return{__typename:"SuccessResponse",data:!1}}async createDraft({body:r,subject:e,files:t,recipientsIds:s,replyTo:u}){const f=a.randombytes_buf(a.crypto_generichash_KEYBYTES,"hex"),o=a.crypto_generichash(a.crypto_generichash_BYTES,JSON.stringify({body:r,subject:e}),f,"hex"),p=new Array;for(const m of t){let _=D.get(m.id);if(!_&&(await n(this,h).cloud.fileMetadata({id:m.id}),_=D.get(m.id),!_))throw new Error(`File ${m.name} (${m.id}) does not exists`);p.push({id:_.id,fileKey:a.to_hex(y(a.from_string(_.key),n(this,i).publicKey,n(this,i).privateKey)),name:a.to_hex(y(a.from_string(m.name),n(this,i).publicKey,n(this,i).privateKey))})}const{createDraftMail:d}=await n(this,c).call(this,"mutation",{scalars:{DateTime:{decode:m=>new Date(m),encode:m=>m.toISOString()}}})({createDraftMail:[{recipients:s,replyTo:u,body:a.to_hex(y(a.from_string(r),n(this,i).publicKey,n(this,i).privateKey)),subject:a.to_hex(y(a.from_string(e),n(this,i).publicKey,n(this,i).privateKey)),senderFiles:p,hash:o,hashKey:f},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on CreateDraftMailResponse":{__typename:!0,createDraftMail:g}}]});if(!d)return null;if(d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorBasic")return d;if(!d.createDraftMail)return null;const R=M(d.createDraftMail,n(this,i));return{__typename:"SuccessResponse",data:R}}async read({mailId:r}){const{readMail:e}=await n(this,c).call(this,"mutation")({readMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ReadMailResponse":{__typename:!0,readMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.readMail?{__typename:"SuccessResponse",data:e.readMail}:null:null}async unread({mailId:r}){const{unreadMail:e}=await n(this,c).call(this,"mutation")({unreadMail:[{mailId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UnreadMailResponse":{__typename:!0,unreadMail:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorBasic"||e.__typename==="ErrorNotFound"?e:e.unreadMail?{__typename:"SuccessResponse",data:e.unreadMail}:null:null}async receivedMails(){const{user:r}=await n(this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{receivedMails:g}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.receivedMails){const s=M(t,n(this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async sentMails(){const{user:r}=await n(this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{sentMails:g}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.sentMails){const s=M(t,n(this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async draftMails(){const{user:r}=await n(this,c).call(this,"query",{scalars:{DateTime:{decode:t=>new Date(t),encode:t=>t.toISOString()}}})({user:[{},{"...on ErrorNotFound":{__typename:!0,message:!0},"...on UserResponse":{__typename:!0,user:{draftMails:g}}}]});if(!r)return null;if(r.__typename==="ErrorNotFound")return r;if(!r.user)return null;const e=new Array;for(const t of r.user.draftMails){const s=M(t,n(this,i));s&&e.push(s)}return{__typename:"SuccessResponse",data:e}}async unreadReceivedMailsCount(){const{unreadReceivedMailsCount:r}=await n(this,c).call(this,"query")({unreadReceivedMailsCount:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UnreadReceivedMailsCountResponse":{__typename:!0,count:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:r.count}:null}}h=new WeakMap,i=new WeakMap,c=new WeakMap;export{C as SecrecyMailClient};
2
- //# sourceMappingURL=SecrecyMailClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyMailClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { generate } from \"shortid\";\nimport { filesCache, usersCache } from \"../cache.js\";\nimport type { ErrorAccessDenied, ErrorBasic, ErrorNotFound } from \"../error.js\";\nimport type {\n SuccessResponse,\n KeyPair,\n NewMail,\n SecrecyClient\n} from \"../index.js\";\nimport { encryptCryptoBox, sodium } from \"../index.js\";\nimport type { MailType, Thunder } from \"../zeus/index.js\";\nimport { convertInternalMailToExternal } from \"./convert/mail.js\";\nimport type {\n DraftMail,\n Mail,\n MailFileInput,\n MailRecipientInput,\n ReceivedMail,\n SentMail,\n WaitingReceivedMail\n} from \"./types/index.js\";\nimport { mailSelector } from \"./types/selectors.js\";\n\nexport class SecrecyMailClient {\n #client: SecrecyClient;\n\n #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async get({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<Mail> | ErrorAccessDenied | null> {\n const { mail } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\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: mailSelector\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 recover({\n mailId\n }: {\n mailId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { recoverMail } = await this.#thunder(\"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 deletedMails({\n mailType\n }: {\n mailType: MailType;\n }): Promise<SuccessResponse<Mail[]> | ErrorAccessDenied | null> {\n const { deletedMails } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n deletedMails: [\n { mailType },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedMailsResponse\": {\n __typename: true,\n deletedMails: mailSelector\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 create(\n data: NewMail,\n customMessage?: string | null | undefined\n ): Promise<SuccessResponse<boolean> | ErrorBasic | ErrorAccessDenied | null> {\n const mail = await this.createDraft(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.sendDraft(\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.#thunder(\"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 as string)\n }));\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async updateDraft(\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.#client.cloud.fileMetadata({ 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 senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.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.#thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\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: mailSelector\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 deleteDraft(\n draftId: string\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteDraftMail } = await this.#thunder(\"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 deleteTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMailTrash } = await this.#thunder(\"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 emptyTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyMailTrash } = await this.#thunder(\"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 delete({\n mailId\n }: {\n mailId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteMail } = await this.#thunder(\"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 sendDraft(\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.#thunder(\"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 try {\n const input = await this._eachUser(\n mail.files,\n mail.subject,\n mail.body,\n email\n );\n\n if (!input) {\n continue;\n }\n await this.#thunder(\"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 RecoverNodeResponse\": {\n __typename: true,\n recoverNode: true\n }\n }\n ]\n });\n } catch {\n continue;\n }\n }\n }\n return {\n __typename: \"SuccessResponse\",\n data: false\n };\n }\n\n async createDraft({\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.#client.cloud.fileMetadata({ 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 senderFiles.push({\n id: file.id,\n fileKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_string(file.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.#thunder(\"mutation\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\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: mailSelector\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 read({\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.#thunder(\"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 unread({\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.#thunder(\"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 receivedMails(): Promise<\n SuccessResponse<ReceivedMail[]> | ErrorNotFound | null\n > {\n const { user } = await this.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n receivedMails: mailSelector\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.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n sentMails: mailSelector\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.#thunder(\"query\", {\n scalars: {\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n }\n }\n })({\n user: [\n {},\n {\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UserResponse\": {\n __typename: true,\n user: {\n draftMails: mailSelector\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 async unreadReceivedMailsCount(): Promise<\n SuccessResponse<number> | ErrorAccessDenied | null\n > {\n const { unreadReceivedMailsCount } = await this.#thunder(\"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 try {\n const req = await this.#client.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 } catch {\n return null;\n }\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.#client.cloud.fileMetadata({ 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.key;\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"],"mappings":"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","names":["_client","_keys","_thunder","generate","filesCache","usersCache","encryptCryptoBox","sodium","convertInternalMailToExternal","mailSelector","SecrecyMailClient","client","keys","thunder","__privateAdd","__publicField","files","subject","body","idOrMail","req","__privateGet","e","recipientsFiles","f","fileInHistory","key","__privateSet","id","mail","result","mailId","recoverMail","mailType","deletedMails","mails","m","data","customMessage","user","__spreadProps","__spreadValues","draftId","recipientsIds","replyTo","drafts","d","hashKey","hash","senderFiles","file","updateDraftMail","_a","deleteDraftMail","ids","deleteMailTrash","emptyMailTrash","deleteMail","draft","recipients","temporaryRecipients","email","input","sendDraftMail","filtered","createDraftMail","readMail","unreadMail","receivedMails","sentMails","draftMails","unreadReceivedMailsCount"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk5WPCTUWHcjs = require('../chunk-5WPCTUWH.cjs');var t,i,y;class s{constructor(n,c,o){_chunk5WPCTUWHcjs.e.call(void 0, this,t,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,i,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,y,void 0);_chunk5WPCTUWHcjs.f.call(void 0, this,t,n),_chunk5WPCTUWHcjs.f.call(void 0, this,i,c),_chunk5WPCTUWHcjs.f.call(void 0, this,y,o)}}t=new WeakMap,i=new WeakMap,y=new WeakMap;exports.SecrecyPayClient = s;
2
- //# sourceMappingURL=SecrecyPayClient.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/SecrecyPayClient.ts"],"names":["_client","_keys","_thunder","SecrecyPayClient","client","keys","thunder","__privateAdd","__privateSet"],"mappings":"4CAAA,IAAAA,EAAAC,EAAAC,EAKO,MAAMC,CAAiB,CAa5B,YACEC,EACAC,EACAC,EACA,CAdFC,EAAA,KAAAP,EAAA,QAIAO,EAAA,KAAAN,EAAA,QAIAM,EAAA,KAAAL,EAAA,QAOEM,EAAA,KAAKR,EAAUI,GACfI,EAAA,KAAKP,EAAQI,GACbG,EAAA,KAAKN,EAAWI,EAClB,CACF,CAnBEN,EAAA,YAIAC,EAAA,YAIAC,EAAA","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { SecrecyClient } from \"../index.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport type { Thunder } from \"../zeus/index.js\";\n\nexport class SecrecyPayClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n #client: SecrecyClient;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n #keys: KeyPair;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- export { r as SecrecyPayClient } from '../BaseClient-e5e97df7.js';
2
- import '../crypto/index.js';
3
- import '../zeus/index.js';
4
- import 'ky';
5
- import '../error.js';
6
- import '../crypto/file.js';
7
- import './types/File.js';
8
- import './types/selectors.js';
9
- import '../zeus/const.js';
10
- import './types/index.js';
11
- import './types/UserAppSettings.js';
12
- import './types/UserAppNotifications.js';
13
- import './types/Inputs.js';
14
- import 'jsonwebtoken';
15
- import 'bson';
16
- import 'ethers';