@protontech/drive-sdk 0.0.13 → 0.1.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 (496) hide show
  1. package/dist/cache/index.d.ts +1 -0
  2. package/dist/cache/index.js +3 -1
  3. package/dist/cache/index.js.map +1 -1
  4. package/dist/cache/memoryCache.d.ts +1 -1
  5. package/dist/cache/memoryCache.js +0 -1
  6. package/dist/cache/memoryCache.js.map +1 -1
  7. package/dist/cache/memoryCache.test.js +2 -4
  8. package/dist/cache/memoryCache.test.js.map +1 -1
  9. package/dist/cache/nullCache.d.ts +14 -0
  10. package/dist/cache/nullCache.js +36 -0
  11. package/dist/cache/nullCache.js.map +1 -0
  12. package/dist/config.d.ts +16 -1
  13. package/dist/config.js +1 -1
  14. package/dist/config.js.map +1 -1
  15. package/dist/crypto/driveCrypto.d.ts +2 -5
  16. package/dist/crypto/driveCrypto.js +7 -12
  17. package/dist/crypto/driveCrypto.js.map +1 -1
  18. package/dist/crypto/driveCrypto.test.js +14 -14
  19. package/dist/crypto/openPGPCrypto.js +5 -3
  20. package/dist/crypto/openPGPCrypto.js.map +1 -1
  21. package/dist/diagnostic/eventsGenerator.d.ts +14 -0
  22. package/dist/diagnostic/eventsGenerator.js +49 -0
  23. package/dist/diagnostic/eventsGenerator.js.map +1 -0
  24. package/dist/diagnostic/httpClient.d.ts +16 -0
  25. package/dist/diagnostic/httpClient.js +81 -0
  26. package/dist/diagnostic/httpClient.js.map +1 -0
  27. package/dist/diagnostic/index.d.ts +10 -0
  28. package/dist/diagnostic/index.js +35 -0
  29. package/dist/diagnostic/index.js.map +1 -0
  30. package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
  31. package/dist/diagnostic/integrityVerificationStream.js +56 -0
  32. package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
  33. package/dist/diagnostic/interface.d.ts +102 -0
  34. package/dist/diagnostic/interface.js +3 -0
  35. package/dist/diagnostic/interface.js.map +1 -0
  36. package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
  37. package/dist/diagnostic/sdkDiagnostic.js +222 -0
  38. package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
  39. package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
  40. package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
  41. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
  42. package/dist/diagnostic/telemetry.d.ts +25 -0
  43. package/dist/diagnostic/telemetry.js +70 -0
  44. package/dist/diagnostic/telemetry.js.map +1 -0
  45. package/dist/diagnostic/zipGenerators.d.ts +9 -0
  46. package/dist/diagnostic/zipGenerators.js +64 -0
  47. package/dist/diagnostic/zipGenerators.js.map +1 -0
  48. package/dist/diagnostic/zipGenerators.test.js +144 -0
  49. package/dist/diagnostic/zipGenerators.test.js.map +1 -0
  50. package/dist/errors.d.ts +2 -1
  51. package/dist/errors.js +3 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/interface/config.d.ts +26 -0
  54. package/dist/interface/config.js +3 -0
  55. package/dist/interface/config.js.map +1 -0
  56. package/dist/interface/download.d.ts +2 -2
  57. package/dist/interface/events.d.ts +58 -20
  58. package/dist/interface/events.js +11 -1
  59. package/dist/interface/events.js.map +1 -1
  60. package/dist/interface/httpClient.d.ts +0 -14
  61. package/dist/interface/index.d.ts +11 -7
  62. package/dist/interface/index.js +2 -2
  63. package/dist/interface/index.js.map +1 -1
  64. package/dist/interface/nodes.d.ts +9 -0
  65. package/dist/interface/nodes.js.map +1 -1
  66. package/dist/interface/result.js.map +1 -1
  67. package/dist/interface/sharing.d.ts +2 -0
  68. package/dist/interface/sharing.js.map +1 -1
  69. package/dist/interface/telemetry.js +0 -8
  70. package/dist/interface/telemetry.js.map +1 -1
  71. package/dist/interface/thumbnail.js.map +1 -1
  72. package/dist/interface/upload.d.ts +7 -1
  73. package/dist/internal/apiService/apiService.d.ts +1 -1
  74. package/dist/internal/apiService/apiService.js +7 -11
  75. package/dist/internal/apiService/apiService.js.map +1 -1
  76. package/dist/internal/apiService/apiService.test.js +55 -48
  77. package/dist/internal/apiService/apiService.test.js.map +1 -1
  78. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  79. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  80. package/dist/internal/apiService/errors.js +14 -8
  81. package/dist/internal/apiService/errors.js.map +1 -1
  82. package/dist/internal/apiService/errors.test.js +17 -12
  83. package/dist/internal/apiService/errors.test.js.map +1 -1
  84. package/dist/internal/apiService/transformers.d.ts +1 -1
  85. package/dist/internal/apiService/transformers.js +1 -1
  86. package/dist/internal/asyncIteratorMap.test.js +2 -2
  87. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  88. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  89. package/dist/internal/asyncIteratorRace.js +59 -0
  90. package/dist/internal/asyncIteratorRace.js.map +1 -0
  91. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  92. package/dist/internal/asyncIteratorRace.test.js +119 -0
  93. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  94. package/dist/internal/batch.d.ts +1 -0
  95. package/dist/internal/batch.js +12 -0
  96. package/dist/internal/batch.js.map +1 -0
  97. package/dist/internal/batch.test.d.ts +1 -0
  98. package/dist/internal/batch.test.js +41 -0
  99. package/dist/internal/batch.test.js.map +1 -0
  100. package/dist/internal/batchLoading.js.map +1 -1
  101. package/dist/internal/batchLoading.test.js +13 -13
  102. package/dist/internal/batchLoading.test.js.map +1 -1
  103. package/dist/internal/devices/apiService.d.ts +3 -3
  104. package/dist/internal/devices/apiService.js +2 -2
  105. package/dist/internal/devices/apiService.js.map +1 -1
  106. package/dist/internal/devices/cryptoService.js +1 -2
  107. package/dist/internal/devices/cryptoService.js.map +1 -1
  108. package/dist/internal/devices/index.d.ts +5 -5
  109. package/dist/internal/devices/index.js.map +1 -1
  110. package/dist/internal/devices/interface.d.ts +3 -3
  111. package/dist/internal/devices/manager.js +2 -2
  112. package/dist/internal/devices/manager.js.map +1 -1
  113. package/dist/internal/devices/manager.test.js +38 -7
  114. package/dist/internal/devices/manager.test.js.map +1 -1
  115. package/dist/internal/download/apiService.d.ts +4 -4
  116. package/dist/internal/download/apiService.js +32 -32
  117. package/dist/internal/download/apiService.js.map +1 -1
  118. package/dist/internal/download/cryptoService.d.ts +4 -4
  119. package/dist/internal/download/cryptoService.js +6 -5
  120. package/dist/internal/download/cryptoService.js.map +1 -1
  121. package/dist/internal/download/fileDownloader.d.ts +6 -6
  122. package/dist/internal/download/fileDownloader.js +3 -2
  123. package/dist/internal/download/fileDownloader.js.map +1 -1
  124. package/dist/internal/download/fileDownloader.test.js +1 -1
  125. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  126. package/dist/internal/download/index.d.ts +5 -5
  127. package/dist/internal/download/index.js +5 -5
  128. package/dist/internal/download/index.js.map +1 -1
  129. package/dist/internal/download/interface.d.ts +3 -4
  130. package/dist/internal/download/telemetry.d.ts +3 -3
  131. package/dist/internal/download/telemetry.js +4 -2
  132. package/dist/internal/download/telemetry.js.map +1 -1
  133. package/dist/internal/download/telemetry.test.js +8 -8
  134. package/dist/internal/download/telemetry.test.js.map +1 -1
  135. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  136. package/dist/internal/download/thumbnailDownloader.js +6 -6
  137. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  138. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  139. package/dist/internal/errors.d.ts +1 -1
  140. package/dist/internal/errors.js +1 -3
  141. package/dist/internal/errors.js.map +1 -1
  142. package/dist/internal/events/apiService.d.ts +5 -7
  143. package/dist/internal/events/apiService.js +19 -22
  144. package/dist/internal/events/apiService.js.map +1 -1
  145. package/dist/internal/events/coreEventManager.d.ts +9 -12
  146. package/dist/internal/events/coreEventManager.js +19 -36
  147. package/dist/internal/events/coreEventManager.js.map +1 -1
  148. package/dist/internal/events/coreEventManager.test.d.ts +1 -0
  149. package/dist/internal/events/coreEventManager.test.js +87 -0
  150. package/dist/internal/events/coreEventManager.test.js.map +1 -0
  151. package/dist/internal/events/eventManager.d.ts +11 -36
  152. package/dist/internal/events/eventManager.js +59 -106
  153. package/dist/internal/events/eventManager.js.map +1 -1
  154. package/dist/internal/events/eventManager.test.js +177 -83
  155. package/dist/internal/events/eventManager.test.js.map +1 -1
  156. package/dist/internal/events/index.d.ts +16 -36
  157. package/dist/internal/events/index.js +56 -72
  158. package/dist/internal/events/index.js.map +1 -1
  159. package/dist/internal/events/interface.d.ts +59 -14
  160. package/dist/internal/events/interface.js +12 -3
  161. package/dist/internal/events/interface.js.map +1 -1
  162. package/dist/internal/events/volumeEventManager.d.ts +9 -19
  163. package/dist/internal/events/volumeEventManager.js +58 -45
  164. package/dist/internal/events/volumeEventManager.js.map +1 -1
  165. package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
  166. package/dist/internal/events/volumeEventManager.test.js +203 -0
  167. package/dist/internal/events/volumeEventManager.test.js.map +1 -0
  168. package/dist/internal/nodes/apiService.d.ts +4 -3
  169. package/dist/internal/nodes/apiService.js +36 -15
  170. package/dist/internal/nodes/apiService.js.map +1 -1
  171. package/dist/internal/nodes/apiService.test.js +60 -41
  172. package/dist/internal/nodes/apiService.test.js.map +1 -1
  173. package/dist/internal/nodes/cache.d.ts +14 -5
  174. package/dist/internal/nodes/cache.js +31 -7
  175. package/dist/internal/nodes/cache.js.map +1 -1
  176. package/dist/internal/nodes/cache.test.js +31 -9
  177. package/dist/internal/nodes/cache.test.js.map +1 -1
  178. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  179. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  180. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  181. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  182. package/dist/internal/nodes/cryptoService.d.ts +4 -4
  183. package/dist/internal/nodes/cryptoService.js +11 -17
  184. package/dist/internal/nodes/cryptoService.js.map +1 -1
  185. package/dist/internal/nodes/cryptoService.test.js +320 -241
  186. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  187. package/dist/internal/nodes/events.d.ts +8 -84
  188. package/dist/internal/nodes/events.js +43 -217
  189. package/dist/internal/nodes/events.js.map +1 -1
  190. package/dist/internal/nodes/events.test.js +35 -279
  191. package/dist/internal/nodes/events.test.js.map +1 -1
  192. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  193. package/dist/internal/nodes/extendedAttributes.js +3 -1
  194. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  195. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  196. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  197. package/dist/internal/nodes/index.d.ts +12 -13
  198. package/dist/internal/nodes/index.js +5 -5
  199. package/dist/internal/nodes/index.js.map +1 -1
  200. package/dist/internal/nodes/index.test.js +24 -32
  201. package/dist/internal/nodes/index.test.js.map +1 -1
  202. package/dist/internal/nodes/interface.d.ts +2 -2
  203. package/dist/internal/nodes/nodesAccess.d.ts +22 -7
  204. package/dist/internal/nodes/nodesAccess.js +65 -16
  205. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  206. package/dist/internal/nodes/nodesAccess.test.js +165 -101
  207. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  208. package/dist/internal/nodes/nodesManagement.d.ts +7 -9
  209. package/dist/internal/nodes/nodesManagement.js +21 -33
  210. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  211. package/dist/internal/nodes/nodesManagement.test.js +42 -21
  212. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  213. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  214. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  215. package/dist/internal/photos/albums.d.ts +3 -3
  216. package/dist/internal/photos/albums.js.map +1 -1
  217. package/dist/internal/photos/apiService.d.ts +1 -1
  218. package/dist/internal/photos/apiService.js +3 -6
  219. package/dist/internal/photos/apiService.js.map +1 -1
  220. package/dist/internal/photos/cache.d.ts +1 -1
  221. package/dist/internal/photos/index.d.ts +5 -5
  222. package/dist/internal/photos/index.js.map +1 -1
  223. package/dist/internal/photos/interface.d.ts +2 -2
  224. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  225. package/dist/internal/photos/photosTimeline.js +1 -2
  226. package/dist/internal/photos/photosTimeline.js.map +1 -1
  227. package/dist/internal/sdkEvents.d.ts +1 -1
  228. package/dist/internal/sdkEvents.js +2 -7
  229. package/dist/internal/sdkEvents.js.map +1 -1
  230. package/dist/internal/sdkEvents.test.js +8 -8
  231. package/dist/internal/shares/apiService.d.ts +2 -2
  232. package/dist/internal/shares/apiService.js +5 -3
  233. package/dist/internal/shares/apiService.js.map +1 -1
  234. package/dist/internal/shares/cache.d.ts +4 -2
  235. package/dist/internal/shares/cache.js +14 -6
  236. package/dist/internal/shares/cache.js.map +1 -1
  237. package/dist/internal/shares/cache.test.js.map +1 -1
  238. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  239. package/dist/internal/shares/cryptoCache.test.js +8 -2
  240. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  241. package/dist/internal/shares/cryptoService.d.ts +3 -3
  242. package/dist/internal/shares/cryptoService.js.map +1 -1
  243. package/dist/internal/shares/cryptoService.test.js +42 -42
  244. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  245. package/dist/internal/shares/index.d.ts +4 -4
  246. package/dist/internal/shares/index.js.map +1 -1
  247. package/dist/internal/shares/interface.d.ts +2 -2
  248. package/dist/internal/shares/manager.d.ts +8 -7
  249. package/dist/internal/shares/manager.js +3 -0
  250. package/dist/internal/shares/manager.js.map +1 -1
  251. package/dist/internal/shares/manager.test.js +71 -63
  252. package/dist/internal/shares/manager.test.js.map +1 -1
  253. package/dist/internal/sharing/apiService.d.ts +4 -4
  254. package/dist/internal/sharing/apiService.js +5 -3
  255. package/dist/internal/sharing/apiService.js.map +1 -1
  256. package/dist/internal/sharing/cache.d.ts +1 -1
  257. package/dist/internal/sharing/cache.test.js +33 -33
  258. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  259. package/dist/internal/sharing/cryptoService.js +3 -4
  260. package/dist/internal/sharing/cryptoService.js.map +1 -1
  261. package/dist/internal/sharing/cryptoService.test.js +39 -39
  262. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  263. package/dist/internal/sharing/events.d.ts +24 -56
  264. package/dist/internal/sharing/events.js +45 -138
  265. package/dist/internal/sharing/events.js.map +1 -1
  266. package/dist/internal/sharing/events.test.js +85 -189
  267. package/dist/internal/sharing/events.test.js.map +1 -1
  268. package/dist/internal/sharing/index.d.ts +8 -9
  269. package/dist/internal/sharing/index.js +5 -5
  270. package/dist/internal/sharing/index.js.map +1 -1
  271. package/dist/internal/sharing/interface.d.ts +8 -4
  272. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  273. package/dist/internal/sharing/sharingAccess.js +8 -4
  274. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  275. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  276. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  277. package/dist/internal/sharing/sharingManagement.d.ts +5 -6
  278. package/dist/internal/sharing/sharingManagement.js +12 -16
  279. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  280. package/dist/internal/sharing/sharingManagement.test.js +305 -286
  281. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  282. package/dist/internal/uids.js.map +1 -1
  283. package/dist/internal/upload/apiService.d.ts +5 -6
  284. package/dist/internal/upload/apiService.js +8 -5
  285. package/dist/internal/upload/apiService.js.map +1 -1
  286. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  287. package/dist/internal/upload/blockVerifier.js +1 -1
  288. package/dist/internal/upload/blockVerifier.js.map +1 -1
  289. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  290. package/dist/internal/upload/cryptoService.d.ts +4 -4
  291. package/dist/internal/upload/cryptoService.js +4 -4
  292. package/dist/internal/upload/cryptoService.js.map +1 -1
  293. package/dist/internal/upload/digests.js.map +1 -1
  294. package/dist/internal/upload/fileUploader.d.ts +6 -6
  295. package/dist/internal/upload/fileUploader.js.map +1 -1
  296. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  297. package/dist/internal/upload/index.d.ts +6 -6
  298. package/dist/internal/upload/index.js +3 -3
  299. package/dist/internal/upload/index.js.map +1 -1
  300. package/dist/internal/upload/interface.d.ts +5 -3
  301. package/dist/internal/upload/manager.d.ts +8 -8
  302. package/dist/internal/upload/manager.js +23 -52
  303. package/dist/internal/upload/manager.js.map +1 -1
  304. package/dist/internal/upload/manager.test.js +185 -147
  305. package/dist/internal/upload/manager.test.js.map +1 -1
  306. package/dist/internal/upload/streamUploader.d.ts +6 -6
  307. package/dist/internal/upload/streamUploader.js +9 -8
  308. package/dist/internal/upload/streamUploader.js.map +1 -1
  309. package/dist/internal/upload/streamUploader.test.js +17 -12
  310. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  311. package/dist/internal/upload/telemetry.d.ts +3 -3
  312. package/dist/internal/upload/telemetry.js +5 -3
  313. package/dist/internal/upload/telemetry.js.map +1 -1
  314. package/dist/internal/upload/telemetry.test.js +8 -8
  315. package/dist/internal/upload/telemetry.test.js.map +1 -1
  316. package/dist/protonDriveClient.d.ts +27 -170
  317. package/dist/protonDriveClient.js +37 -198
  318. package/dist/protonDriveClient.js.map +1 -1
  319. package/dist/protonDrivePhotosClient.js +3 -2
  320. package/dist/protonDrivePhotosClient.js.map +1 -1
  321. package/dist/telemetry.js +18 -15
  322. package/dist/telemetry.js.map +1 -1
  323. package/dist/tests/logger.js.map +1 -1
  324. package/dist/tests/telemetry.d.ts +1 -1
  325. package/dist/transformers.js +4 -2
  326. package/dist/transformers.js.map +1 -1
  327. package/package.json +3 -3
  328. package/src/cache/index.ts +1 -0
  329. package/src/cache/interface.ts +22 -22
  330. package/src/cache/memoryCache.test.ts +7 -7
  331. package/src/cache/memoryCache.ts +5 -5
  332. package/src/cache/nullCache.ts +38 -0
  333. package/src/config.ts +17 -2
  334. package/src/crypto/driveCrypto.test.ts +15 -15
  335. package/src/crypto/driveCrypto.ts +120 -156
  336. package/src/crypto/hmac.ts +1 -1
  337. package/src/crypto/interface.ts +63 -72
  338. package/src/crypto/openPGPCrypto.ts +76 -94
  339. package/src/crypto/utils.ts +1 -1
  340. package/src/diagnostic/eventsGenerator.ts +48 -0
  341. package/src/diagnostic/httpClient.ts +84 -0
  342. package/src/diagnostic/index.ts +40 -0
  343. package/src/diagnostic/integrityVerificationStream.ts +55 -0
  344. package/src/diagnostic/interface.ts +158 -0
  345. package/src/diagnostic/sdkDiagnostic.ts +249 -0
  346. package/src/diagnostic/sdkDiagnosticFull.ts +37 -0
  347. package/src/diagnostic/telemetry.ts +74 -0
  348. package/src/diagnostic/zipGenerators.test.ts +177 -0
  349. package/src/diagnostic/zipGenerators.ts +70 -0
  350. package/src/errors.ts +25 -22
  351. package/src/index.ts +3 -3
  352. package/src/interface/account.ts +10 -10
  353. package/src/interface/author.ts +6 -6
  354. package/src/interface/config.ts +28 -0
  355. package/src/interface/devices.ts +6 -6
  356. package/src/interface/download.ts +12 -9
  357. package/src/interface/events.ts +76 -25
  358. package/src/interface/httpClient.ts +11 -27
  359. package/src/interface/index.ts +81 -20
  360. package/src/interface/nodes.ts +67 -60
  361. package/src/interface/result.ts +1 -3
  362. package/src/interface/sharing.ts +60 -56
  363. package/src/interface/telemetry.ts +74 -74
  364. package/src/interface/thumbnail.ts +5 -6
  365. package/src/interface/upload.ts +25 -11
  366. package/src/internal/apiService/apiService.test.ts +109 -76
  367. package/src/internal/apiService/apiService.ts +40 -26
  368. package/src/internal/apiService/coreTypes.ts +2474 -2463
  369. package/src/internal/apiService/driveTypes.ts +1868 -1822
  370. package/src/internal/apiService/errorCodes.ts +4 -4
  371. package/src/internal/apiService/errors.test.ts +25 -23
  372. package/src/internal/apiService/errors.ts +15 -9
  373. package/src/internal/apiService/index.ts +1 -1
  374. package/src/internal/apiService/transformers.ts +2 -2
  375. package/src/internal/asyncIteratorMap.test.ts +4 -4
  376. package/src/internal/asyncIteratorMap.ts +1 -1
  377. package/src/internal/asyncIteratorRace.test.ts +149 -0
  378. package/src/internal/asyncIteratorRace.ts +79 -0
  379. package/src/internal/batch.test.ts +50 -0
  380. package/src/internal/batch.ts +9 -0
  381. package/src/internal/batchLoading.test.ts +13 -14
  382. package/src/internal/batchLoading.ts +8 -8
  383. package/src/internal/devices/apiService.ts +58 -51
  384. package/src/internal/devices/cryptoService.ts +22 -17
  385. package/src/internal/devices/index.ts +17 -10
  386. package/src/internal/devices/interface.ts +21 -12
  387. package/src/internal/devices/manager.test.ts +40 -9
  388. package/src/internal/devices/manager.ts +3 -3
  389. package/src/internal/download/apiService.ts +72 -52
  390. package/src/internal/download/cryptoService.ts +34 -18
  391. package/src/internal/download/fileDownloader.test.ts +25 -9
  392. package/src/internal/download/fileDownloader.ts +38 -20
  393. package/src/internal/download/index.ts +19 -19
  394. package/src/internal/download/interface.ts +19 -20
  395. package/src/internal/download/queue.ts +3 -3
  396. package/src/internal/download/telemetry.test.ts +11 -11
  397. package/src/internal/download/telemetry.ts +24 -14
  398. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  399. package/src/internal/download/thumbnailDownloader.ts +43 -32
  400. package/src/internal/errors.ts +7 -5
  401. package/src/internal/events/apiService.ts +46 -36
  402. package/src/internal/events/coreEventManager.test.ts +101 -0
  403. package/src/internal/events/coreEventManager.ts +26 -48
  404. package/src/internal/events/eventManager.test.ts +211 -93
  405. package/src/internal/events/eventManager.ts +72 -117
  406. package/src/internal/events/index.ts +71 -91
  407. package/src/internal/events/interface.ts +92 -29
  408. package/src/internal/events/volumeEventManager.test.ts +239 -0
  409. package/src/internal/events/volumeEventManager.ts +68 -57
  410. package/src/internal/nodes/apiService.test.ts +197 -147
  411. package/src/internal/nodes/apiService.ts +288 -174
  412. package/src/internal/nodes/cache.test.ts +48 -20
  413. package/src/internal/nodes/cache.ts +79 -45
  414. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  415. package/src/internal/nodes/cryptoCache.ts +10 -5
  416. package/src/internal/nodes/cryptoService.test.ts +492 -351
  417. package/src/internal/nodes/cryptoService.ts +171 -89
  418. package/src/internal/nodes/events.test.ts +48 -344
  419. package/src/internal/nodes/events.ts +48 -254
  420. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  421. package/src/internal/nodes/extendedAttributes.ts +20 -15
  422. package/src/internal/nodes/index.test.ts +51 -55
  423. package/src/internal/nodes/index.ts +32 -22
  424. package/src/internal/nodes/interface.ts +44 -31
  425. package/src/internal/nodes/nodesAccess.test.ts +237 -130
  426. package/src/internal/nodes/nodesAccess.ts +113 -50
  427. package/src/internal/nodes/nodesManagement.test.ts +64 -39
  428. package/src/internal/nodes/nodesManagement.ts +51 -62
  429. package/src/internal/nodes/nodesRevisions.ts +7 -7
  430. package/src/internal/nodes/validations.ts +2 -2
  431. package/src/internal/photos/albums.ts +5 -5
  432. package/src/internal/photos/apiService.ts +4 -7
  433. package/src/internal/photos/cache.ts +1 -1
  434. package/src/internal/photos/index.ts +8 -8
  435. package/src/internal/photos/interface.ts +2 -2
  436. package/src/internal/photos/photosTimeline.ts +4 -5
  437. package/src/internal/sdkEvents.test.ts +10 -10
  438. package/src/internal/sdkEvents.ts +5 -13
  439. package/src/internal/shares/apiService.ts +44 -33
  440. package/src/internal/shares/cache.test.ts +6 -4
  441. package/src/internal/shares/cache.ts +25 -14
  442. package/src/internal/shares/cryptoCache.test.ts +17 -11
  443. package/src/internal/shares/cryptoCache.ts +4 -4
  444. package/src/internal/shares/cryptoService.test.ts +72 -74
  445. package/src/internal/shares/cryptoService.ts +48 -23
  446. package/src/internal/shares/index.ts +23 -11
  447. package/src/internal/shares/interface.ts +8 -8
  448. package/src/internal/shares/manager.test.ts +88 -80
  449. package/src/internal/shares/manager.ts +27 -23
  450. package/src/internal/sharing/apiService.ts +283 -175
  451. package/src/internal/sharing/cache.test.ts +35 -35
  452. package/src/internal/sharing/cache.ts +3 -3
  453. package/src/internal/sharing/cryptoService.test.ts +58 -46
  454. package/src/internal/sharing/cryptoService.ts +121 -83
  455. package/src/internal/sharing/events.test.ts +97 -207
  456. package/src/internal/sharing/events.ts +46 -157
  457. package/src/internal/sharing/index.ts +24 -16
  458. package/src/internal/sharing/interface.ts +46 -42
  459. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  460. package/src/internal/sharing/sharingAccess.ts +39 -21
  461. package/src/internal/sharing/sharingManagement.test.ts +405 -335
  462. package/src/internal/sharing/sharingManagement.ts +144 -75
  463. package/src/internal/uids.ts +1 -1
  464. package/src/internal/upload/apiService.ts +168 -119
  465. package/src/internal/upload/blockVerifier.ts +8 -6
  466. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  467. package/src/internal/upload/cryptoService.ts +42 -36
  468. package/src/internal/upload/digests.ts +2 -2
  469. package/src/internal/upload/fileUploader.test.ts +15 -3
  470. package/src/internal/upload/fileUploader.ts +39 -17
  471. package/src/internal/upload/index.ts +17 -18
  472. package/src/internal/upload/interface.ts +79 -77
  473. package/src/internal/upload/manager.test.ts +222 -175
  474. package/src/internal/upload/manager.ts +74 -80
  475. package/src/internal/upload/queue.ts +3 -3
  476. package/src/internal/upload/streamUploader.test.ts +40 -27
  477. package/src/internal/upload/streamUploader.ts +87 -71
  478. package/src/internal/upload/telemetry.test.ts +11 -11
  479. package/src/internal/upload/telemetry.ts +25 -15
  480. package/src/internal/wait.test.ts +1 -1
  481. package/src/internal/wait.ts +3 -3
  482. package/src/protonDriveClient.ts +189 -276
  483. package/src/protonDrivePhotosClient.ts +20 -13
  484. package/src/telemetry.ts +60 -52
  485. package/src/tests/logger.ts +1 -1
  486. package/src/tests/telemetry.ts +2 -2
  487. package/src/transformers.ts +27 -21
  488. package/src/version.ts +0 -1
  489. package/dist/internal/events/cache.d.ts +0 -28
  490. package/dist/internal/events/cache.js +0 -67
  491. package/dist/internal/events/cache.js.map +0 -1
  492. package/dist/internal/events/cache.test.js +0 -43
  493. package/dist/internal/events/cache.test.js.map +0 -1
  494. package/src/internal/events/cache.test.ts +0 -47
  495. package/src/internal/events/cache.ts +0 -80
  496. /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
@@ -1,19 +1,19 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { PrivateKey, SessionKey } from "../../crypto";
4
- import { InvalidNameError, Logger, MissingNode, NodeType, Result, resultError, resultOk } from "../../interface";
5
- import { DecryptionError, ProtonDriveError } from "../../errors";
3
+ import { PrivateKey, SessionKey } from '../../crypto';
4
+ import { InvalidNameError, Logger, MissingNode, NodeType, Result, resultError, resultOk } from '../../interface';
5
+ import { DecryptionError, ProtonDriveError } from '../../errors';
6
6
  import { asyncIteratorMap } from '../asyncIteratorMap';
7
7
  import { getErrorMessage } from '../errors';
8
- import { BatchLoading } from "../batchLoading";
9
- import { makeNodeUid, splitNodeUid } from "../uids";
10
- import { NodeAPIService } from "./apiService";
11
- import { NodesCache } from "./cache"
12
- import { NodesCryptoCache } from "./cryptoCache";
13
- import { NodesCryptoService } from "./cryptoService";
14
- import { parseFileExtendedAttributes, parseFolderExtendedAttributes } from "./extendedAttributes";
15
- import { SharesService, EncryptedNode, DecryptedUnparsedNode, DecryptedNode, DecryptedNodeKeys } from "./interface";
16
- import { validateNodeName } from "./validations";
8
+ import { BatchLoading } from '../batchLoading';
9
+ import { makeNodeUid, splitNodeUid } from '../uids';
10
+ import { NodeAPIService } from './apiService';
11
+ import { NodesCache } from './cache';
12
+ import { NodesCryptoCache } from './cryptoCache';
13
+ import { NodesCryptoService } from './cryptoService';
14
+ import { parseFileExtendedAttributes, parseFolderExtendedAttributes } from './extendedAttributes';
15
+ import { SharesService, EncryptedNode, DecryptedUnparsedNode, DecryptedNode, DecryptedNodeKeys } from './interface';
16
+ import { validateNodeName } from './validations';
17
17
  import { isProtonDocument, isProtonSheet } from './mediaTypes';
18
18
 
19
19
  // This is the number of nodes that are loaded in parallel.
@@ -28,7 +28,7 @@ const DECRYPTION_CONCURRENCY = 15;
28
28
 
29
29
  /**
30
30
  * Provides access to node metadata.
31
- *
31
+ *
32
32
  * The node access module is responsible for fetching, decrypting and caching
33
33
  * nodes metadata.
34
34
  */
@@ -59,7 +59,7 @@ export class NodesAccess {
59
59
  let cachedNode;
60
60
  try {
61
61
  cachedNode = await this.cache.getNode(nodeUid);
62
- } catch { }
62
+ } catch {}
63
63
 
64
64
  if (cachedNode && !cachedNode.isStale) {
65
65
  return cachedNode;
@@ -75,7 +75,10 @@ export class NodesAccess {
75
75
  // Ensure the parent is loaded and up-to-date.
76
76
  const parentNode = await this.getNode(parentNodeUid);
77
77
 
78
- const batchLoading = new BatchLoading<string, DecryptedNode>({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
78
+ const batchLoading = new BatchLoading<string, DecryptedNode>({
79
+ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal),
80
+ batchSize: BATCH_LOADING_SIZE,
81
+ });
79
82
 
80
83
  const areChildrenCached = await this.cache.isFolderChildrenLoaded(parentNodeUid);
81
84
  if (areChildrenCached) {
@@ -95,7 +98,7 @@ export class NodesAccess {
95
98
  let node;
96
99
  try {
97
100
  node = await this.cache.getNode(nodeUid);
98
- } catch { }
101
+ } catch {}
99
102
 
100
103
  if (node && !node.isStale) {
101
104
  yield node;
@@ -111,12 +114,15 @@ export class NodesAccess {
111
114
  // Improvement requested: keep status of loaded trash and leverage cache.
112
115
  async *iterateTrashedNodes(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
113
116
  const { volumeId } = await this.shareService.getMyFilesIDs();
114
- const batchLoading = new BatchLoading<string, DecryptedNode>({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
117
+ const batchLoading = new BatchLoading<string, DecryptedNode>({
118
+ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal),
119
+ batchSize: BATCH_LOADING_SIZE,
120
+ });
115
121
  for await (const nodeUid of this.apiService.iterateTrashedNodeUids(volumeId, signal)) {
116
122
  let node;
117
123
  try {
118
124
  node = await this.cache.getNode(nodeUid);
119
- } catch { }
125
+ } catch {}
120
126
 
121
127
  if (node && !node.isStale) {
122
128
  yield node;
@@ -129,7 +135,10 @@ export class NodesAccess {
129
135
  }
130
136
 
131
137
  async *iterateNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode> {
132
- const batchLoading = new BatchLoading<string, DecryptedNode | MissingNode>({ iterateItems: (nodeUids) => this.loadNodesWithMissingReport(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
138
+ const batchLoading = new BatchLoading<string, DecryptedNode | MissingNode>({
139
+ iterateItems: (nodeUids) => this.loadNodesWithMissingReport(nodeUids, signal),
140
+ batchSize: BATCH_LOADING_SIZE,
141
+ });
133
142
  for await (const result of this.cache.iterateNodes(nodeUids)) {
134
143
  if (result.ok && !result.node.isStale) {
135
144
  yield result.node;
@@ -140,13 +149,49 @@ export class NodesAccess {
140
149
  yield* batchLoading.loadRest();
141
150
  }
142
151
 
143
- private async loadNode(nodeUid: string): Promise<{ node: DecryptedNode, keys?: DecryptedNodeKeys }> {
152
+ /**
153
+ * Call to invalidate the folder listing cache. This should be refactored into a clean
154
+ * cache layer once the cache is split off.
155
+ */
156
+ async notifyChildCreated(nodeUid: string): Promise<void> {
157
+ await this.cache.resetFolderChildrenLoaded(nodeUid);
158
+ }
159
+
160
+ /**
161
+ * Call to invalidate the node cache when a node changes. Parent can be set after a move
162
+ * to ensure parent listing of new parent is up to date if cached.
163
+ * This should be refactored into a clean cache layer once the cache is split off.
164
+ */
165
+ async notifyNodeChanged(nodeUid: string, newParentUid?: string): Promise<void> {
166
+ try {
167
+ const node = await this.cache.getNode(nodeUid);
168
+ if (node.isStale && newParentUid === null) {
169
+ return;
170
+ }
171
+ node.isStale = true;
172
+ if (newParentUid) {
173
+ node.parentUid = newParentUid;
174
+ }
175
+ await this.cache.setNode(node);
176
+ } catch (error: unknown) {
177
+ this.logger.warn(`Failed to set node ${nodeUid} as stale after sharing: ${error}`);
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Call to remove a node from cache. This should be refactored when the cache is split off.
183
+ */
184
+ async notifyNodeDeleted(nodeUid: string): Promise<void> {
185
+ await this.cache.removeNodes([nodeUid]);
186
+ }
187
+
188
+ private async loadNode(nodeUid: string): Promise<{ node: DecryptedNode; keys?: DecryptedNodeKeys }> {
144
189
  const { volumeId: ownVolumeId } = await this.shareService.getMyFilesIDs();
145
190
  const encryptedNode = await this.apiService.getNode(nodeUid, ownVolumeId);
146
191
  return this.decryptNode(encryptedNode);
147
192
  }
148
193
 
149
- private async* loadNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
194
+ private async *loadNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
150
195
  for await (const result of this.loadNodesWithMissingReport(nodeUids, signal)) {
151
196
  if ('missingUid' in result) {
152
197
  continue;
@@ -155,7 +200,10 @@ export class NodesAccess {
155
200
  }
156
201
  }
157
202
 
158
- private async* loadNodesWithMissingReport(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode> {
203
+ private async *loadNodesWithMissingReport(
204
+ nodeUids: string[],
205
+ signal?: AbortSignal,
206
+ ): AsyncGenerator<DecryptedNode | MissingNode> {
159
207
  const returnedNodeUids: string[] = [];
160
208
  const errors = [];
161
209
 
@@ -171,7 +219,11 @@ export class NodesAccess {
171
219
  return resultError(error);
172
220
  }
173
221
  };
174
- const decryptedNodesIterator = asyncIteratorMap(encryptedNodesIterator, decryptNodeMapper, DECRYPTION_CONCURRENCY);
222
+ const decryptedNodesIterator = asyncIteratorMap(
223
+ encryptedNodesIterator,
224
+ decryptNodeMapper,
225
+ DECRYPTION_CONCURRENCY,
226
+ );
175
227
  for await (const node of decryptedNodesIterator) {
176
228
  if (node.ok) {
177
229
  yield node.value;
@@ -196,7 +248,9 @@ export class NodesAccess {
196
248
  }
197
249
  }
198
250
 
199
- private async decryptNode(encryptedNode: EncryptedNode): Promise<{ node: DecryptedNode, keys?: DecryptedNodeKeys }> {
251
+ private async decryptNode(
252
+ encryptedNode: EncryptedNode,
253
+ ): Promise<{ node: DecryptedNode; keys?: DecryptedNodeKeys }> {
200
254
  let parentKey;
201
255
  try {
202
256
  const parentKeys = await this.getParentKeys(encryptedNode);
@@ -217,6 +271,7 @@ export class NodesAccess {
217
271
  error: getErrorMessage(error),
218
272
  }),
219
273
  errors: [error],
274
+ treeEventScopeId: splitNodeUid(encryptedNode.uid).volumeId,
220
275
  },
221
276
  };
222
277
  }
@@ -262,17 +317,20 @@ export class NodesAccess {
262
317
  return {
263
318
  ...unparsedNode,
264
319
  isStale: false,
265
- activeRevision: !unparsedNode.activeRevision?.ok ? unparsedNode.activeRevision : resultOk({
266
- uid: unparsedNode.activeRevision.value.uid,
267
- state: unparsedNode.activeRevision.value.state,
268
- creationTime: unparsedNode.activeRevision.value.creationTime,
269
- storageSize: unparsedNode.activeRevision.value.storageSize,
270
- contentAuthor: unparsedNode.activeRevision.value.contentAuthor,
271
- thumbnails: unparsedNode.activeRevision.value.thumbnails,
272
- ...extendedAttributes,
273
- }),
320
+ activeRevision: !unparsedNode.activeRevision?.ok
321
+ ? unparsedNode.activeRevision
322
+ : resultOk({
323
+ uid: unparsedNode.activeRevision.value.uid,
324
+ state: unparsedNode.activeRevision.value.state,
325
+ creationTime: unparsedNode.activeRevision.value.creationTime,
326
+ storageSize: unparsedNode.activeRevision.value.storageSize,
327
+ contentAuthor: unparsedNode.activeRevision.value.contentAuthor,
328
+ thumbnails: unparsedNode.activeRevision.value.thumbnails,
329
+ ...extendedAttributes,
330
+ }),
274
331
  folder: undefined,
275
- }
332
+ treeEventScopeId: splitNodeUid(unparsedNode.uid).volumeId,
333
+ };
276
334
  }
277
335
 
278
336
  const extendedAttributes = unparsedNode.folder?.extendedAttributes
@@ -283,13 +341,18 @@ export class NodesAccess {
283
341
  name: nodeName,
284
342
  isStale: false,
285
343
  activeRevision: undefined,
286
- folder: extendedAttributes ? {
287
- ...extendedAttributes,
288
- } : undefined,
289
- }
344
+ folder: extendedAttributes
345
+ ? {
346
+ ...extendedAttributes,
347
+ }
348
+ : undefined,
349
+ treeEventScopeId: splitNodeUid(unparsedNode.uid).volumeId,
350
+ };
290
351
  }
291
352
 
292
- async getParentKeys(node: Pick<DecryptedNode, 'parentUid' | 'shareId'>): Promise<Pick<DecryptedNodeKeys, 'key' | 'hashKey'>> {
353
+ async getParentKeys(
354
+ node: Pick<DecryptedNode, 'parentUid' | 'shareId'>,
355
+ ): Promise<Pick<DecryptedNodeKeys, 'key' | 'hashKey'>> {
293
356
  if (node.parentUid) {
294
357
  try {
295
358
  return await this.getNodeKeys(node.parentUid);
@@ -306,7 +369,7 @@ export class NodesAccess {
306
369
  if (node.shareId) {
307
370
  return {
308
371
  key: await this.shareService.getSharePrivateKey(node.shareId),
309
- }
372
+ };
310
373
  }
311
374
  // This is bug that should not happen.
312
375
  // API cannot provide node without parent or share.
@@ -326,11 +389,11 @@ export class NodesAccess {
326
389
  }
327
390
 
328
391
  async getNodePrivateAndSessionKeys(nodeUid: string): Promise<{
329
- key: PrivateKey,
330
- passphrase: string,
331
- passphraseSessionKey: SessionKey,
332
- contentKeyPacketSessionKey?: SessionKey,
333
- nameSessionKey: SessionKey,
392
+ key: PrivateKey;
393
+ passphrase: string;
394
+ passphraseSessionKey: SessionKey;
395
+ contentKeyPacketSessionKey?: SessionKey;
396
+ nameSessionKey: SessionKey;
334
397
  }> {
335
398
  const node = await this.getNode(nodeUid);
336
399
  const { key: parentKey } = await this.getParentKeys(node);
@@ -346,10 +409,10 @@ export class NodesAccess {
346
409
  }
347
410
 
348
411
  async getRootNodeEmailKey(nodeUid: string): Promise<{
349
- email: string,
350
- addressId: string,
351
- addressKey: PrivateKey,
352
- addressKeyId: string,
412
+ email: string;
413
+ addressId: string;
414
+ addressKey: PrivateKey;
415
+ addressKeyId: string;
353
416
  }> {
354
417
  const rootNode = await this.getRootNode(nodeUid);
355
418
  if (!rootNode.shareId) {
@@ -379,5 +442,5 @@ export class NodesAccess {
379
442
  private async getRootNode(nodeUid: string): Promise<DecryptedNode> {
380
443
  const node = await this.getNode(nodeUid);
381
444
  return node.parentUid ? this.getRootNode(node.parentUid) : node;
382
- };
445
+ }
383
446
  }
@@ -1,17 +1,16 @@
1
- import { NodeAPIService } from "./apiService";
2
- import { NodesCryptoCache } from "./cryptoCache";
3
- import { NodesCryptoService } from "./cryptoService";
1
+ import { NodeAPIService } from './apiService';
2
+ import { NodesCryptoCache } from './cryptoCache';
3
+ import { NodesCryptoService } from './cryptoService';
4
4
  import { NodesAccess } from './nodesAccess';
5
- import { NodesEvents } from './events';
6
5
  import { DecryptedNode } from './interface';
7
6
  import { NodesManagement } from './nodesManagement';
7
+ import { NodeResult } from '../../interface';
8
8
 
9
9
  describe('NodesManagement', () => {
10
10
  let apiService: NodeAPIService;
11
11
  let cryptoCache: NodesCryptoCache;
12
12
  let cryptoService: NodesCryptoService;
13
13
  let nodesAccess: NodesAccess;
14
- let nodesEvents: NodesEvents;
15
14
  let management: NodesManagement;
16
15
 
17
16
  let nodes: { [uid: string]: DecryptedNode };
@@ -50,15 +49,21 @@ describe('NodesManagement', () => {
50
49
  apiService = {
51
50
  renameNode: jest.fn(),
52
51
  moveNode: jest.fn(),
53
- trashNodes: jest.fn(),
54
- restoreNodes: jest.fn(),
55
- deleteNodes: jest.fn(),
52
+ trashNodes: jest.fn(async function* (uids) {
53
+ yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
54
+ }),
55
+ restoreNodes: jest.fn(async function* (uids) {
56
+ yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
57
+ }),
58
+ deleteNodes: jest.fn(async function* (uids) {
59
+ yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
60
+ }),
56
61
  createFolder: jest.fn(),
57
- }
62
+ };
58
63
  // @ts-expect-error No need to implement all methods for mocking
59
64
  cryptoCache = {
60
65
  setNodeKeys: jest.fn(),
61
- }
66
+ };
62
67
  // @ts-expect-error No need to implement all methods for mocking
63
68
  cryptoService = {
64
69
  encryptNewName: jest.fn().mockResolvedValue({
@@ -68,7 +73,7 @@ describe('NodesManagement', () => {
68
73
  }),
69
74
  moveNode: jest.fn(),
70
75
  createFolder: jest.fn(),
71
- }
76
+ };
72
77
  // @ts-expect-error No need to implement all methods for mocking
73
78
  nodesAccess = {
74
79
  getNode: jest.fn().mockImplementation((uid: string) => nodes[uid]),
@@ -83,23 +88,21 @@ describe('NodesManagement', () => {
83
88
  hashKey: `${nodes[uid].parentUid}-hashKey`,
84
89
  })),
85
90
  iterateNodes: jest.fn(),
86
- getNodePrivateAndSessionKeys: jest.fn().mockImplementation((uid) => Promise.resolve({
87
- key: `${uid}-key`,
88
- passphrase: `${uid}-passphrase`,
89
- passphraseSessionKey: `${uid}-passphraseSessionKey`,
90
- contentKeyPacketSessionKey: `${uid}-contentKeyPacketSessionKey`,
91
- nameSessionKey: `${uid}-nameSessionKey`,
92
- })),
93
- getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: "root-email", addressKey: "root-key" }),
94
- }
95
- // @ts-expect-error No need to implement all methods for mocking
96
- nodesEvents = {
97
- nodeCreated: jest.fn(),
98
- nodeUpdated: jest.fn(),
99
- nodesDeleted: jest.fn(),
100
- }
91
+ getNodePrivateAndSessionKeys: jest.fn().mockImplementation((uid) =>
92
+ Promise.resolve({
93
+ key: `${uid}-key`,
94
+ passphrase: `${uid}-passphrase`,
95
+ passphraseSessionKey: `${uid}-passphraseSessionKey`,
96
+ contentKeyPacketSessionKey: `${uid}-contentKeyPacketSessionKey`,
97
+ nameSessionKey: `${uid}-nameSessionKey`,
98
+ }),
99
+ ),
100
+ getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: 'root-email', addressKey: 'root-key' }),
101
+ notifyNodeChanged: jest.fn(),
102
+ notifyNodeDeleted: jest.fn(),
103
+ };
101
104
 
102
- management = new NodesManagement(apiService, cryptoCache, cryptoService, nodesAccess, nodesEvents);
105
+ management = new NodesManagement(apiService, cryptoCache, cryptoService, nodesAccess);
103
106
  });
104
107
 
105
108
  it('renameNode manages rename and updates cache', async () => {
@@ -108,6 +111,7 @@ describe('NodesManagement', () => {
108
111
  expect(newNode).toEqual({
109
112
  ...nodes.nodeUid,
110
113
  name: { ok: true, value: 'new name' },
114
+ encryptedName: 'newArmoredNodeName',
111
115
  nameAuthor: { ok: true, value: 'newSignatureEmail' },
112
116
  hash: 'newHash',
113
117
  });
@@ -115,15 +119,15 @@ describe('NodesManagement', () => {
115
119
  expect(cryptoService.encryptNewName).toHaveBeenCalledWith(
116
120
  { key: 'parentUid-key', hashKey: 'parentUid-hashKey' },
117
121
  'nodeUid-nameSessionKey',
118
- { email: "root-email", addressKey: "root-key" },
122
+ { email: 'root-email', addressKey: 'root-key' },
119
123
  'new name',
120
124
  );
121
125
  expect(apiService.renameNode).toHaveBeenCalledWith(
122
126
  nodes.nodeUid.uid,
123
127
  { hash: nodes.nodeUid.hash },
124
- { encryptedName: 'newArmoredNodeName', nameSignatureEmail: 'newSignatureEmail', hash: 'newHash' }
128
+ { encryptedName: 'newArmoredNodeName', nameSignatureEmail: 'newSignatureEmail', hash: 'newHash' },
125
129
  );
126
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith(newNode);
130
+ expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledWith('nodeUid');
127
131
  });
128
132
 
129
133
  it('moveNode manages move and updates cache', async () => {
@@ -134,7 +138,7 @@ describe('NodesManagement', () => {
134
138
  armoredNodePassphraseSignature: 'movedArmoredNodePassphraseSignature',
135
139
  signatureEmail: 'movedSignatureEmail',
136
140
  nameSignatureEmail: 'movedNameSignatureEmail',
137
- }
141
+ };
138
142
  cryptoService.moveNode = jest.fn().mockResolvedValue(encryptedCrypto);
139
143
 
140
144
  const newNode = await management.moveNode('nodeUid', 'newParentNodeUid');
@@ -142,6 +146,7 @@ describe('NodesManagement', () => {
142
146
  expect(newNode).toEqual({
143
147
  ...nodes.nodeUid,
144
148
  parentUid: 'newParentNodeUid',
149
+ encryptedName: 'movedArmoredNodeName',
145
150
  hash: 'movedHash',
146
151
  keyAuthor: { ok: true, value: 'movedSignatureEmail' },
147
152
  nameAuthor: { ok: true, value: 'movedNameSignatureEmail' },
@@ -154,10 +159,10 @@ describe('NodesManagement', () => {
154
159
  passphrase: 'nodeUid-passphrase',
155
160
  passphraseSessionKey: 'nodeUid-passphraseSessionKey',
156
161
  contentKeyPacketSessionKey: 'nodeUid-contentKeyPacketSessionKey',
157
- nameSessionKey: 'nodeUid-nameSessionKey'
162
+ nameSessionKey: 'nodeUid-nameSessionKey',
158
163
  }),
159
164
  expect.objectContaining({ key: 'newParentNodeUid-key', hashKey: 'newParentNodeUid-hashKey' }),
160
- { email: "root-email", addressKey: "root-key" },
165
+ { email: 'root-email', addressKey: 'root-key' },
161
166
  );
162
167
  expect(apiService.moveNode).toHaveBeenCalledWith(
163
168
  'nodeUid',
@@ -171,7 +176,7 @@ describe('NodesManagement', () => {
171
176
  signatureEmail: undefined,
172
177
  },
173
178
  );
174
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith(newNode);
179
+ expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledWith('nodeUid', 'newParentNodeUid');
175
180
  });
176
181
 
177
182
  it('moveNode manages move of anonymous node', async () => {
@@ -182,7 +187,7 @@ describe('NodesManagement', () => {
182
187
  armoredNodePassphraseSignature: 'movedArmoredNodePassphraseSignature',
183
188
  signatureEmail: 'movedSignatureEmail',
184
189
  nameSignatureEmail: 'movedNameSignatureEmail',
185
- }
190
+ };
186
191
  cryptoService.moveNode = jest.fn().mockResolvedValue(encryptedCrypto);
187
192
 
188
193
  const newNode = await management.moveNode('anonymousNodeUid', 'newParentNodeUid');
@@ -194,14 +199,15 @@ describe('NodesManagement', () => {
194
199
  passphrase: 'anonymousNodeUid-passphrase',
195
200
  passphraseSessionKey: 'anonymousNodeUid-passphraseSessionKey',
196
201
  contentKeyPacketSessionKey: 'anonymousNodeUid-contentKeyPacketSessionKey',
197
- nameSessionKey: 'anonymousNodeUid-nameSessionKey'
202
+ nameSessionKey: 'anonymousNodeUid-nameSessionKey',
198
203
  }),
199
204
  expect.objectContaining({ key: 'newParentNodeUid-key', hashKey: 'newParentNodeUid-hashKey' }),
200
- { email: "root-email", addressKey: "root-key" },
205
+ { email: 'root-email', addressKey: 'root-key' },
201
206
  );
202
207
  expect(newNode).toEqual({
203
208
  ...nodes.anonymousNodeUid,
204
209
  parentUid: 'newParentNodeUid',
210
+ encryptedName: 'movedArmoredNodeName',
205
211
  hash: 'movedHash',
206
212
  keyAuthor: { ok: true, value: 'movedSignatureEmail' },
207
213
  nameAuthor: { ok: true, value: 'movedNameSignatureEmail' },
@@ -213,9 +219,28 @@ describe('NodesManagement', () => {
213
219
  },
214
220
  {
215
221
  parentUid: 'newParentNodeUid',
216
- ...encryptedCrypto
222
+ ...encryptedCrypto,
217
223
  },
218
224
  );
219
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith(newNode);
225
+ });
226
+
227
+ it('trashes node and updates cache', async () => {
228
+ const uids = ['v1~n1', 'v1~n2'];
229
+ const trashed = new Set();
230
+ for await (const node of management.trashNodes(uids)) {
231
+ trashed.add(node.uid);
232
+ }
233
+ expect(trashed).toEqual(new Set(uids));
234
+ expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledTimes(2);
235
+ });
236
+
237
+ it('restores node and updates cache', async () => {
238
+ const uids = ['v1~n1', 'v1~n2'];
239
+ const restored = new Set();
240
+ for await (const node of management.restoreNodes(uids)) {
241
+ restored.add(node.uid);
242
+ }
243
+ expect(restored).toEqual(new Set(uids));
244
+ expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledTimes(2);
220
245
  });
221
246
  });