@protontech/drive-sdk 0.1.0 → 0.1.2

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 (452) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +2 -1
  120. package/dist/internal/events/eventManager.js +9 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +84 -60
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +10 -9
  125. package/dist/internal/events/index.js +38 -32
  126. package/dist/internal/events/index.js.map +1 -1
  127. package/dist/internal/events/interface.d.ts +1 -1
  128. package/dist/internal/events/interface.js +0 -1
  129. package/dist/internal/events/interface.js.map +1 -1
  130. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  131. package/dist/internal/events/volumeEventManager.js.map +1 -1
  132. package/dist/internal/events/volumeEventManager.test.js +55 -55
  133. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  134. package/dist/internal/nodes/apiService.d.ts +4 -3
  135. package/dist/internal/nodes/apiService.js +36 -15
  136. package/dist/internal/nodes/apiService.js.map +1 -1
  137. package/dist/internal/nodes/apiService.test.js +60 -41
  138. package/dist/internal/nodes/apiService.test.js.map +1 -1
  139. package/dist/internal/nodes/cache.d.ts +5 -5
  140. package/dist/internal/nodes/cache.js +14 -7
  141. package/dist/internal/nodes/cache.js.map +1 -1
  142. package/dist/internal/nodes/cache.test.js +31 -9
  143. package/dist/internal/nodes/cache.test.js.map +1 -1
  144. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  145. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  146. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  147. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  148. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  149. package/dist/internal/nodes/cryptoService.js +11 -17
  150. package/dist/internal/nodes/cryptoService.js.map +1 -1
  151. package/dist/internal/nodes/cryptoService.test.js +320 -241
  152. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  153. package/dist/internal/nodes/events.d.ts +3 -3
  154. package/dist/internal/nodes/events.js +7 -7
  155. package/dist/internal/nodes/events.js.map +1 -1
  156. package/dist/internal/nodes/events.test.js +27 -21
  157. package/dist/internal/nodes/events.test.js.map +1 -1
  158. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  159. package/dist/internal/nodes/extendedAttributes.js +3 -1
  160. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  161. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  162. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  163. package/dist/internal/nodes/index.d.ts +10 -10
  164. package/dist/internal/nodes/index.js.map +1 -1
  165. package/dist/internal/nodes/index.test.d.ts +1 -0
  166. package/dist/internal/nodes/index.test.js +106 -0
  167. package/dist/internal/nodes/index.test.js.map +1 -0
  168. package/dist/internal/nodes/interface.d.ts +2 -2
  169. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  170. package/dist/internal/nodes/nodesAccess.js +28 -16
  171. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  172. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  173. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  174. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  175. package/dist/internal/nodes/nodesManagement.js +9 -7
  176. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  177. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  178. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  179. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  180. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  181. package/dist/internal/photos/albums.d.ts +3 -3
  182. package/dist/internal/photos/albums.js.map +1 -1
  183. package/dist/internal/photos/apiService.d.ts +1 -1
  184. package/dist/internal/photos/apiService.js +3 -6
  185. package/dist/internal/photos/apiService.js.map +1 -1
  186. package/dist/internal/photos/cache.d.ts +1 -1
  187. package/dist/internal/photos/index.d.ts +5 -5
  188. package/dist/internal/photos/index.js.map +1 -1
  189. package/dist/internal/photos/interface.d.ts +2 -2
  190. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  191. package/dist/internal/photos/photosTimeline.js +1 -2
  192. package/dist/internal/photos/photosTimeline.js.map +1 -1
  193. package/dist/internal/sdkEvents.d.ts +1 -1
  194. package/dist/internal/sdkEvents.js +2 -7
  195. package/dist/internal/sdkEvents.js.map +1 -1
  196. package/dist/internal/sdkEvents.test.js +8 -8
  197. package/dist/internal/shares/apiService.d.ts +2 -2
  198. package/dist/internal/shares/apiService.js +5 -3
  199. package/dist/internal/shares/apiService.js.map +1 -1
  200. package/dist/internal/shares/cache.d.ts +2 -2
  201. package/dist/internal/shares/cache.js +12 -6
  202. package/dist/internal/shares/cache.js.map +1 -1
  203. package/dist/internal/shares/cache.test.js.map +1 -1
  204. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  205. package/dist/internal/shares/cryptoCache.test.js +8 -2
  206. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.d.ts +3 -3
  208. package/dist/internal/shares/cryptoService.js.map +1 -1
  209. package/dist/internal/shares/cryptoService.test.js +42 -42
  210. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  211. package/dist/internal/shares/index.d.ts +4 -4
  212. package/dist/internal/shares/index.js.map +1 -1
  213. package/dist/internal/shares/interface.d.ts +2 -2
  214. package/dist/internal/shares/manager.d.ts +7 -7
  215. package/dist/internal/shares/manager.js.map +1 -1
  216. package/dist/internal/shares/manager.test.js +71 -63
  217. package/dist/internal/shares/manager.test.js.map +1 -1
  218. package/dist/internal/sharing/apiService.d.ts +4 -4
  219. package/dist/internal/sharing/apiService.js +4 -3
  220. package/dist/internal/sharing/apiService.js.map +1 -1
  221. package/dist/internal/sharing/cache.d.ts +2 -1
  222. package/dist/internal/sharing/cache.js +9 -0
  223. package/dist/internal/sharing/cache.js.map +1 -1
  224. package/dist/internal/sharing/cache.test.js +33 -33
  225. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  226. package/dist/internal/sharing/cryptoService.js +3 -5
  227. package/dist/internal/sharing/cryptoService.js.map +1 -1
  228. package/dist/internal/sharing/cryptoService.test.js +39 -39
  229. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  230. package/dist/internal/sharing/events.d.ts +5 -4
  231. package/dist/internal/sharing/events.js +28 -19
  232. package/dist/internal/sharing/events.js.map +1 -1
  233. package/dist/internal/sharing/events.test.js +101 -88
  234. package/dist/internal/sharing/events.test.js.map +1 -1
  235. package/dist/internal/sharing/index.d.ts +6 -6
  236. package/dist/internal/sharing/index.js.map +1 -1
  237. package/dist/internal/sharing/interface.d.ts +5 -4
  238. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  239. package/dist/internal/sharing/sharingAccess.js +8 -4
  240. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  241. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  242. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  243. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  244. package/dist/internal/sharing/sharingManagement.js +5 -7
  245. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  246. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  247. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  248. package/dist/internal/uids.js.map +1 -1
  249. package/dist/internal/upload/apiService.d.ts +3 -3
  250. package/dist/internal/upload/apiService.js +1 -1
  251. package/dist/internal/upload/apiService.js.map +1 -1
  252. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  253. package/dist/internal/upload/blockVerifier.js +1 -1
  254. package/dist/internal/upload/blockVerifier.js.map +1 -1
  255. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  256. package/dist/internal/upload/cryptoService.d.ts +4 -4
  257. package/dist/internal/upload/cryptoService.js +4 -4
  258. package/dist/internal/upload/cryptoService.js.map +1 -1
  259. package/dist/internal/upload/digests.js.map +1 -1
  260. package/dist/internal/upload/fileUploader.d.ts +6 -6
  261. package/dist/internal/upload/fileUploader.js.map +1 -1
  262. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  263. package/dist/internal/upload/index.d.ts +5 -5
  264. package/dist/internal/upload/index.js.map +1 -1
  265. package/dist/internal/upload/interface.d.ts +4 -3
  266. package/dist/internal/upload/manager.d.ts +5 -5
  267. package/dist/internal/upload/manager.js +15 -9
  268. package/dist/internal/upload/manager.js.map +1 -1
  269. package/dist/internal/upload/manager.test.js +139 -128
  270. package/dist/internal/upload/manager.test.js.map +1 -1
  271. package/dist/internal/upload/streamUploader.d.ts +6 -6
  272. package/dist/internal/upload/streamUploader.js +9 -7
  273. package/dist/internal/upload/streamUploader.js.map +1 -1
  274. package/dist/internal/upload/streamUploader.test.js +17 -12
  275. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  276. package/dist/internal/upload/telemetry.d.ts +3 -3
  277. package/dist/internal/upload/telemetry.js +5 -3
  278. package/dist/internal/upload/telemetry.js.map +1 -1
  279. package/dist/internal/upload/telemetry.test.js +8 -8
  280. package/dist/internal/upload/telemetry.test.js.map +1 -1
  281. package/dist/protonDriveClient.d.ts +8 -8
  282. package/dist/protonDriveClient.js +12 -9
  283. package/dist/protonDriveClient.js.map +1 -1
  284. package/dist/protonDrivePhotosClient.js.map +1 -1
  285. package/dist/telemetry.js +18 -15
  286. package/dist/telemetry.js.map +1 -1
  287. package/dist/tests/logger.js.map +1 -1
  288. package/dist/tests/telemetry.d.ts +1 -1
  289. package/dist/transformers.d.ts +1 -1
  290. package/dist/transformers.js +5 -2
  291. package/dist/transformers.js.map +1 -1
  292. package/package.json +1 -1
  293. package/src/cache/interface.ts +22 -22
  294. package/src/cache/memoryCache.test.ts +7 -7
  295. package/src/cache/memoryCache.ts +4 -4
  296. package/src/cache/nullCache.ts +1 -1
  297. package/src/config.ts +5 -5
  298. package/src/crypto/driveCrypto.test.ts +15 -15
  299. package/src/crypto/driveCrypto.ts +120 -156
  300. package/src/crypto/hmac.ts +1 -1
  301. package/src/crypto/interface.ts +63 -72
  302. package/src/crypto/openPGPCrypto.ts +74 -94
  303. package/src/crypto/utils.ts +1 -1
  304. package/src/diagnostic/eventsGenerator.ts +2 -2
  305. package/src/diagnostic/httpClient.ts +6 -2
  306. package/src/diagnostic/index.ts +12 -10
  307. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  308. package/src/diagnostic/interface.ts +81 -81
  309. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  310. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  311. package/src/diagnostic/telemetry.ts +4 -1
  312. package/src/diagnostic/zipGenerators.test.ts +1 -1
  313. package/src/diagnostic/zipGenerators.ts +3 -3
  314. package/src/errors.ts +21 -21
  315. package/src/index.ts +3 -3
  316. package/src/interface/account.ts +10 -10
  317. package/src/interface/author.ts +6 -6
  318. package/src/interface/config.ts +4 -4
  319. package/src/interface/devices.ts +6 -6
  320. package/src/interface/download.ts +12 -9
  321. package/src/interface/events.ts +45 -39
  322. package/src/interface/httpClient.ts +11 -11
  323. package/src/interface/index.ts +76 -19
  324. package/src/interface/nodes.ts +47 -49
  325. package/src/interface/result.ts +1 -3
  326. package/src/interface/sharing.ts +60 -57
  327. package/src/interface/telemetry.ts +74 -74
  328. package/src/interface/thumbnail.ts +5 -6
  329. package/src/interface/upload.ts +20 -12
  330. package/src/internal/apiService/apiService.test.ts +109 -76
  331. package/src/internal/apiService/apiService.ts +40 -26
  332. package/src/internal/apiService/coreTypes.ts +2474 -2463
  333. package/src/internal/apiService/driveTypes.ts +1868 -1822
  334. package/src/internal/apiService/errorCodes.ts +4 -4
  335. package/src/internal/apiService/errors.test.ts +25 -23
  336. package/src/internal/apiService/errors.ts +15 -9
  337. package/src/internal/apiService/index.ts +1 -1
  338. package/src/internal/apiService/transformers.ts +2 -2
  339. package/src/internal/asyncIteratorMap.test.ts +4 -4
  340. package/src/internal/asyncIteratorMap.ts +1 -1
  341. package/src/internal/asyncIteratorRace.test.ts +149 -0
  342. package/src/internal/asyncIteratorRace.ts +79 -0
  343. package/src/internal/batch.test.ts +50 -0
  344. package/src/internal/batch.ts +9 -0
  345. package/src/internal/batchLoading.test.ts +13 -14
  346. package/src/internal/batchLoading.ts +8 -8
  347. package/src/internal/devices/apiService.ts +58 -51
  348. package/src/internal/devices/cryptoService.ts +22 -17
  349. package/src/internal/devices/index.ts +17 -10
  350. package/src/internal/devices/interface.ts +21 -12
  351. package/src/internal/devices/manager.test.ts +40 -9
  352. package/src/internal/devices/manager.ts +3 -3
  353. package/src/internal/download/apiService.ts +66 -49
  354. package/src/internal/download/cryptoService.ts +34 -18
  355. package/src/internal/download/fileDownloader.test.ts +25 -9
  356. package/src/internal/download/fileDownloader.ts +36 -18
  357. package/src/internal/download/index.ts +19 -19
  358. package/src/internal/download/interface.ts +19 -20
  359. package/src/internal/download/queue.ts +3 -3
  360. package/src/internal/download/telemetry.test.ts +11 -11
  361. package/src/internal/download/telemetry.ts +24 -14
  362. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  363. package/src/internal/download/thumbnailDownloader.ts +43 -32
  364. package/src/internal/errors.ts +7 -5
  365. package/src/internal/events/apiService.ts +30 -17
  366. package/src/internal/events/coreEventManager.test.ts +18 -18
  367. package/src/internal/events/coreEventManager.ts +9 -6
  368. package/src/internal/events/eventManager.test.ts +108 -82
  369. package/src/internal/events/eventManager.ts +16 -5
  370. package/src/internal/events/index.ts +75 -47
  371. package/src/internal/events/interface.ts +47 -39
  372. package/src/internal/events/volumeEventManager.test.ts +61 -65
  373. package/src/internal/events/volumeEventManager.ts +18 -9
  374. package/src/internal/nodes/apiService.test.ts +197 -147
  375. package/src/internal/nodes/apiService.ts +288 -174
  376. package/src/internal/nodes/cache.test.ts +48 -20
  377. package/src/internal/nodes/cache.ts +60 -44
  378. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  379. package/src/internal/nodes/cryptoCache.ts +10 -5
  380. package/src/internal/nodes/cryptoService.test.ts +492 -351
  381. package/src/internal/nodes/cryptoService.ts +170 -88
  382. package/src/internal/nodes/events.test.ts +38 -28
  383. package/src/internal/nodes/events.ts +13 -12
  384. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  385. package/src/internal/nodes/extendedAttributes.ts +20 -15
  386. package/src/internal/nodes/index.test.ts +133 -0
  387. package/src/internal/nodes/index.ts +27 -15
  388. package/src/internal/nodes/interface.ts +42 -29
  389. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  390. package/src/internal/nodes/nodesAccess.ts +73 -49
  391. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  392. package/src/internal/nodes/nodesManagement.ts +39 -32
  393. package/src/internal/nodes/nodesRevisions.ts +7 -7
  394. package/src/internal/nodes/validations.ts +2 -2
  395. package/src/internal/photos/albums.ts +5 -5
  396. package/src/internal/photos/apiService.ts +4 -7
  397. package/src/internal/photos/cache.ts +1 -1
  398. package/src/internal/photos/index.ts +8 -8
  399. package/src/internal/photos/interface.ts +2 -2
  400. package/src/internal/photos/photosTimeline.ts +4 -5
  401. package/src/internal/sdkEvents.test.ts +10 -10
  402. package/src/internal/sdkEvents.ts +5 -13
  403. package/src/internal/shares/apiService.ts +44 -33
  404. package/src/internal/shares/cache.test.ts +6 -4
  405. package/src/internal/shares/cache.ts +21 -12
  406. package/src/internal/shares/cryptoCache.test.ts +17 -11
  407. package/src/internal/shares/cryptoCache.ts +4 -4
  408. package/src/internal/shares/cryptoService.test.ts +72 -74
  409. package/src/internal/shares/cryptoService.ts +48 -23
  410. package/src/internal/shares/index.ts +23 -11
  411. package/src/internal/shares/interface.ts +8 -8
  412. package/src/internal/shares/manager.test.ts +88 -80
  413. package/src/internal/shares/manager.ts +19 -19
  414. package/src/internal/sharing/apiService.ts +282 -175
  415. package/src/internal/sharing/cache.test.ts +35 -35
  416. package/src/internal/sharing/cache.ts +11 -2
  417. package/src/internal/sharing/cryptoService.test.ts +58 -46
  418. package/src/internal/sharing/cryptoService.ts +121 -84
  419. package/src/internal/sharing/events.test.ts +113 -102
  420. package/src/internal/sharing/events.ts +42 -24
  421. package/src/internal/sharing/index.ts +22 -11
  422. package/src/internal/sharing/interface.ts +40 -40
  423. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  424. package/src/internal/sharing/sharingAccess.ts +39 -21
  425. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  426. package/src/internal/sharing/sharingManagement.ts +138 -65
  427. package/src/internal/uids.ts +1 -1
  428. package/src/internal/upload/apiService.ts +167 -117
  429. package/src/internal/upload/blockVerifier.ts +8 -6
  430. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  431. package/src/internal/upload/cryptoService.ts +42 -36
  432. package/src/internal/upload/digests.ts +2 -2
  433. package/src/internal/upload/fileUploader.test.ts +15 -3
  434. package/src/internal/upload/fileUploader.ts +39 -17
  435. package/src/internal/upload/index.ts +13 -14
  436. package/src/internal/upload/interface.ts +79 -78
  437. package/src/internal/upload/manager.test.ts +170 -156
  438. package/src/internal/upload/manager.ts +66 -39
  439. package/src/internal/upload/queue.ts +3 -3
  440. package/src/internal/upload/streamUploader.test.ts +40 -26
  441. package/src/internal/upload/streamUploader.ts +87 -69
  442. package/src/internal/upload/telemetry.test.ts +11 -11
  443. package/src/internal/upload/telemetry.ts +25 -15
  444. package/src/internal/wait.test.ts +1 -1
  445. package/src/internal/wait.ts +3 -3
  446. package/src/protonDriveClient.ts +121 -39
  447. package/src/protonDrivePhotosClient.ts +16 -10
  448. package/src/telemetry.ts +60 -52
  449. package/src/tests/logger.ts +1 -1
  450. package/src/tests/telemetry.ts +2 -2
  451. package/src/transformers.ts +29 -21
  452. package/src/version.ts +0 -1
@@ -4,7 +4,7 @@ const crypto_1 = require("../../crypto");
4
4
  const interface_1 = require("../../interface");
5
5
  const telemetry_1 = require("../../tests/telemetry");
6
6
  const cryptoService_1 = require("./cryptoService");
7
- describe("nodesCryptoService", () => {
7
+ describe('nodesCryptoService', () => {
8
8
  let telemetry;
9
9
  let driveCrypto;
10
10
  let account;
@@ -15,13 +15,13 @@ describe("nodesCryptoService", () => {
15
15
  telemetry = (0, telemetry_1.getMockTelemetry)();
16
16
  driveCrypto = {
17
17
  decryptKey: jest.fn(async () => Promise.resolve({
18
- passphrase: "pass",
19
- key: "decryptedKey",
20
- passphraseSessionKey: "passphraseSessionKey",
18
+ passphrase: 'pass',
19
+ key: 'decryptedKey',
20
+ passphraseSessionKey: 'passphraseSessionKey',
21
21
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
22
22
  })),
23
23
  decryptNodeName: jest.fn(async () => Promise.resolve({
24
- name: "name",
24
+ name: 'name',
25
25
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
26
26
  })),
27
27
  decryptNodeHashKey: jest.fn(async () => Promise.resolve({
@@ -29,15 +29,15 @@ describe("nodesCryptoService", () => {
29
29
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
30
30
  })),
31
31
  decryptExtendedAttributes: jest.fn(async () => Promise.resolve({
32
- extendedAttributes: "{}",
32
+ extendedAttributes: '{}',
33
33
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
34
34
  })),
35
35
  encryptNodeName: jest.fn(async () => Promise.resolve({
36
- armoredNodeName: "armoredName",
36
+ armoredNodeName: 'armoredName',
37
37
  })),
38
38
  // @ts-expect-error No need to implement all methods for mocking
39
39
  decryptAndVerifySessionKey: jest.fn(async () => Promise.resolve({
40
- sessionKey: "contentKeyPacketSessionKey",
40
+ sessionKey: 'contentKeyPacketSessionKey',
41
41
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
42
42
  })),
43
43
  };
@@ -48,19 +48,19 @@ describe("nodesCryptoService", () => {
48
48
  // @ts-expect-error No need to implement all methods for mocking
49
49
  sharesService = {
50
50
  getMyFilesShareMemberEmailKey: jest.fn(async () => ({
51
- email: "email",
52
- addressKey: "key",
51
+ email: 'email',
52
+ addressKey: 'key',
53
53
  })),
54
54
  getVolumeMetricContext: jest.fn().mockResolvedValue('own_volume'),
55
55
  };
56
56
  cryptoService = new cryptoService_1.NodesCryptoService(telemetry, driveCrypto, account, sharesService);
57
57
  });
58
- const parentKey = "parentKey";
58
+ const parentKey = 'parentKey';
59
59
  function verifyLogEventVerificationError(options = {}) {
60
60
  expect(telemetry.logEvent).toHaveBeenCalledTimes(1);
61
61
  expect(telemetry.logEvent).toHaveBeenCalledWith({
62
- eventName: "verificationError",
63
- volumeType: "own_volume",
62
+ eventName: 'verificationError',
63
+ volumeType: 'own_volume',
64
64
  fromBefore2024: false,
65
65
  addressMatchingDefaultShare: false,
66
66
  ...options,
@@ -69,132 +69,143 @@ describe("nodesCryptoService", () => {
69
69
  function verifyLogEventDecryptionError(options = {}) {
70
70
  expect(telemetry.logEvent).toHaveBeenCalledTimes(1);
71
71
  expect(telemetry.logEvent).toHaveBeenCalledWith({
72
- eventName: "decryptionError",
73
- volumeType: "own_volume",
72
+ eventName: 'decryptionError',
73
+ volumeType: 'own_volume',
74
74
  fromBefore2024: false,
75
75
  ...options,
76
76
  });
77
77
  }
78
- describe("folder node", () => {
78
+ describe('folder node', () => {
79
79
  const encryptedNode = {
80
- uid: "volumeId~nodeId",
81
- parentUid: "volumeId~parentId",
80
+ uid: 'volumeId~nodeId',
81
+ parentUid: 'volumeId~parentId',
82
82
  encryptedCrypto: {
83
- signatureEmail: "signatureEmail",
84
- nameSignatureEmail: "nameSignatureEmail",
85
- armoredKey: "armoredKey",
86
- armoredNodePassphrase: "armoredNodePassphrase",
87
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
83
+ signatureEmail: 'signatureEmail',
84
+ nameSignatureEmail: 'nameSignatureEmail',
85
+ armoredKey: 'armoredKey',
86
+ armoredNodePassphrase: 'armoredNodePassphrase',
87
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
88
88
  folder: {
89
- armoredHashKey: "armoredHashKey",
90
- armoredExtendedAttributes: "folderArmoredExtendedAttributes",
89
+ armoredHashKey: 'armoredHashKey',
90
+ armoredExtendedAttributes: 'folderArmoredExtendedAttributes',
91
91
  },
92
92
  },
93
93
  };
94
94
  function verifyResult(result, expectedNode = {}, expectedKeys = {}) {
95
95
  expect(result).toMatchObject({
96
96
  node: {
97
- name: { ok: true, value: "name" },
98
- keyAuthor: { ok: true, value: "signatureEmail" },
99
- nameAuthor: { ok: true, value: "nameSignatureEmail" },
97
+ name: { ok: true, value: 'name' },
98
+ keyAuthor: { ok: true, value: 'signatureEmail' },
99
+ nameAuthor: { ok: true, value: 'nameSignatureEmail' },
100
100
  folder: {
101
- extendedAttributes: "{}",
101
+ extendedAttributes: '{}',
102
102
  },
103
103
  activeRevision: undefined,
104
104
  errors: undefined,
105
105
  ...expectedNode,
106
106
  },
107
- ...expectedKeys === 'noKeys' ? {} : {
108
- keys: {
109
- passphrase: "pass",
110
- key: "decryptedKey",
111
- passphraseSessionKey: "passphraseSessionKey",
112
- hashKey: new Uint8Array(),
113
- ...expectedKeys,
114
- }
115
- },
107
+ ...(expectedKeys === 'noKeys'
108
+ ? {}
109
+ : {
110
+ keys: {
111
+ passphrase: 'pass',
112
+ key: 'decryptedKey',
113
+ passphraseSessionKey: 'passphraseSessionKey',
114
+ hashKey: new Uint8Array(),
115
+ ...expectedKeys,
116
+ },
117
+ }),
116
118
  });
117
119
  }
118
- describe("should decrypt successfuly", () => {
119
- it("same author everywhere", async () => {
120
+ describe('should decrypt successfuly', () => {
121
+ it('same author everywhere', async () => {
120
122
  const encryptedNode = {
121
123
  encryptedCrypto: {
122
- signatureEmail: "signatureEmail",
123
- nameSignatureEmail: "signatureEmail",
124
- armoredKey: "armoredKey",
125
- armoredNodePassphrase: "armoredNodePassphrase",
126
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
124
+ signatureEmail: 'signatureEmail',
125
+ nameSignatureEmail: 'signatureEmail',
126
+ armoredKey: 'armoredKey',
127
+ armoredNodePassphrase: 'armoredNodePassphrase',
128
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
127
129
  folder: {
128
- armoredHashKey: "armoredHashKey",
129
- armoredExtendedAttributes: "folderArmoredExtendedAttributes",
130
+ armoredHashKey: 'armoredHashKey',
131
+ armoredExtendedAttributes: 'folderArmoredExtendedAttributes',
130
132
  },
131
133
  },
132
134
  };
133
135
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
134
136
  verifyResult(result, {
135
- keyAuthor: { ok: true, value: "signatureEmail" },
136
- nameAuthor: { ok: true, value: "signatureEmail" },
137
+ keyAuthor: { ok: true, value: 'signatureEmail' },
138
+ nameAuthor: { ok: true, value: 'signatureEmail' },
137
139
  });
138
140
  expect(account.getPublicKeys).toHaveBeenCalledTimes(1);
139
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
141
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
140
142
  expect(telemetry.logEvent).not.toHaveBeenCalled();
141
143
  });
142
- it("different authors on key and name", async () => {
144
+ it('different authors on key and name', async () => {
143
145
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
144
146
  verifyResult(result);
145
147
  expect(account.getPublicKeys).toHaveBeenCalledTimes(2);
146
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
147
- expect(account.getPublicKeys).toHaveBeenCalledWith("nameSignatureEmail");
148
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
149
+ expect(account.getPublicKeys).toHaveBeenCalledWith('nameSignatureEmail');
148
150
  expect(telemetry.logEvent).not.toHaveBeenCalled();
149
151
  });
150
152
  });
151
- describe("should decrypt with verification issues", () => {
152
- it("on node key", async () => {
153
+ describe('should decrypt with verification issues', () => {
154
+ it('on node key', async () => {
153
155
  driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
154
- passphrase: "pass",
155
- key: "decryptedKey",
156
- passphraseSessionKey: "passphraseSessionKey",
156
+ passphrase: 'pass',
157
+ key: 'decryptedKey',
158
+ passphraseSessionKey: 'passphraseSessionKey',
157
159
  verified: crypto_1.VERIFICATION_STATUS.NOT_SIGNED,
158
160
  }));
159
161
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
160
162
  verifyResult(result, {
161
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Missing signature for key" } },
163
+ keyAuthor: {
164
+ ok: false,
165
+ error: { claimedAuthor: 'signatureEmail', error: 'Missing signature for key' },
166
+ },
162
167
  });
163
168
  verifyLogEventVerificationError({
164
169
  field: 'nodeKey',
165
170
  });
166
171
  });
167
- it("on node name", async () => {
172
+ it('on node name', async () => {
168
173
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.resolve({
169
- name: "name",
174
+ name: 'name',
170
175
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
171
176
  }));
172
177
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
173
178
  verifyResult(result, {
174
- nameAuthor: { ok: false, error: { claimedAuthor: "nameSignatureEmail", error: "Signature verification for name failed" } },
179
+ nameAuthor: {
180
+ ok: false,
181
+ error: { claimedAuthor: 'nameSignatureEmail', error: 'Signature verification for name failed' },
182
+ },
175
183
  });
176
184
  verifyLogEventVerificationError({
177
185
  field: 'nodeName',
178
186
  });
179
187
  });
180
- it("on hash key", async () => {
188
+ it('on hash key', async () => {
181
189
  driveCrypto.decryptNodeHashKey = jest.fn(async () => Promise.resolve({
182
190
  hashKey: new Uint8Array(),
183
191
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
184
192
  }));
185
193
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
186
194
  verifyResult(result, {
187
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Signature verification for hash key failed" } },
195
+ keyAuthor: {
196
+ ok: false,
197
+ error: { claimedAuthor: 'signatureEmail', error: 'Signature verification for hash key failed' },
198
+ },
188
199
  });
189
200
  verifyLogEventVerificationError({
190
201
  field: 'nodeHashKey',
191
202
  });
192
203
  });
193
- it("on node key and hash key reports error from node key", async () => {
204
+ it('on node key and hash key reports error from node key', async () => {
194
205
  driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
195
- passphrase: "pass",
196
- key: "decryptedKey",
197
- passphraseSessionKey: "passphraseSessionKey",
206
+ passphrase: 'pass',
207
+ key: 'decryptedKey',
208
+ passphraseSessionKey: 'passphraseSessionKey',
198
209
  verified: crypto_1.VERIFICATION_STATUS.NOT_SIGNED,
199
210
  }));
200
211
  driveCrypto.decryptNodeHashKey = jest.fn(async () => Promise.resolve({
@@ -203,34 +214,49 @@ describe("nodesCryptoService", () => {
203
214
  }));
204
215
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
205
216
  verifyResult(result, {
206
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Missing signature for key" } },
217
+ keyAuthor: {
218
+ ok: false,
219
+ error: { claimedAuthor: 'signatureEmail', error: 'Missing signature for key' },
220
+ },
207
221
  });
208
222
  verifyLogEventVerificationError({
209
223
  field: 'nodeKey',
210
224
  });
211
225
  });
212
- it("on folder extended attributes", async () => {
226
+ it('on folder extended attributes', async () => {
213
227
  driveCrypto.decryptExtendedAttributes = jest.fn(async () => Promise.resolve({
214
- extendedAttributes: "{}",
228
+ extendedAttributes: '{}',
215
229
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
216
230
  }));
217
231
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
218
232
  verifyResult(result, {
219
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Signature verification for attributes failed" } },
233
+ keyAuthor: {
234
+ ok: false,
235
+ error: {
236
+ claimedAuthor: 'signatureEmail',
237
+ error: 'Signature verification for attributes failed',
238
+ },
239
+ },
220
240
  });
221
241
  verifyLogEventVerificationError({
222
242
  field: 'nodeExtendedAttributes',
223
243
  });
224
244
  });
225
245
  });
226
- describe("should decrypt with decryption issues", () => {
227
- it("on node key", async () => {
228
- const error = new Error("Decryption error");
246
+ describe('should decrypt with decryption issues', () => {
247
+ it('on node key', async () => {
248
+ const error = new Error('Decryption error');
229
249
  driveCrypto.decryptKey = jest.fn(async () => Promise.reject(error));
230
250
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
231
251
  verifyResult(result, {
232
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Failed to decrypt node key: Decryption error" } },
233
- errors: [new Error("Decryption error")],
252
+ keyAuthor: {
253
+ ok: false,
254
+ error: {
255
+ claimedAuthor: 'signatureEmail',
256
+ error: 'Failed to decrypt node key: Decryption error',
257
+ },
258
+ },
259
+ errors: [new Error('Decryption error')],
234
260
  folder: undefined,
235
261
  }, 'noKeys');
236
262
  verifyLogEventDecryptionError({
@@ -238,21 +264,24 @@ describe("nodesCryptoService", () => {
238
264
  error,
239
265
  });
240
266
  });
241
- it("on node name", async () => {
242
- const error = new Error("Decryption error");
267
+ it('on node name', async () => {
268
+ const error = new Error('Decryption error');
243
269
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.reject(error));
244
270
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
245
271
  verifyResult(result, {
246
272
  name: { ok: false, error },
247
- nameAuthor: { ok: false, error: { claimedAuthor: "nameSignatureEmail", error: "Decryption error" } },
273
+ nameAuthor: {
274
+ ok: false,
275
+ error: { claimedAuthor: 'nameSignatureEmail', error: 'Decryption error' },
276
+ },
248
277
  }, 'noKeys');
249
278
  verifyLogEventDecryptionError({
250
279
  field: 'nodeName',
251
280
  error,
252
281
  });
253
282
  });
254
- it("on hash key", async () => {
255
- const error = new Error("Decryption error");
283
+ it('on hash key', async () => {
284
+ const error = new Error('Decryption error');
256
285
  driveCrypto.decryptNodeHashKey = jest.fn(async () => Promise.reject(error));
257
286
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
258
287
  verifyResult(result, {
@@ -263,8 +292,8 @@ describe("nodesCryptoService", () => {
263
292
  error,
264
293
  });
265
294
  });
266
- it("on folder extended attributes", async () => {
267
- const error = new Error("Decryption error");
295
+ it('on folder extended attributes', async () => {
296
+ const error = new Error('Decryption error');
268
297
  driveCrypto.decryptExtendedAttributes = jest.fn(async () => Promise.reject(error));
269
298
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
270
299
  verifyResult(result, {
@@ -277,187 +306,216 @@ describe("nodesCryptoService", () => {
277
306
  });
278
307
  });
279
308
  });
280
- it("should fail when keys cannot be loaded", async () => {
281
- account.getPublicKeys = jest.fn().mockRejectedValue(new Error("Failed to load keys"));
309
+ it('should fail when keys cannot be loaded', async () => {
310
+ account.getPublicKeys = jest.fn().mockRejectedValue(new Error('Failed to load keys'));
282
311
  const result = cryptoService.decryptNode(encryptedNode, parentKey);
283
- await expect(result).rejects.toThrow("Failed to load keys");
312
+ await expect(result).rejects.toThrow('Failed to load keys');
284
313
  });
285
314
  });
286
- describe("file node", () => {
315
+ describe('file node', () => {
287
316
  const encryptedNode = {
288
- uid: "volumeId~nodeId",
289
- parentUid: "volumeId~parentId",
317
+ uid: 'volumeId~nodeId',
318
+ parentUid: 'volumeId~parentId',
290
319
  encryptedCrypto: {
291
- signatureEmail: "signatureEmail",
292
- nameSignatureEmail: "nameSignatureEmail",
293
- armoredKey: "armoredKey",
294
- armoredNodePassphrase: "armoredNodePassphrase",
295
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
320
+ signatureEmail: 'signatureEmail',
321
+ nameSignatureEmail: 'nameSignatureEmail',
322
+ armoredKey: 'armoredKey',
323
+ armoredNodePassphrase: 'armoredNodePassphrase',
324
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
296
325
  file: {
297
- base64ContentKeyPacket: "base64ContentKeyPacket",
326
+ base64ContentKeyPacket: 'base64ContentKeyPacket',
298
327
  },
299
328
  activeRevision: {
300
- uid: "revisionUid",
301
- state: "active",
302
- signatureEmail: "revisionSignatureEmail",
303
- armoredExtendedAttributes: "encryptedExtendedAttributes",
329
+ uid: 'revisionUid',
330
+ state: 'active',
331
+ signatureEmail: 'revisionSignatureEmail',
332
+ armoredExtendedAttributes: 'encryptedExtendedAttributes',
304
333
  },
305
334
  },
306
335
  };
307
336
  function verifyResult(result, expectedNode = {}, expectedKeys = {}) {
308
337
  expect(result).toMatchObject({
309
338
  node: {
310
- name: { ok: true, value: "name" },
311
- keyAuthor: { ok: true, value: "signatureEmail" },
312
- nameAuthor: { ok: true, value: "nameSignatureEmail" },
339
+ name: { ok: true, value: 'name' },
340
+ keyAuthor: { ok: true, value: 'signatureEmail' },
341
+ nameAuthor: { ok: true, value: 'nameSignatureEmail' },
313
342
  folder: undefined,
314
343
  activeRevision: {
315
- ok: true, value: {
316
- uid: "revisionUid",
344
+ ok: true,
345
+ value: {
346
+ uid: 'revisionUid',
317
347
  state: interface_1.RevisionState.Active,
318
348
  creationTime: undefined,
319
- extendedAttributes: "{}",
320
- contentAuthor: { ok: true, value: "revisionSignatureEmail" },
321
- }
349
+ extendedAttributes: '{}',
350
+ contentAuthor: { ok: true, value: 'revisionSignatureEmail' },
351
+ },
322
352
  },
323
353
  errors: undefined,
324
354
  ...expectedNode,
325
355
  },
326
- ...expectedKeys === 'noKeys' ? {} : {
327
- keys: {
328
- passphrase: "pass",
329
- key: "decryptedKey",
330
- passphraseSessionKey: "passphraseSessionKey",
331
- hashKey: undefined,
332
- contentKeyPacketSessionKey: "contentKeyPacketSessionKey",
333
- ...expectedKeys,
334
- },
335
- },
356
+ ...(expectedKeys === 'noKeys'
357
+ ? {}
358
+ : {
359
+ keys: {
360
+ passphrase: 'pass',
361
+ key: 'decryptedKey',
362
+ passphraseSessionKey: 'passphraseSessionKey',
363
+ hashKey: undefined,
364
+ contentKeyPacketSessionKey: 'contentKeyPacketSessionKey',
365
+ ...expectedKeys,
366
+ },
367
+ }),
336
368
  });
337
369
  }
338
- describe("should decrypt successfuly", () => {
339
- it("same author everywhere", async () => {
370
+ describe('should decrypt successfuly', () => {
371
+ it('same author everywhere', async () => {
340
372
  const encryptedNode = {
341
373
  encryptedCrypto: {
342
- signatureEmail: "signatureEmail",
343
- nameSignatureEmail: "signatureEmail",
344
- armoredKey: "armoredKey",
345
- armoredNodePassphrase: "armoredNodePassphrase",
346
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
374
+ signatureEmail: 'signatureEmail',
375
+ nameSignatureEmail: 'signatureEmail',
376
+ armoredKey: 'armoredKey',
377
+ armoredNodePassphrase: 'armoredNodePassphrase',
378
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
347
379
  file: {
348
- base64ContentKeyPacket: "base64ContentKeyPacket",
380
+ base64ContentKeyPacket: 'base64ContentKeyPacket',
349
381
  },
350
382
  activeRevision: {
351
- uid: "revisionUid",
352
- state: "active",
353
- signatureEmail: "signatureEmail",
354
- armoredExtendedAttributes: "encryptedExtendedAttributes",
383
+ uid: 'revisionUid',
384
+ state: 'active',
385
+ signatureEmail: 'signatureEmail',
386
+ armoredExtendedAttributes: 'encryptedExtendedAttributes',
355
387
  },
356
388
  },
357
389
  };
358
390
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
359
391
  verifyResult(result, {
360
- keyAuthor: { ok: true, value: "signatureEmail" },
361
- nameAuthor: { ok: true, value: "signatureEmail" },
392
+ keyAuthor: { ok: true, value: 'signatureEmail' },
393
+ nameAuthor: { ok: true, value: 'signatureEmail' },
362
394
  activeRevision: {
363
- ok: true, value: {
364
- uid: "revisionUid",
395
+ ok: true,
396
+ value: {
397
+ uid: 'revisionUid',
365
398
  state: interface_1.RevisionState.Active,
366
399
  // @ts-expect-error Ignore mocked data.
367
400
  creationTime: undefined,
368
- extendedAttributes: "{}",
369
- contentAuthor: { ok: true, value: "signatureEmail" },
370
- }
401
+ extendedAttributes: '{}',
402
+ contentAuthor: { ok: true, value: 'signatureEmail' },
403
+ },
371
404
  },
372
405
  });
373
406
  expect(account.getPublicKeys).toHaveBeenCalledTimes(2); // node + revision
374
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
407
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
375
408
  expect(telemetry.logEvent).not.toHaveBeenCalled();
376
409
  });
377
- it("different authors on key and name", async () => {
410
+ it('different authors on key and name', async () => {
378
411
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
379
412
  verifyResult(result);
380
413
  expect(account.getPublicKeys).toHaveBeenCalledTimes(3);
381
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
382
- expect(account.getPublicKeys).toHaveBeenCalledWith("nameSignatureEmail");
383
- expect(account.getPublicKeys).toHaveBeenCalledWith("revisionSignatureEmail");
414
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
415
+ expect(account.getPublicKeys).toHaveBeenCalledWith('nameSignatureEmail');
416
+ expect(account.getPublicKeys).toHaveBeenCalledWith('revisionSignatureEmail');
384
417
  expect(telemetry.logEvent).not.toHaveBeenCalled();
385
418
  });
386
419
  });
387
- describe("should decrypt with verification issues", () => {
388
- it("on node key", async () => {
420
+ describe('should decrypt with verification issues', () => {
421
+ it('on node key', async () => {
389
422
  driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
390
- passphrase: "pass",
391
- key: "decryptedKey",
392
- passphraseSessionKey: "passphraseSessionKey",
423
+ passphrase: 'pass',
424
+ key: 'decryptedKey',
425
+ passphraseSessionKey: 'passphraseSessionKey',
393
426
  verified: crypto_1.VERIFICATION_STATUS.NOT_SIGNED,
394
427
  }));
395
428
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
396
429
  verifyResult(result, {
397
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Missing signature for key" } },
430
+ keyAuthor: {
431
+ ok: false,
432
+ error: { claimedAuthor: 'signatureEmail', error: 'Missing signature for key' },
433
+ },
398
434
  });
399
435
  verifyLogEventVerificationError({
400
436
  field: 'nodeKey',
401
437
  });
402
438
  });
403
- it("on node name", async () => {
439
+ it('on node name', async () => {
404
440
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.resolve({
405
- name: "name",
441
+ name: 'name',
406
442
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
407
443
  }));
408
444
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
409
445
  verifyResult(result, {
410
- nameAuthor: { ok: false, error: { claimedAuthor: "nameSignatureEmail", error: "Signature verification for name failed" } },
446
+ nameAuthor: {
447
+ ok: false,
448
+ error: { claimedAuthor: 'nameSignatureEmail', error: 'Signature verification for name failed' },
449
+ },
411
450
  });
412
451
  verifyLogEventVerificationError({
413
452
  field: 'nodeName',
414
453
  });
415
454
  });
416
- it("on folder extended attributes", async () => {
455
+ it('on folder extended attributes', async () => {
417
456
  driveCrypto.decryptExtendedAttributes = jest.fn(async () => Promise.resolve({
418
- extendedAttributes: "{}",
457
+ extendedAttributes: '{}',
419
458
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
420
459
  }));
421
460
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
422
461
  verifyResult(result, {
423
462
  activeRevision: {
424
- ok: true, value: {
425
- uid: "revisionUid",
426
- extendedAttributes: "{}",
463
+ ok: true,
464
+ value: {
465
+ uid: 'revisionUid',
466
+ extendedAttributes: '{}',
427
467
  state: interface_1.RevisionState.Active,
428
468
  // @ts-expect-error Ignore mocked data.
429
469
  creationTime: undefined,
430
- contentAuthor: { ok: false, error: { claimedAuthor: "revisionSignatureEmail", error: "Signature verification for attributes failed" } },
431
- }
470
+ contentAuthor: {
471
+ ok: false,
472
+ error: {
473
+ claimedAuthor: 'revisionSignatureEmail',
474
+ error: 'Signature verification for attributes failed',
475
+ },
476
+ },
477
+ },
432
478
  },
433
479
  });
434
480
  verifyLogEventVerificationError({
435
481
  field: 'nodeExtendedAttributes',
436
482
  });
437
483
  });
438
- it("on content key packet", async () => {
484
+ it('on content key packet', async () => {
439
485
  driveCrypto.decryptAndVerifySessionKey = jest.fn(async () => Promise.resolve({
440
- sessionKey: "contentKeyPacketSessionKey",
486
+ sessionKey: 'contentKeyPacketSessionKey',
441
487
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
442
488
  }));
443
489
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
444
490
  verifyResult(result, {
445
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Signature verification for content key failed" } },
491
+ keyAuthor: {
492
+ ok: false,
493
+ error: {
494
+ claimedAuthor: 'signatureEmail',
495
+ error: 'Signature verification for content key failed',
496
+ },
497
+ },
446
498
  });
447
499
  verifyLogEventVerificationError({
448
500
  field: 'nodeContentKey',
449
501
  });
450
502
  });
451
503
  });
452
- describe("should decrypt with decryption issues", () => {
453
- it("on node key", async () => {
454
- const error = new Error("Decryption error");
504
+ describe('should decrypt with decryption issues', () => {
505
+ it('on node key', async () => {
506
+ const error = new Error('Decryption error');
455
507
  driveCrypto.decryptKey = jest.fn(async () => Promise.reject(error));
456
508
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
457
509
  verifyResult(result, {
458
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Failed to decrypt node key: Decryption error" } },
510
+ keyAuthor: {
511
+ ok: false,
512
+ error: {
513
+ claimedAuthor: 'signatureEmail',
514
+ error: 'Failed to decrypt node key: Decryption error',
515
+ },
516
+ },
459
517
  activeRevision: { ok: false, error: new Error('Failed to decrypt node key: Decryption error') },
460
- errors: [new Error("Decryption error")],
518
+ errors: [new Error('Decryption error')],
461
519
  folder: undefined,
462
520
  }, 'noKeys');
463
521
  verifyLogEventDecryptionError({
@@ -465,37 +523,49 @@ describe("nodesCryptoService", () => {
465
523
  error,
466
524
  });
467
525
  });
468
- it("on node name", async () => {
469
- const error = new Error("Decryption error");
526
+ it('on node name', async () => {
527
+ const error = new Error('Decryption error');
470
528
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.reject(error));
471
529
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
472
530
  verifyResult(result, {
473
531
  name: { ok: false, error },
474
- nameAuthor: { ok: false, error: { claimedAuthor: "nameSignatureEmail", error: "Decryption error" } },
532
+ nameAuthor: {
533
+ ok: false,
534
+ error: { claimedAuthor: 'nameSignatureEmail', error: 'Decryption error' },
535
+ },
475
536
  }, 'noKeys');
476
537
  verifyLogEventDecryptionError({
477
538
  field: 'nodeName',
478
539
  error,
479
540
  });
480
541
  });
481
- it("on file extended attributes", async () => {
482
- const error = new Error("Decryption error");
542
+ it('on file extended attributes', async () => {
543
+ const error = new Error('Decryption error');
483
544
  driveCrypto.decryptExtendedAttributes = jest.fn(async () => Promise.reject(error));
484
545
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
485
546
  verifyResult(result, {
486
- activeRevision: { ok: false, error: new Error('Failed to decrypt active revision: Decryption error') },
547
+ activeRevision: {
548
+ ok: false,
549
+ error: new Error('Failed to decrypt active revision: Decryption error'),
550
+ },
487
551
  });
488
552
  verifyLogEventDecryptionError({
489
553
  field: 'nodeExtendedAttributes',
490
554
  error,
491
555
  });
492
556
  });
493
- it("on content key packet", async () => {
494
- const error = new Error("Decryption error");
557
+ it('on content key packet', async () => {
558
+ const error = new Error('Decryption error');
495
559
  driveCrypto.decryptAndVerifySessionKey = jest.fn(async () => Promise.reject(error));
496
560
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
497
561
  verifyResult(result, {
498
- keyAuthor: { ok: false, error: { claimedAuthor: "signatureEmail", error: 'Failed to decrypt content key: Decryption error' } },
562
+ keyAuthor: {
563
+ ok: false,
564
+ error: {
565
+ claimedAuthor: 'signatureEmail',
566
+ error: 'Failed to decrypt content key: Decryption error',
567
+ },
568
+ },
499
569
  errors: [error],
500
570
  }, {
501
571
  contentKeyPacketSessionKey: undefined,
@@ -506,64 +576,64 @@ describe("nodesCryptoService", () => {
506
576
  });
507
577
  });
508
578
  });
509
- it("should fail when keys cannot be loaded", async () => {
510
- account.getPublicKeys = jest.fn().mockRejectedValue(new Error("Failed to load keys"));
579
+ it('should fail when keys cannot be loaded', async () => {
580
+ account.getPublicKeys = jest.fn().mockRejectedValue(new Error('Failed to load keys'));
511
581
  const result = cryptoService.decryptNode(encryptedNode, parentKey);
512
- await expect(result).rejects.toThrow("Failed to load keys");
582
+ await expect(result).rejects.toThrow('Failed to load keys');
513
583
  });
514
584
  });
515
- describe("album node", () => {
585
+ describe('album node', () => {
516
586
  const encryptedNode = {
517
- uid: "volumeId~nodeId",
518
- parentUid: "volumeId~parentId",
587
+ uid: 'volumeId~nodeId',
588
+ parentUid: 'volumeId~parentId',
519
589
  encryptedCrypto: {
520
- signatureEmail: "signatureEmail",
521
- nameSignatureEmail: "nameSignatureEmail",
522
- armoredKey: "armoredKey",
523
- armoredNodePassphrase: "armoredNodePassphrase",
524
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
590
+ signatureEmail: 'signatureEmail',
591
+ nameSignatureEmail: 'nameSignatureEmail',
592
+ armoredKey: 'armoredKey',
593
+ armoredNodePassphrase: 'armoredNodePassphrase',
594
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
525
595
  },
526
596
  };
527
- it("should decrypt successfuly", async () => {
597
+ it('should decrypt successfuly', async () => {
528
598
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
529
599
  expect(result).toMatchObject({
530
600
  node: {
531
- name: { ok: true, value: "name" },
532
- keyAuthor: { ok: true, value: "signatureEmail" },
533
- nameAuthor: { ok: true, value: "nameSignatureEmail" },
601
+ name: { ok: true, value: 'name' },
602
+ keyAuthor: { ok: true, value: 'signatureEmail' },
603
+ nameAuthor: { ok: true, value: 'nameSignatureEmail' },
534
604
  folder: undefined,
535
605
  activeRevision: undefined,
536
606
  errors: undefined,
537
607
  },
538
608
  keys: {
539
- passphrase: "pass",
540
- key: "decryptedKey",
541
- passphraseSessionKey: "passphraseSessionKey",
609
+ passphrase: 'pass',
610
+ key: 'decryptedKey',
611
+ passphraseSessionKey: 'passphraseSessionKey',
542
612
  hashKey: new Uint8Array(),
543
- }
613
+ },
544
614
  });
545
615
  expect(account.getPublicKeys).toHaveBeenCalledTimes(2);
546
616
  expect(telemetry.logEvent).not.toHaveBeenCalled();
547
617
  });
548
618
  });
549
- describe("anonymous node", () => {
619
+ describe('anonymous node', () => {
550
620
  const encryptedNode = {
551
- uid: "volumeId~nodeId",
552
- parentUid: "volumeId~parentId",
621
+ uid: 'volumeId~nodeId',
622
+ parentUid: 'volumeId~parentId',
553
623
  encryptedCrypto: {
554
624
  signatureEmail: undefined,
555
625
  nameSignatureEmail: undefined,
556
- armoredKey: "armoredKey",
557
- armoredNodePassphrase: "armoredNodePassphrase",
558
- armoredNodePassphraseSignature: "armoredNodePassphraseSignature",
626
+ armoredKey: 'armoredKey',
627
+ armoredNodePassphrase: 'armoredNodePassphrase',
628
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
559
629
  file: {
560
- base64ContentKeyPacket: "base64ContentKeyPacket",
630
+ base64ContentKeyPacket: 'base64ContentKeyPacket',
561
631
  },
562
632
  activeRevision: {
563
- uid: "revisionUid",
564
- state: "active",
565
- signatureEmail: "revisionSignatureEmail",
566
- armoredExtendedAttributes: "encryptedExtendedAttributes",
633
+ uid: 'revisionUid',
634
+ state: 'active',
635
+ signatureEmail: 'revisionSignatureEmail',
636
+ armoredExtendedAttributes: 'encryptedExtendedAttributes',
567
637
  },
568
638
  },
569
639
  };
@@ -574,67 +644,78 @@ describe("nodesCryptoService", () => {
574
644
  function verifyResult(result, expectedNode = {}, expectedKeys = {}) {
575
645
  expect(result).toMatchObject({
576
646
  node: {
577
- name: { ok: true, value: "name" },
578
- keyAuthor: { ok: true, value: "signatureEmail" },
579
- nameAuthor: { ok: true, value: "nameSignatureEmail" },
647
+ name: { ok: true, value: 'name' },
648
+ keyAuthor: { ok: true, value: 'signatureEmail' },
649
+ nameAuthor: { ok: true, value: 'nameSignatureEmail' },
580
650
  folder: undefined,
581
651
  activeRevision: {
582
- ok: true, value: {
583
- uid: "revisionUid",
652
+ ok: true,
653
+ value: {
654
+ uid: 'revisionUid',
584
655
  state: interface_1.RevisionState.Active,
585
656
  creationTime: undefined,
586
- extendedAttributes: "{}",
587
- contentAuthor: { ok: true, value: "revisionSignatureEmail" },
588
- }
657
+ extendedAttributes: '{}',
658
+ contentAuthor: { ok: true, value: 'revisionSignatureEmail' },
659
+ },
589
660
  },
590
661
  errors: undefined,
591
662
  ...expectedNode,
592
663
  },
593
- ...expectedKeys === 'noKeys' ? {} : {
594
- keys: {
595
- passphrase: "pass",
596
- key: "decryptedKey",
597
- passphraseSessionKey: "passphraseSessionKey",
598
- hashKey: undefined,
599
- contentKeyPacketSessionKey: "contentKeyPacketSessionKey",
600
- ...expectedKeys,
601
- },
602
- },
664
+ ...(expectedKeys === 'noKeys'
665
+ ? {}
666
+ : {
667
+ keys: {
668
+ passphrase: 'pass',
669
+ key: 'decryptedKey',
670
+ passphraseSessionKey: 'passphraseSessionKey',
671
+ hashKey: undefined,
672
+ contentKeyPacketSessionKey: 'contentKeyPacketSessionKey',
673
+ ...expectedKeys,
674
+ },
675
+ }),
603
676
  });
604
677
  }
605
- describe("should decrypt with verification issues", () => {
606
- it("on node key and name with access to parent node", async () => {
678
+ describe('should decrypt with verification issues', () => {
679
+ it('on node key and name with access to parent node', async () => {
607
680
  driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
608
- passphrase: "pass",
609
- key: "decryptedKey",
610
- passphraseSessionKey: "passphraseSessionKey",
681
+ passphrase: 'pass',
682
+ key: 'decryptedKey',
683
+ passphraseSessionKey: 'passphraseSessionKey',
611
684
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
612
685
  }));
613
686
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.resolve({
614
- name: "name",
687
+ name: 'name',
615
688
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
616
689
  }));
617
690
  const result = await cryptoService.decryptNode(encryptedNode, parentKey);
618
691
  verifyResult(result, {
619
- keyAuthor: { ok: false, error: { claimedAuthor: undefined, error: "Signature verification for key failed" } },
620
- nameAuthor: { ok: false, error: { claimedAuthor: undefined, error: "Signature verification for name failed" } },
692
+ keyAuthor: {
693
+ ok: false,
694
+ error: { claimedAuthor: undefined, error: 'Signature verification for key failed' },
695
+ },
696
+ nameAuthor: {
697
+ ok: false,
698
+ error: { claimedAuthor: undefined, error: 'Signature verification for name failed' },
699
+ },
621
700
  });
622
701
  verifyLogEventVerificationError({
623
702
  field: 'nodeName',
624
703
  addressMatchingDefaultShare: undefined,
625
704
  });
626
705
  expect(driveCrypto.decryptKey).toHaveBeenCalledWith(encryptedNode.encryptedCrypto.armoredKey, encryptedNode.encryptedCrypto.armoredNodePassphrase, encryptedNode.encryptedCrypto.armoredNodePassphraseSignature, [parentKey], [parentKey]);
627
- expect(driveCrypto.decryptNodeName).toHaveBeenCalledWith(encryptedNode.encryptedName, parentKey, [parentKey]);
706
+ expect(driveCrypto.decryptNodeName).toHaveBeenCalledWith(encryptedNode.encryptedName, parentKey, [
707
+ parentKey,
708
+ ]);
628
709
  });
629
- it("on anonymous node key and name without access to parent node", async () => {
710
+ it('on anonymous node key and name without access to parent node', async () => {
630
711
  driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
631
- passphrase: "pass",
632
- key: "decryptedKey",
633
- passphraseSessionKey: "passphraseSessionKey",
712
+ passphrase: 'pass',
713
+ key: 'decryptedKey',
714
+ passphraseSessionKey: 'passphraseSessionKey',
634
715
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
635
716
  }));
636
717
  driveCrypto.decryptNodeName = jest.fn(async () => Promise.resolve({
637
- name: "name",
718
+ name: 'name',
638
719
  verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_INVALID,
639
720
  }));
640
721
  const result = await cryptoService.decryptNode(encryptedNodeWithoutParent, parentKey);
@@ -704,8 +785,7 @@ describe("nodesCryptoService", () => {
704
785
  email: 'test@example.com',
705
786
  addressKey: 'addressKey',
706
787
  };
707
- await expect(cryptoService.moveNode(node, keys, parentKeys, address))
708
- .rejects.toThrow('Moving item to a non-folder is not allowed');
788
+ await expect(cryptoService.moveNode(node, keys, parentKeys, address)).rejects.toThrow('Moving item to a non-folder is not allowed');
709
789
  });
710
790
  it('should throw error when node has invalid name', async () => {
711
791
  const node = {
@@ -724,8 +804,7 @@ describe("nodesCryptoService", () => {
724
804
  email: 'test@example.com',
725
805
  addressKey: 'addressKey',
726
806
  };
727
- await expect(cryptoService.moveNode(node, keys, parentKeys, address))
728
- .rejects.toThrow('Cannot move item without a valid name, please rename the item first');
807
+ await expect(cryptoService.moveNode(node, keys, parentKeys, address)).rejects.toThrow('Cannot move item without a valid name, please rename the item first');
729
808
  });
730
809
  });
731
810
  });