@secrecy/lib 1.6.0 → 1.6.1

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 (197) hide show
  1. package/dist/BaseClient-ca94a07f.d.ts +405 -0
  2. package/dist/BaseClient.cjs +2 -0
  3. package/dist/BaseClient.cjs.map +1 -0
  4. package/dist/BaseClient.d.ts +16 -111
  5. package/dist/BaseClient.js +2 -506
  6. package/dist/BaseClient.js.map +1 -0
  7. package/dist/PopupTools.cjs +2 -0
  8. package/dist/PopupTools.cjs.map +1 -0
  9. package/dist/PopupTools.d.ts +5 -4
  10. package/dist/PopupTools.js +2 -195
  11. package/dist/PopupTools.js.map +1 -0
  12. package/dist/ZeusThunder.cjs +2 -0
  13. package/dist/ZeusThunder.cjs.map +1 -0
  14. package/dist/ZeusThunder.d.ts +6 -2
  15. package/dist/ZeusThunder.js +2 -65
  16. package/dist/ZeusThunder.js.map +1 -0
  17. package/dist/cache.cjs +2 -0
  18. package/dist/cache.cjs.map +1 -0
  19. package/dist/cache.d.ts +22 -4
  20. package/dist/cache.js +2 -4
  21. package/dist/cache.js.map +1 -0
  22. package/dist/client/SecrecyAppClient.cjs +2 -0
  23. package/dist/client/SecrecyAppClient.cjs.map +1 -0
  24. package/dist/client/SecrecyAppClient.d.ts +16 -17
  25. package/dist/client/SecrecyAppClient.js +2 -226
  26. package/dist/client/SecrecyAppClient.js.map +1 -0
  27. package/dist/client/SecrecyCloudClient.cjs +2 -0
  28. package/dist/client/SecrecyCloudClient.cjs.map +1 -0
  29. package/dist/client/SecrecyCloudClient.d.ts +16 -89
  30. package/dist/client/SecrecyCloudClient.js +2 -1405
  31. package/dist/client/SecrecyCloudClient.js.map +1 -0
  32. package/dist/client/SecrecyDbClient.cjs +2 -0
  33. package/dist/client/SecrecyDbClient.cjs.map +1 -0
  34. package/dist/client/SecrecyDbClient.d.ts +16 -48
  35. package/dist/client/SecrecyDbClient.js +2 -419
  36. package/dist/client/SecrecyDbClient.js.map +1 -0
  37. package/dist/client/SecrecyMailClient.cjs +2 -0
  38. package/dist/client/SecrecyMailClient.cjs.map +1 -0
  39. package/dist/client/SecrecyMailClient.d.ts +16 -42
  40. package/dist/client/SecrecyMailClient.js +2 -1022
  41. package/dist/client/SecrecyMailClient.js.map +1 -0
  42. package/dist/client/SecrecyPayClient.cjs +2 -0
  43. package/dist/client/SecrecyPayClient.cjs.map +1 -0
  44. package/dist/client/SecrecyPayClient.d.ts +16 -28
  45. package/dist/client/SecrecyPayClient.js +2 -68
  46. package/dist/client/SecrecyPayClient.js.map +1 -0
  47. package/dist/client/SecrecyWalletClient.cjs +2 -0
  48. package/dist/client/SecrecyWalletClient.cjs.map +1 -0
  49. package/dist/client/SecrecyWalletClient.d.ts +16 -30
  50. package/dist/client/SecrecyWalletClient.js +2 -73
  51. package/dist/client/SecrecyWalletClient.js.map +1 -0
  52. package/dist/client/convert/file.cjs +2 -0
  53. package/dist/client/convert/file.cjs.map +1 -0
  54. package/dist/client/convert/file.d.ts +11 -5
  55. package/dist/client/convert/file.js +2 -33
  56. package/dist/client/convert/file.js.map +1 -0
  57. package/dist/client/convert/mail.cjs +2 -0
  58. package/dist/client/convert/mail.cjs.map +1 -0
  59. package/dist/client/convert/mail.d.ts +13 -3
  60. package/dist/client/convert/mail.js +2 -42
  61. package/dist/client/convert/mail.js.map +1 -0
  62. package/dist/client/convert/node.cjs +2 -0
  63. package/dist/client/convert/node.cjs.map +1 -0
  64. package/dist/client/convert/node.d.ts +18 -9
  65. package/dist/client/convert/node.js +2 -87
  66. package/dist/client/convert/node.js.map +1 -0
  67. package/dist/client/helpers.cjs +2 -0
  68. package/dist/client/helpers.cjs.map +1 -0
  69. package/dist/client/helpers.d.ts +16 -28
  70. package/dist/client/helpers.js +2 -119
  71. package/dist/client/helpers.js.map +1 -0
  72. package/dist/client/index.cjs +2 -0
  73. package/dist/client/index.cjs.map +1 -0
  74. package/dist/client/index.d.ts +16 -34
  75. package/dist/client/index.js +2 -46
  76. package/dist/client/index.js.map +1 -0
  77. package/dist/client/storage.cjs +2 -0
  78. package/dist/client/storage.cjs.map +1 -0
  79. package/dist/client/storage.d.ts +6 -3
  80. package/dist/client/storage.js +2 -12
  81. package/dist/client/storage.js.map +1 -0
  82. package/dist/client/types/File.cjs +1 -0
  83. package/dist/client/types/File.cjs.map +1 -0
  84. package/dist/client/types/File.d.ts +9 -5
  85. package/dist/client/types/File.js +1 -3
  86. package/dist/client/types/File.js.map +1 -0
  87. package/dist/client/types/Inputs.cjs +1 -0
  88. package/dist/client/types/Inputs.cjs.map +1 -0
  89. package/dist/client/types/Inputs.d.ts +6 -4
  90. package/dist/client/types/Inputs.js +1 -3
  91. package/dist/client/types/Inputs.js.map +1 -0
  92. package/dist/client/types/Node.cjs +1 -0
  93. package/dist/client/types/Node.cjs.map +1 -0
  94. package/dist/client/types/Node.d.ts +9 -56
  95. package/dist/client/types/Node.js +1 -3
  96. package/dist/client/types/Node.js.map +1 -0
  97. package/dist/client/types/UserAppNotifications.cjs +1 -0
  98. package/dist/client/types/UserAppNotifications.cjs.map +1 -0
  99. package/dist/client/types/UserAppNotifications.d.ts +3 -1
  100. package/dist/client/types/UserAppNotifications.js +1 -3
  101. package/dist/client/types/UserAppNotifications.js.map +1 -0
  102. package/dist/client/types/UserAppSettings.cjs +1 -0
  103. package/dist/client/types/UserAppSettings.cjs.map +1 -0
  104. package/dist/client/types/UserAppSettings.d.ts +3 -1
  105. package/dist/client/types/UserAppSettings.js +1 -3
  106. package/dist/client/types/UserAppSettings.js.map +1 -0
  107. package/dist/client/types/index.cjs +2 -0
  108. package/dist/client/types/index.cjs.map +1 -0
  109. package/dist/client/types/index.d.ts +86 -30
  110. package/dist/client/types/index.js +2 -8
  111. package/dist/client/types/index.js.map +1 -0
  112. package/dist/client/types/selectors.cjs +2 -0
  113. package/dist/client/types/selectors.cjs.map +1 -0
  114. package/dist/client/types/selectors.d.ts +7 -5
  115. package/dist/client/types/selectors.js +2 -135
  116. package/dist/client/types/selectors.js.map +1 -0
  117. package/dist/crypto/file.cjs +2 -0
  118. package/dist/crypto/file.cjs.map +1 -0
  119. package/dist/crypto/file.d.ts +8 -6
  120. package/dist/crypto/file.js +2 -195
  121. package/dist/crypto/file.js.map +1 -0
  122. package/dist/crypto/index.cjs +2 -0
  123. package/dist/crypto/index.cjs.map +1 -0
  124. package/dist/crypto/index.d.ts +11 -9
  125. package/dist/crypto/index.js +2 -45
  126. package/dist/crypto/index.js.map +1 -0
  127. package/dist/error.cjs +1 -0
  128. package/dist/error.cjs.map +1 -0
  129. package/dist/error.d.ts +13 -11
  130. package/dist/error.js +1 -3
  131. package/dist/error.js.map +1 -0
  132. package/dist/index.cjs +2 -0
  133. package/dist/index.cjs.map +1 -0
  134. package/dist/index.d.ts +19 -14
  135. package/dist/index.js +2 -10
  136. package/dist/index.js.map +1 -0
  137. package/dist/minify/index.cjs +2 -0
  138. package/dist/minify/index.cjs.map +1 -0
  139. package/dist/minify/index.d.ts +4 -2
  140. package/dist/minify/index.js +2 -23
  141. package/dist/minify/index.js.map +1 -0
  142. package/dist/minify/lz4.cjs +3 -0
  143. package/dist/minify/lz4.cjs.map +1 -0
  144. package/dist/minify/lz4.d.ts +7 -5
  145. package/dist/minify/lz4.js +2 -538
  146. package/dist/minify/lz4.js.map +1 -0
  147. package/dist/sodium.cjs +2 -0
  148. package/dist/sodium.cjs.map +1 -0
  149. package/dist/sodium.d.ts +5 -3
  150. package/dist/sodium.js +2 -6
  151. package/dist/sodium.js.map +1 -0
  152. package/dist/utils/encoders.cjs +2 -0
  153. package/dist/utils/encoders.cjs.map +1 -0
  154. package/dist/utils/encoders.d.ts +6 -4
  155. package/dist/utils/encoders.js +2 -18
  156. package/dist/utils/encoders.js.map +1 -0
  157. package/dist/utils/store-buddy.cjs +2 -0
  158. package/dist/utils/store-buddy.cjs.map +1 -0
  159. package/dist/utils/store-buddy.d.ts +4 -3
  160. package/dist/utils/store-buddy.js +2 -58
  161. package/dist/utils/store-buddy.js.map +1 -0
  162. package/dist/utils/time.cjs +2 -0
  163. package/dist/utils/time.cjs.map +1 -0
  164. package/dist/utils/time.d.ts +4 -2
  165. package/dist/utils/time.js +2 -12
  166. package/dist/utils/time.js.map +1 -0
  167. package/dist/utils/utils.cjs +2 -0
  168. package/dist/utils/utils.cjs.map +1 -0
  169. package/dist/utils/utils.d.ts +6 -4
  170. package/dist/utils/utils.js +2 -47
  171. package/dist/utils/utils.js.map +1 -0
  172. package/dist/worker/md5.cjs +2 -0
  173. package/dist/worker/md5.cjs.map +1 -0
  174. package/dist/worker/md5.d.ts +3 -1
  175. package/dist/worker/md5.js +2 -24
  176. package/dist/worker/md5.js.map +1 -0
  177. package/dist/worker/sodium.cjs +2 -0
  178. package/dist/worker/sodium.cjs.map +1 -0
  179. package/dist/worker/sodium.d.ts +6 -3
  180. package/dist/worker/sodium.js +2 -118
  181. package/dist/worker/sodium.js.map +1 -0
  182. package/dist/worker/workerCodes.cjs +254 -0
  183. package/dist/worker/workerCodes.cjs.map +1 -0
  184. package/dist/worker/workerCodes.d.ts +4 -2
  185. package/dist/worker/workerCodes.js +4 -5
  186. package/dist/worker/workerCodes.js.map +1 -0
  187. package/dist/zeus/const.cjs +2 -0
  188. package/dist/zeus/const.cjs.map +1 -0
  189. package/dist/zeus/const.d.ts +5 -3
  190. package/dist/zeus/const.js +2 -1846
  191. package/dist/zeus/const.js.map +1 -0
  192. package/dist/zeus/index.cjs +5 -0
  193. package/dist/zeus/index.cjs.map +1 -0
  194. package/dist/zeus/index.d.ts +91 -89
  195. package/dist/zeus/index.js +5 -642
  196. package/dist/zeus/index.js.map +1 -0
  197. package/package.json +2 -2
@@ -0,0 +1 @@
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":["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","client","keys","thunder","fileId","nodeId","addFileToHistory","node","file","f","users","u","input","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","result","name","deletedNodes","nodes","sharedNodes","folder","type","nodesSharedWithMe","userId","deleteNodeSharing","folderId","customName","duplicateNode","ids","deleteNodeCloudTrash","parentFolderId","encryptedName","encryptedKey","createFolder","rights","id","deleted","user","shareNode","shareNodes","nameKey","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","receivedMails","mail","m","fileMail","encryptedNameKey","saveInCloud","me","others","publicKey"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _encodersjs = require('../utils/encoders.js');var _bson = require('bson');class m{#e;constructor(t,s,e){this.#e=e}async getDbConfig({appId:t,env:s}){const{dbConfig:e}=await this.#e("query",{scalars:{Json:_encodersjs.encoders.json}})({dbConfig:[{appId:t,env:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbConfigResponse":{__typename:!0,json:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotFound"?e:{__typename:"SuccessResponse",data:e.json}:null}async dbGetDiff({appId:t,env:s,config:e}){const{dbGetDiff:n}=await this.#e("query",{scalars:{Json:_encodersjs.encoders.json}})({dbGetDiff:[{appId:t,env:s,config:e},{"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DbGetDiffConfigResponse":{__typename:!0,dbGetDiffConfig:{env:!0,current:!0,next:!0,diff:!0,hash:!0}}}]});return n?n.__typename==="ErrorBasic"||n.__typename==="ErrorAccessDenied"?n:{__typename:"SuccessResponse",data:n.dbGetDiffConfig}:null}async setDbConfig({appId:t,env:s,config:e}){const{dbConfigMutation:n}=await this.#e("mutation",{scalars:{Json:_encodersjs.encoders.json}})({dbConfigMutation:[{appId:t,env:s,config:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on DbConfigMutationResponse":{__typename:!0,dbConfigMutation:!0}}]});return n?n.__typename==="ErrorBasic"||n.__typename==="ErrorAccessDenied"?n:{__typename:"SuccessResponse",data:n.dbConfigMutation}:null}async dbConfigPushToProd({appId:t,diffHash:s}){const{dbConfigToProdMutation:e}=await this.#e("mutation",{scalars:{Json:_encodersjs.encoders.json}})({dbConfigToProdMutation:[{appId:t,diffHash:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on DbConfigToProdMutationResponse":{__typename:!0,dbConfigToProdMutation:!0}}]});return e?e.__typename==="ErrorBasic"||e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.dbConfigToProdMutation}:null}async get({field:t,appId:s,userId:e,env:n}){const{dbGet:r}=await this.#e("query")({dbGet:[{field:t,appId:s,userId:e,env:n},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbGetResponse":{__typename:!0,json:!0}}]});return r?r.__typename==="ErrorAccessDenied"||r.__typename==="ErrorBasic"||r.__typename==="ErrorNotExist"||r.__typename==="ErrorNotFound"?r:{__typename:"SuccessResponse",data:r.json.res}:null}async set({value:t,appId:s,env:e,userId:n}){if(typeof t!="object")throw new Error("value should be an object including fields you want to update.");const{dbSet:r}=await this.#e("mutation")({dbSet:[{userId:n,appId:s,env:e,value:_bson.serialize.call(void 0, t).toString("base64")},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DbSetResponse":{__typename:!0,dbSet:!0}}]});return r?r.__typename==="ErrorAccessDenied"||r.__typename==="ErrorNotFound"||r.__typename==="ErrorBasic"?r:r.dbSet?{__typename:"SuccessResponse",data:r.dbSet.res}:null:null}async search({appId:t,env:s,search:e,field:n,take:r,skip:i,orderBy:u}){const{dbSearch:o}=await this.#e("query",{scalars:{Json:_encodersjs.encoders.json,DateTime:_encodersjs.encoders.dateTime,BigInt:_encodersjs.encoders.bigInt}})({dbSearch:[{appId:t,env:s,field:n,search:e,take:r,skip:i,orderBy:u},{"...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 o?o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorBasic"||o.__typename==="ErrorNotExist"?o:{__typename:"SuccessResponse",data:o.json}:null}}exports.SecrecyDbClient = m;
2
+ //# sourceMappingURL=SecrecyDbClient.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/SecrecyDbClient.ts"],"names":["encoders","serialize","SecrecyDbClient","#thunder","_client","_keys","thunder","appId","env","dbConfig","config","dbGetDiff","dbConfigMutation","diffHash","dbConfigToProdMutation","field","userId","dbGet","value","dbSet","search","take","skip","orderBy","dbSearch"],"mappings":"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","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 { encoders } from \"../utils/encoders.js\";\nimport type { MongoDbEnv, 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 /**\n * Get the DbConfig by \"env\", it can be either \"dev\" or \"prod\".\n */\n async getDbConfig<T>({\n appId,\n env\n }: {\n appId: string;\n env: MongoDbEnv;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null> {\n const { dbConfig } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfig: [\n {\n appId,\n env\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigResponse\": {\n __typename: true,\n json: true\n }\n }\n ]\n });\n\n if (!dbConfig) {\n return null;\n }\n\n if (dbConfig.__typename === \"ErrorAccessDenied\") {\n return dbConfig;\n }\n\n if (dbConfig.__typename === \"ErrorNotFound\") {\n return dbConfig;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfig.json as T\n };\n }\n\n /**\n * Get the difference recipe between two DB configurations.\n */\n async dbGetDiff<T>({\n appId,\n env,\n config\n }: {\n appId: string;\n env: MongoDbEnv;\n config: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbGetDiff } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbGetDiff: [\n {\n appId,\n env,\n config\n },\n {\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DbGetDiffConfigResponse\": {\n __typename: true,\n dbGetDiffConfig: {\n env: true,\n current: true,\n next: true,\n diff: true,\n hash: true\n }\n }\n }\n ]\n });\n\n if (!dbGetDiff) {\n return null;\n }\n\n if (dbGetDiff.__typename === \"ErrorBasic\") {\n return dbGetDiff;\n }\n\n if (dbGetDiff.__typename === \"ErrorAccessDenied\") {\n return dbGetDiff;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbGetDiff.dbGetDiffConfig as T\n };\n }\n\n /**\n * Set the DbConfig by \"env\", it can be either \"dev\" or \"prod\".\n *\n * Mostly used for hotfixes on production or common changes on development.\n */\n async setDbConfig<T>({\n appId,\n env,\n config\n }: {\n appId: string;\n env: MongoDbEnv;\n config: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbConfigMutation } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfigMutation: [\n {\n appId,\n env,\n config\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigMutationResponse\": {\n __typename: true,\n dbConfigMutation: true\n }\n }\n ]\n });\n\n if (!dbConfigMutation) {\n return null;\n }\n\n if (dbConfigMutation.__typename === \"ErrorBasic\") {\n return dbConfigMutation;\n }\n\n if (dbConfigMutation.__typename === \"ErrorAccessDenied\") {\n return dbConfigMutation;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfigMutation.dbConfigMutation as T\n };\n }\n\n /**\n * Push the dbConfigDev to the dbCongigProd.\n *\n * It requires a diffHash to verify that the developer has validated his changes.\n */\n async dbConfigPushToProd<T>({\n appId,\n diffHash\n }: {\n appId: string;\n diffHash: string;\n }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null> {\n const { dbConfigToProdMutation } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: encoders.json\n }\n })({\n dbConfigToProdMutation: [\n {\n appId,\n diffHash\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on DbConfigToProdMutationResponse\": {\n __typename: true,\n dbConfigToProdMutation: true\n }\n }\n ]\n });\n\n if (!dbConfigToProdMutation) {\n return null;\n }\n\n if (dbConfigToProdMutation.__typename === \"ErrorBasic\") {\n return dbConfigToProdMutation;\n }\n\n if (dbConfigToProdMutation.__typename === \"ErrorAccessDenied\") {\n return dbConfigToProdMutation;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: dbConfigToProdMutation.dbConfigToProdMutation as T\n };\n }\n\n /**\n * Get the value of a field.\n */\n async get<U>({\n field,\n appId,\n userId,\n env\n }: {\n field: string;\n appId: string;\n env: MongoDbEnv;\n userId?: string | null | undefined;\n }): Promise<\n | SuccessResponse<U>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorNotExist\n | ErrorNotFound\n | null\n > {\n const { dbGet } = await this.#thunder(\"query\")({\n dbGet: [\n {\n field,\n appId,\n userId,\n env\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 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 === \"ErrorBasic\") {\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 /**\n * Set an user document.\n */\n async set<T extends UserData, U extends Document>({\n value,\n appId,\n env,\n userId\n }: {\n value: U;\n appId: string;\n env: MongoDbEnv;\n userId?: string | null | undefined;\n }): Promise<\n SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null\n > {\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 appId,\n env,\n value: serialize(value).toString(\"base64\")\n },\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 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.__typename === \"ErrorBasic\") {\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 /**\n * Searches for user fields that match the search arguments.\n */\n async search<T>({\n appId,\n env,\n search,\n field,\n take,\n skip,\n orderBy\n }: {\n appId: string;\n env: MongoDbEnv;\n field: string;\n search: string;\n take?: number;\n skip?: number;\n orderBy?: \"createdAt_ASC\" | \"createdAt_DESC\";\n }): Promise<\n SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null\n > {\n const { dbSearch } = await this.#thunder(\"query\", {\n scalars: {\n Json: encoders.json,\n DateTime: encoders.dateTime,\n BigInt: encoders.bigInt\n }\n })({\n dbSearch: [\n {\n appId,\n env,\n field,\n search,\n take,\n skip,\n orderBy\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,48 +1,16 @@
1
- import type { SecrecyClient, SuccessResponse, UserData } from "../index.js";
2
- import type { KeyPair } from "../crypto/index.js";
3
- import type { ErrorAccessDenied, ErrorBasic, ErrorNotExist, ErrorNotFound } from "../error.js";
4
- import type { MongoDbEnv, Thunder } from "../zeus/index.js";
5
- import type { Document } from "bson";
6
- export declare class SecrecyDbClient {
7
- #private;
8
- constructor(_client: SecrecyClient, _keys: KeyPair, thunder: ReturnType<typeof Thunder>);
9
- getDbConfig<T>({ appId, env }: {
10
- appId: string;
11
- env: MongoDbEnv;
12
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null>;
13
- dbGetDiff<T>({ appId, env, config }: {
14
- appId: string;
15
- env: MongoDbEnv;
16
- config: string;
17
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
18
- setDbConfig<T>({ appId, env, config }: {
19
- appId: string;
20
- env: MongoDbEnv;
21
- config: string;
22
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
23
- dbConfigPushToProd<T>({ appId, diffHash }: {
24
- appId: string;
25
- diffHash: string;
26
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
27
- get<U>({ field, appId, userId, env }: {
28
- field: string;
29
- appId: string;
30
- env: MongoDbEnv;
31
- userId?: string | null | undefined;
32
- }): Promise<SuccessResponse<U> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | ErrorNotFound | null>;
33
- set<T extends UserData, U extends Document>({ value, appId, env, userId }: {
34
- value: U;
35
- appId: string;
36
- env: MongoDbEnv;
37
- userId?: string | null | undefined;
38
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null>;
39
- search<T>({ appId, env, search, field, take, skip, orderBy }: {
40
- appId: string;
41
- env: MongoDbEnv;
42
- field: string;
43
- search: string;
44
- take?: number;
45
- skip?: number;
46
- orderBy?: "createdAt_ASC" | "createdAt_DESC";
47
- }): Promise<SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null>;
48
- }
1
+ export { n as SecrecyDbClient } from '../BaseClient-ca94a07f.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';