@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
@@ -16,7 +16,7 @@ describe('nodesAccess', () => {
16
16
  apiService = {
17
17
  getNode: jest.fn(),
18
18
  iterateNodes: jest.fn().mockImplementation(async function* (uids) {
19
- yield* uids.map((uid => ({ uid, parentUid: 'parentUid' })));
19
+ yield* uids.map((uid) => ({ uid, parentUid: 'volumeId~parentNodeId' }));
20
20
  }),
21
21
  iterateChildrenNodeUids: jest.fn(),
22
22
  };
@@ -47,88 +47,109 @@ describe('nodesAccess', () => {
47
47
  });
48
48
  describe('getNode', () => {
49
49
  it('should get node from cache', async () => {
50
- const node = { uid: 'nodeId', isStale: false };
50
+ const node = { uid: 'volumeId~nodeId', isStale: false };
51
51
  cache.getNode = jest.fn(() => Promise.resolve(node));
52
- const result = await access.getNode('nodeId');
52
+ const result = await access.getNode('volumeId~nodeId');
53
53
  expect(result).toBe(node);
54
54
  expect(apiService.getNode).not.toHaveBeenCalled();
55
55
  });
56
- it('should get node from API when cahce is stale', async () => {
57
- const encryptedNode = { uid: 'nodeId', parentUid: 'parentUid' };
58
- const decryptedUnparsedNode = { uid: 'nodeId', parentUid: 'parentUid', name: { ok: true, value: 'name' } };
56
+ it('should get node from API when cache is stale', async () => {
57
+ const encryptedNode = { uid: 'volumeId~nodeId', parentUid: 'volumeId~parentNodeid' };
58
+ const decryptedUnparsedNode = {
59
+ uid: 'volumeId~nodeId',
60
+ parentUid: 'volumeId~parentNodeid',
61
+ name: { ok: true, value: 'name' },
62
+ };
59
63
  const decryptedNode = {
60
64
  ...decryptedUnparsedNode,
61
65
  name: { ok: true, value: 'name' },
62
66
  isStale: false,
63
67
  activeRevision: undefined,
64
68
  folder: undefined,
69
+ treeEventScopeId: 'volumeId',
65
70
  };
66
71
  const decryptedKeys = { key: 'key' };
67
- cache.getNode = jest.fn(() => Promise.resolve({ uid: 'nodeId', isStale: true }));
72
+ cache.getNode = jest.fn(() => Promise.resolve({ uid: 'volumeId~nodeId', isStale: true }));
68
73
  apiService.getNode = jest.fn(() => Promise.resolve(encryptedNode));
69
74
  cryptoCache.getNodeKeys = jest.fn(() => Promise.resolve({ key: 'parentKey' }));
70
75
  cryptoService.decryptNode = jest.fn(() => Promise.resolve({ node: decryptedUnparsedNode, keys: decryptedKeys }));
71
- const result = await access.getNode('nodeId');
76
+ const result = await access.getNode('volumeId~nodeId');
72
77
  expect(result).toEqual(decryptedNode);
73
- expect(apiService.getNode).toHaveBeenCalledWith('nodeId', 'volumeId');
74
- expect(cryptoCache.getNodeKeys).toHaveBeenCalledWith('parentUid');
78
+ expect(apiService.getNode).toHaveBeenCalledWith('volumeId~nodeId', 'volumeId');
79
+ expect(cryptoCache.getNodeKeys).toHaveBeenCalledWith('volumeId~parentNodeid');
75
80
  expect(cryptoService.decryptNode).toHaveBeenCalledWith(encryptedNode, 'parentKey');
76
81
  expect(cache.setNode).toHaveBeenCalledWith(decryptedNode);
77
- expect(cryptoCache.setNodeKeys).toHaveBeenCalledWith('nodeId', decryptedKeys);
82
+ expect(cryptoCache.setNodeKeys).toHaveBeenCalledWith('volumeId~nodeId', decryptedKeys);
78
83
  });
79
84
  it('should get node from API missing cache', async () => {
80
- const encryptedNode = { uid: 'nodeId', parentUid: 'parentUid' };
81
- const decryptedUnparsedNode = { uid: 'nodeId', parentUid: 'parentUid', name: { ok: true, value: 'name' } };
85
+ const encryptedNode = { uid: 'volumeId~nodeId', parentUid: 'volumeId~parentNodeid' };
86
+ const decryptedUnparsedNode = {
87
+ uid: 'volumeId~nodeId',
88
+ parentUid: 'volumeId~parentNodeid',
89
+ name: { ok: true, value: 'name' },
90
+ };
82
91
  const decryptedNode = {
83
92
  ...decryptedUnparsedNode,
84
93
  name: { ok: true, value: 'name' },
85
94
  isStale: false,
86
95
  activeRevision: undefined,
87
96
  folder: undefined,
97
+ treeEventScopeId: 'volumeId',
88
98
  };
89
99
  const decryptedKeys = { key: 'key' };
90
100
  cache.getNode = jest.fn(() => Promise.reject(new Error('Entity not found')));
91
101
  apiService.getNode = jest.fn(() => Promise.resolve(encryptedNode));
92
102
  cryptoCache.getNodeKeys = jest.fn(() => Promise.resolve({ key: 'parentKey' }));
93
103
  cryptoService.decryptNode = jest.fn(() => Promise.resolve({ node: decryptedUnparsedNode, keys: decryptedKeys }));
94
- const result = await access.getNode('nodeId');
104
+ const result = await access.getNode('volumeId~nodeId');
95
105
  expect(result).toEqual(decryptedNode);
96
- expect(apiService.getNode).toHaveBeenCalledWith('nodeId', 'volumeId');
97
- expect(cryptoCache.getNodeKeys).toHaveBeenCalledWith('parentUid');
106
+ expect(apiService.getNode).toHaveBeenCalledWith('volumeId~nodeId', 'volumeId');
107
+ expect(cryptoCache.getNodeKeys).toHaveBeenCalledWith('volumeId~parentNodeid');
98
108
  expect(cryptoService.decryptNode).toHaveBeenCalledWith(encryptedNode, 'parentKey');
99
109
  expect(cache.setNode).toHaveBeenCalledWith(decryptedNode);
100
- expect(cryptoCache.setNodeKeys).toHaveBeenCalledWith('nodeId', decryptedKeys);
110
+ expect(cryptoCache.setNodeKeys).toHaveBeenCalledWith('volumeId~nodeId', decryptedKeys);
101
111
  });
102
112
  it('should validate node name', async () => {
103
- const encryptedNode = { uid: 'nodeId', parentUid: 'parentUid' };
104
- const decryptedUnparsedNode = { uid: 'nodeId', parentUid: 'parentUid', name: { ok: true, value: 'foo/bar' } };
113
+ const encryptedNode = { uid: 'volumeId~nodeId', parentUid: 'volumeId~parentNodeid' };
114
+ const decryptedUnparsedNode = {
115
+ uid: 'volumeId~nodeId',
116
+ parentUid: 'volumeId~parentNodeid',
117
+ name: { ok: true, value: 'foo/bar' },
118
+ };
105
119
  const decryptedNode = {
106
120
  ...decryptedUnparsedNode,
107
121
  name: { ok: false, error: { name: 'foo/bar', error: "Name must not contain the character '/'" } },
122
+ treeEventScopeId: 'volumeId',
108
123
  };
109
124
  const decryptedKeys = { key: 'key' };
110
125
  cache.getNode = jest.fn(() => Promise.reject(new Error('Entity not found')));
111
126
  apiService.getNode = jest.fn(() => Promise.resolve(encryptedNode));
112
127
  cryptoCache.getNodeKeys = jest.fn(() => Promise.resolve({ key: 'parentKey' }));
113
128
  cryptoService.decryptNode = jest.fn(() => Promise.resolve({ node: decryptedUnparsedNode, keys: decryptedKeys }));
114
- const result = await access.getNode('nodeId');
129
+ const result = await access.getNode('volumeId~nodeId');
115
130
  expect(result).toMatchObject(decryptedNode);
116
131
  });
117
132
  });
118
133
  describe('iterate methods', () => {
119
134
  beforeEach(() => {
120
- cryptoCache.getNodeKeys = jest.fn().mockImplementation((uid) => Promise.resolve({ key: 'key' }));
135
+ cryptoCache.getNodeKeys = jest
136
+ .fn()
137
+ .mockImplementation((uid) => Promise.resolve({ key: 'key' }));
121
138
  cryptoService.decryptNode = jest.fn().mockImplementation((encryptedNode) => Promise.resolve({
122
- node: { uid: encryptedNode.uid, isStale: false, name: { ok: true, value: 'name' } },
139
+ node: {
140
+ uid: encryptedNode.uid,
141
+ isStale: false,
142
+ name: { ok: true, value: 'name' },
143
+ },
123
144
  keys: { key: 'key' },
124
145
  }));
125
146
  });
126
147
  describe('iterateChildren', () => {
127
- const parentNode = { uid: 'parentUid', isStale: false };
128
- const node1 = { uid: 'node1', isStale: false };
129
- const node2 = { uid: 'node2', isStale: false };
130
- const node3 = { uid: 'node3', isStale: false };
131
- const node4 = { uid: 'node4', isStale: false };
148
+ const parentNode = { uid: 'volumeId~parentNodeid', isStale: false };
149
+ const node1 = { uid: 'volumeId~node1', isStale: false };
150
+ const node2 = { uid: 'volumeId~node2', isStale: false };
151
+ const node3 = { uid: 'volumeId~node3', isStale: false };
152
+ const node4 = { uid: 'volumeId~node4', isStale: false };
132
153
  beforeEach(() => {
133
154
  cache.getNode = jest.fn().mockResolvedValue(parentNode);
134
155
  });
@@ -140,7 +161,7 @@ describe('nodesAccess', () => {
140
161
  yield { ok: true, node: node3 };
141
162
  yield { ok: true, node: node4 };
142
163
  });
143
- const result = await Array.fromAsync(access.iterateFolderChildren('parentUid'));
164
+ const result = await Array.fromAsync(access.iterateFolderChildren('volumeId~parentNodeid'));
144
165
  expect(result).toMatchObject([node1, node2, node3, node4]);
145
166
  expect(apiService.iterateChildrenNodeUids).not.toHaveBeenCalled();
146
167
  expect(apiService.iterateNodes).not.toHaveBeenCalled();
@@ -153,33 +174,33 @@ describe('nodesAccess', () => {
153
174
  yield { ok: true, uid: node3.uid, node: { ...node3, isStale: true } };
154
175
  yield { ok: true, uid: node4.uid, node: node4 };
155
176
  });
156
- const result = await Array.fromAsync(access.iterateFolderChildren('parentUid'));
177
+ const result = await Array.fromAsync(access.iterateFolderChildren('volumeId~parentNodeid'));
157
178
  expect(result).toMatchObject([node1, node4, node2, node3]);
158
- expect(apiService.iterateNodes).toHaveBeenCalledWith(['node2', 'node3'], 'volumeId', undefined);
179
+ expect(apiService.iterateNodes).toHaveBeenCalledWith([node2.uid, node3.uid], 'volumeId', undefined);
159
180
  expect(cryptoService.decryptNode).toHaveBeenCalledTimes(2);
160
181
  expect(cache.setNode).toHaveBeenCalledTimes(2);
161
182
  expect(cryptoCache.setNodeKeys).toHaveBeenCalledTimes(2);
162
183
  });
163
184
  it('should load children uids and serve nodes from cache', async () => {
164
185
  apiService.iterateChildrenNodeUids = jest.fn().mockImplementation(async function* () {
165
- yield 'node1';
166
- yield 'node2';
167
- yield 'node3';
168
- yield 'node4';
186
+ yield node1.uid;
187
+ yield node2.uid;
188
+ yield node3.uid;
189
+ yield node4.uid;
169
190
  });
170
191
  cache.getNode = jest.fn().mockImplementation((uid) => ({ uid, isStale: false }));
171
- const result = await Array.fromAsync(access.iterateFolderChildren('parentUid'));
192
+ const result = await Array.fromAsync(access.iterateFolderChildren('volumeId~parentNodeid'));
172
193
  expect(result).toMatchObject([node1, node2, node3, node4]);
173
- expect(apiService.iterateChildrenNodeUids).toHaveBeenCalledWith('parentUid', undefined);
194
+ expect(apiService.iterateChildrenNodeUids).toHaveBeenCalledWith('volumeId~parentNodeid', undefined);
174
195
  expect(apiService.iterateNodes).not.toHaveBeenCalled();
175
- expect(cache.setFolderChildrenLoaded).toHaveBeenCalledWith('parentUid');
196
+ expect(cache.setFolderChildrenLoaded).toHaveBeenCalledWith('volumeId~parentNodeid');
176
197
  });
177
198
  it('should load from API', async () => {
178
199
  apiService.iterateChildrenNodeUids = jest.fn().mockImplementation(async function* () {
179
- yield 'node1';
180
- yield 'node2';
181
- yield 'node3';
182
- yield 'node4';
200
+ yield node1.uid;
201
+ yield node2.uid;
202
+ yield node3.uid;
203
+ yield node4.uid;
183
204
  });
184
205
  cache.getNode = jest.fn().mockImplementation((uid) => {
185
206
  if (uid === parentNode.uid) {
@@ -187,20 +208,20 @@ describe('nodesAccess', () => {
187
208
  }
188
209
  throw new Error('Entity not found');
189
210
  });
190
- const result = await Array.fromAsync(access.iterateFolderChildren('parentUid'));
211
+ const result = await Array.fromAsync(access.iterateFolderChildren('volumeId~parentNodeid'));
191
212
  expect(result).toMatchObject([node1, node2, node3, node4]);
192
- expect(apiService.iterateChildrenNodeUids).toHaveBeenCalledWith('parentUid', undefined);
193
- expect(apiService.iterateNodes).toHaveBeenCalledWith(['node1', 'node2', 'node3', 'node4'], 'volumeId', undefined);
213
+ expect(apiService.iterateChildrenNodeUids).toHaveBeenCalledWith('volumeId~parentNodeid', undefined);
214
+ expect(apiService.iterateNodes).toHaveBeenCalledWith(['volumeId~node1', 'volumeId~node2', 'volumeId~node3', 'volumeId~node4'], 'volumeId', undefined);
194
215
  expect(cryptoService.decryptNode).toHaveBeenCalledTimes(4);
195
216
  expect(cache.setNode).toHaveBeenCalledTimes(4);
196
217
  expect(cryptoCache.setNodeKeys).toHaveBeenCalledTimes(4);
197
- expect(cache.setFolderChildrenLoaded).toHaveBeenCalledWith('parentUid');
218
+ expect(cache.setFolderChildrenLoaded).toHaveBeenCalledWith('volumeId~parentNodeid');
198
219
  });
199
220
  it('should remove from cache if missing on API', async () => {
200
221
  apiService.iterateChildrenNodeUids = jest.fn().mockImplementation(async function* () {
201
- yield 'node1';
202
- yield 'node2';
203
- yield 'node3';
222
+ yield node1.uid;
223
+ yield node2.uid;
224
+ yield node3.uid;
204
225
  });
205
226
  cache.getNode = jest.fn().mockImplementation((uid) => {
206
227
  if (uid === parentNode.uid) {
@@ -212,15 +233,15 @@ describe('nodesAccess', () => {
212
233
  // Skip first node - make it missing.
213
234
  yield* uids.slice(1).map((uid) => ({ uid, parentUid: parentNode.uid }));
214
235
  });
215
- const result = await Array.fromAsync(access.iterateFolderChildren('parentUid'));
236
+ const result = await Array.fromAsync(access.iterateFolderChildren('volumeId~parentNodeid'));
216
237
  expect(result).toMatchObject([node2, node3]);
217
- expect(cache.removeNodes).toHaveBeenCalledWith(['node1']);
238
+ expect(cache.removeNodes).toHaveBeenCalledWith([node1.uid]);
218
239
  });
219
240
  it('should yield all decryptable children before throwing error', async () => {
220
241
  apiService.iterateChildrenNodeUids = jest.fn().mockImplementation(async function* () {
221
- yield 'node1';
222
- yield 'node2';
223
- yield 'node3';
242
+ yield 'volumeId~node1';
243
+ yield 'volumeId~node2';
244
+ yield 'volumeId~node3';
224
245
  });
225
246
  cache.getNode = jest.fn().mockImplementation((uid) => {
226
247
  if (uid === parentNode.uid) {
@@ -229,37 +250,39 @@ describe('nodesAccess', () => {
229
250
  throw new Error('Entity not found');
230
251
  });
231
252
  cryptoService.decryptNode = jest.fn().mockImplementation((encryptedNode) => {
232
- if (encryptedNode.uid === 'node2') {
253
+ if (encryptedNode.uid === 'volumeId~node2') {
233
254
  throw new errors_1.DecryptionError('Decryption failed');
234
255
  }
235
256
  return Promise.resolve({
236
- node: { uid: encryptedNode.uid, isStale: false, name: { ok: true, value: 'name' } },
257
+ node: {
258
+ uid: encryptedNode.uid,
259
+ isStale: false,
260
+ name: { ok: true, value: 'name' },
261
+ },
237
262
  keys: { key: 'key' },
238
263
  });
239
264
  });
240
- const generator = access.iterateFolderChildren('parentUid');
265
+ const generator = access.iterateFolderChildren('volumeId~parentNodeid');
241
266
  const node1 = await generator.next();
242
- expect(node1.value).toMatchObject({ uid: 'node1' });
267
+ expect(node1.value).toMatchObject({ uid: 'volumeId~node1' });
243
268
  const node2 = await generator.next();
244
- expect(node2.value).toMatchObject({ uid: 'node3' });
269
+ expect(node2.value).toMatchObject({ uid: 'volumeId~node3' });
245
270
  const node3 = generator.next();
246
271
  await expect(node3).rejects.toThrow('Failed to decrypt some nodes');
247
272
  try {
248
273
  await node3;
249
274
  }
250
275
  catch (error) {
251
- expect(error.cause).toEqual([
252
- new errors_1.DecryptionError('Decryption failed'),
253
- ]);
276
+ expect(error.cause).toEqual([new errors_1.DecryptionError('Decryption failed')]);
254
277
  }
255
278
  });
256
279
  });
257
280
  describe('iterateTrashedNodes', () => {
258
281
  const volumeId = 'volumeId';
259
- const node1 = { uid: 'node1', isStale: false };
260
- const node2 = { uid: 'node2', isStale: false };
261
- const node3 = { uid: 'node3', isStale: false };
262
- const node4 = { uid: 'node4', isStale: false };
282
+ const node1 = { uid: 'volumeId~node1', isStale: false };
283
+ const node2 = { uid: 'volumeId~node2', isStale: false };
284
+ const node3 = { uid: 'volumeId~node3', isStale: false };
285
+ const node4 = { uid: 'volumeId~node4', isStale: false };
263
286
  beforeEach(() => {
264
287
  shareService.getMyFilesIDs = jest.fn().mockResolvedValue({ volumeId });
265
288
  apiService.iterateTrashedNodeUids = jest.fn().mockImplementation(async function* () {
@@ -283,7 +306,7 @@ describe('nodesAccess', () => {
283
306
  const result = await Array.fromAsync(access.iterateTrashedNodes());
284
307
  expect(result).toMatchObject([node1, node2, node3, node4]);
285
308
  expect(apiService.iterateTrashedNodeUids).toHaveBeenCalledWith(volumeId, undefined);
286
- expect(apiService.iterateNodes).toHaveBeenCalledWith(['node1', 'node2', 'node3', 'node4'], volumeId, undefined);
309
+ expect(apiService.iterateNodes).toHaveBeenCalledWith(['volumeId~node1', 'volumeId~node2', 'volumeId~node3', 'volumeId~node4'], volumeId, undefined);
287
310
  expect(cryptoService.decryptNode).toHaveBeenCalledTimes(4);
288
311
  expect(cache.setNode).toHaveBeenCalledTimes(4);
289
312
  expect(cryptoCache.setNodeKeys).toHaveBeenCalledTimes(4);
@@ -294,18 +317,18 @@ describe('nodesAccess', () => {
294
317
  });
295
318
  apiService.iterateNodes = jest.fn().mockImplementation(async function* (uids) {
296
319
  // Skip first node - make it missing.
297
- yield* uids.slice(1).map((uid) => ({ uid, parentUid: 'parentUid' }));
320
+ yield* uids.slice(1).map((uid) => ({ uid, parentUid: 'volumeId~parentNodeid' }));
298
321
  });
299
322
  const result = await Array.fromAsync(access.iterateTrashedNodes());
300
323
  expect(result).toMatchObject([node2, node3, node4]);
301
- expect(cache.removeNodes).toHaveBeenCalledWith(['node1']);
324
+ expect(cache.removeNodes).toHaveBeenCalledWith(['volumeId~node1']);
302
325
  });
303
326
  });
304
327
  describe('iterateNodes', () => {
305
- const node1 = { uid: 'node1', isStale: false };
306
- const node2 = { uid: 'node2', isStale: false };
307
- const node3 = { uid: 'node3', isStale: false };
308
- const node4 = { uid: 'node4', isStale: false };
328
+ const node1 = { uid: 'volumeId~node1', isStale: false, treeEventScopeId: 'volumeId' };
329
+ const node2 = { uid: 'volumeId~node2', isStale: false, treeEventScopeId: 'volumeId' };
330
+ const node3 = { uid: 'volumeId~node3', isStale: false, treeEventScopeId: 'volumeId' };
331
+ const node4 = { uid: 'volume~node4', isStale: false, treeEventScopeId: 'volumeId' };
309
332
  it('should serve fully from cache', async () => {
310
333
  cache.iterateNodes = jest.fn().mockImplementation(async function* () {
311
334
  yield { ok: true, node: node1 };
@@ -313,70 +336,79 @@ describe('nodesAccess', () => {
313
336
  yield { ok: true, node: node3 };
314
337
  yield { ok: true, node: node4 };
315
338
  });
316
- const result = await Array.fromAsync(access.iterateNodes(['node1', 'node2', 'node3', 'node4']));
339
+ const result = await Array.fromAsync(access.iterateNodes(['volumeId~node1', 'volumeId~node2', 'volumeId~node3', 'volumeId~node4']));
317
340
  expect(result).toMatchObject([node1, node2, node3, node4]);
318
341
  expect(apiService.iterateNodes).not.toHaveBeenCalled();
319
342
  });
320
343
  it('should load from API', async () => {
321
344
  cache.iterateNodes = jest.fn().mockImplementation(async function* () {
322
345
  yield { ok: true, node: node1 };
323
- yield { ok: false, uid: 'node2' };
324
- yield { ok: false, uid: 'node3' };
346
+ yield { ok: false, uid: 'volumeId~node2' };
347
+ yield { ok: false, uid: 'volumeId~node3' };
325
348
  yield { ok: true, node: node4 };
326
349
  });
327
- const result = await Array.fromAsync(access.iterateNodes(['node1', 'node2', 'node3', 'node4']));
350
+ const result = await Array.fromAsync(access.iterateNodes(['volumeId~node1', 'volumeId~node2', 'volumeId~node3', 'volumeId~node4']));
328
351
  expect(result).toMatchObject([node1, node4, node2, node3]);
329
- expect(apiService.iterateNodes).toHaveBeenCalledWith(['node2', 'node3'], 'volumeId', undefined);
352
+ expect(apiService.iterateNodes).toHaveBeenCalledWith(['volumeId~node2', 'volumeId~node3'], 'volumeId', undefined);
330
353
  });
331
354
  it('should remove from cache if missing on API and return back to caller', async () => {
332
355
  cache.iterateNodes = jest.fn().mockImplementation(async function* () {
333
- yield { ok: false, uid: 'node1' };
334
- yield { ok: false, uid: 'node2' };
335
- yield { ok: false, uid: 'node3' };
356
+ yield { ok: false, uid: 'volumeId~node1' };
357
+ yield { ok: false, uid: 'volumeId~node2' };
358
+ yield { ok: false, uid: 'volumeId~node3' };
336
359
  });
337
360
  apiService.iterateNodes = jest.fn().mockImplementation(async function* (uids) {
338
361
  // Skip first node - make it missing.
339
- yield* uids.slice(1).map((uid) => ({ uid, parentUid: 'parentUid' }));
362
+ yield* uids.slice(1).map((uid) => ({ uid, parentUid: 'volumeId~parentNodeid' }));
340
363
  });
341
- const result = await Array.fromAsync(access.iterateNodes(['node1', 'node2', 'node3']));
342
- expect(result).toMatchObject([node2, node3, { missingUid: 'node1' }]);
343
- expect(cache.removeNodes).toHaveBeenCalledWith(['node1']);
364
+ const result = await Array.fromAsync(access.iterateNodes(['volumeId~node1', 'volumeId~node2', 'volumeId~node3']));
365
+ expect(result).toMatchObject([node2, node3, { missingUid: 'volumeId~node1' }]);
366
+ expect(cache.removeNodes).toHaveBeenCalledWith(['volumeId~node1']);
344
367
  });
345
368
  it('should return degraded node if parent cannot be decrypted', async () => {
346
369
  cache.iterateNodes = jest.fn().mockImplementation(async function* () {
347
- yield { ok: false, uid: 'node1' };
348
- yield { ok: false, uid: 'node2' };
349
- yield { ok: false, uid: 'node3' };
370
+ yield { ok: false, uid: 'volumeId~node1' };
371
+ yield { ok: false, uid: 'volumeId~node2' };
372
+ yield { ok: false, uid: 'volumeId~node3' };
350
373
  });
351
374
  const encryptedCrypto = {
352
375
  signatureEmail: 'signatureEmail',
353
376
  nameSignatureEmail: 'nameSignatureEmail',
354
377
  };
355
378
  apiService.iterateNodes = jest.fn().mockImplementation(async function* (uids) {
356
- yield* uids.map((uid) => ({
357
- uid,
358
- parentUid: `parentUidFor:${uid}`,
359
- encryptedCrypto,
360
- }));
379
+ yield* uids.map((uid) => {
380
+ const parentUid = uid.replace('node', 'parentOfNode');
381
+ return {
382
+ uid,
383
+ parentUid,
384
+ encryptedCrypto,
385
+ };
386
+ });
361
387
  });
362
388
  const decryptionError = new errors_1.DecryptionError('Parent cannot be decrypted');
363
389
  jest.spyOn(access, 'getParentKeys').mockImplementation(async ({ parentUid }) => {
364
- if (parentUid === 'parentUidFor:node1') {
390
+ if (parentUid === 'volumeId~parentOfNode1') {
365
391
  throw decryptionError;
366
392
  }
367
393
  return {
368
394
  key: { _idx: 32132 },
369
395
  };
370
396
  });
371
- const result = await Array.fromAsync(access.iterateNodes(['node1', 'node2', 'node3']));
397
+ const result = await Array.fromAsync(access.iterateNodes(['volumeId~node1', 'volumeId~node2', 'volumeId~node3']));
372
398
  expect(result).toEqual([
373
399
  {
374
400
  ...node1,
375
401
  encryptedCrypto,
376
- parentUid: 'parentUidFor:node1',
402
+ parentUid: 'volumeId~parentOfNode1',
377
403
  name: { ok: false, error: decryptionError },
378
- keyAuthor: { ok: false, error: { claimedAuthor: 'signatureEmail', error: decryptionError.message } },
379
- nameAuthor: { ok: false, error: { claimedAuthor: 'nameSignatureEmail', error: decryptionError.message } },
404
+ keyAuthor: {
405
+ ok: false,
406
+ error: { claimedAuthor: 'signatureEmail', error: decryptionError.message },
407
+ },
408
+ nameAuthor: {
409
+ ok: false,
410
+ error: { claimedAuthor: 'nameSignatureEmail', error: decryptionError.message },
411
+ },
380
412
  errors: [decryptionError],
381
413
  },
382
414
  {
@@ -404,13 +436,13 @@ describe('nodesAccess', () => {
404
436
  });
405
437
  it('should get node parent keys', async () => {
406
438
  cryptoCache.getNodeKeys = jest.fn(() => Promise.resolve({ key: 'parentKey' }));
407
- const result = await access.getParentKeys({ shareId: undefined, parentUid: 'parentUid' });
439
+ const result = await access.getParentKeys({ shareId: undefined, parentUid: 'volumeId~parentNodeid' });
408
440
  expect(result).toEqual({ key: 'parentKey' });
409
441
  expect(shareService.getSharePrivateKey).not.toHaveBeenCalled();
410
442
  });
411
443
  it('should get node parent keys even if share is set', async () => {
412
444
  cryptoCache.getNodeKeys = jest.fn(() => Promise.resolve({ key: 'parentKey' }));
413
- const result = await access.getParentKeys({ shareId: 'shareId', parentUid: 'parentUid' });
445
+ const result = await access.getParentKeys({ shareId: 'shareId', parentUid: 'volume1~parentNodeid' });
414
446
  expect(result).toEqual({ key: 'parentKey' });
415
447
  expect(shareService.getSharePrivateKey).not.toHaveBeenCalled();
416
448
  });
@@ -420,7 +452,7 @@ describe('nodesAccess', () => {
420
452
  cryptoCache.getNodeKeys = jest.fn(() => Promise.reject(new Error('Entity not found')));
421
453
  apiService.getNode = jest.fn(() => Promise.reject(new Error('API called')));
422
454
  try {
423
- await access.getNodeKeys('nodeId');
455
+ await access.getNodeKeys('volumeId~nodeId');
424
456
  throw new Error('Expected error');
425
457
  }
426
458
  catch (error) {
@@ -433,7 +465,7 @@ describe('nodesAccess', () => {
433
465
  const nodeUid = 'nodeUid';
434
466
  const node = {
435
467
  uid: nodeUid,
436
- parentUid: 'parentUid',
468
+ parentUid: 'volume1~parentNodeid',
437
469
  encryptedName: 'encryptedName',
438
470
  };
439
471
  jest.spyOn(access, 'getNode').mockResolvedValue(node);
@@ -484,5 +516,37 @@ describe('nodesAccess', () => {
484
516
  expect(result).toBe('https://drive.proton.me/shareId/folder/nodeId');
485
517
  });
486
518
  });
519
+ describe('notifyNodeChanged', () => {
520
+ it('should mark node as stale', async () => {
521
+ const node = { uid: 'volumeId~nodeId', isStale: false };
522
+ cache.getNode = jest.fn(() => Promise.resolve(node));
523
+ cache.setNode = jest.fn();
524
+ await access.notifyNodeChanged(node.uid);
525
+ expect(cache.getNode).toHaveBeenCalledWith(node.uid);
526
+ expect(cache.setNode).toHaveBeenCalledWith({ ...node, isStale: true });
527
+ });
528
+ it('should update parent if needed', async () => {
529
+ const node = { uid: 'volumeId~nodeId', parentUid: 'v1~pn1', isStale: false };
530
+ cache.getNode = jest.fn(() => Promise.resolve(node));
531
+ cache.setNode = jest.fn();
532
+ await access.notifyNodeChanged(node.uid, 'v1~pn2');
533
+ expect(cache.getNode).toHaveBeenCalledWith(node.uid);
534
+ expect(cache.setNode).toHaveBeenCalledWith({ ...node, parentUid: 'v1~pn2', isStale: true });
535
+ });
536
+ });
537
+ describe('notifyChildCreated', () => {
538
+ it('should reset parent listing', async () => {
539
+ const nodeUid = 'VolumeId1~NodeId1';
540
+ cache.resetFolderChildrenLoaded = jest.fn();
541
+ await access.notifyChildCreated(nodeUid);
542
+ expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledWith(nodeUid);
543
+ });
544
+ });
545
+ describe('notifyNodeDeleted', () => {
546
+ it('should reset parent listing', async () => {
547
+ await access.notifyNodeDeleted('v1~n1');
548
+ expect(cache.removeNodes).toHaveBeenCalledWith(['v1~n1']);
549
+ });
550
+ });
487
551
  });
488
552
  //# sourceMappingURL=nodesAccess.test.js.map