@protontech/drive-sdk 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +2 -1
  120. package/dist/internal/events/eventManager.js +9 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +84 -60
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +10 -9
  125. package/dist/internal/events/index.js +38 -32
  126. package/dist/internal/events/index.js.map +1 -1
  127. package/dist/internal/events/interface.d.ts +1 -1
  128. package/dist/internal/events/interface.js +0 -1
  129. package/dist/internal/events/interface.js.map +1 -1
  130. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  131. package/dist/internal/events/volumeEventManager.js.map +1 -1
  132. package/dist/internal/events/volumeEventManager.test.js +55 -55
  133. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  134. package/dist/internal/nodes/apiService.d.ts +4 -3
  135. package/dist/internal/nodes/apiService.js +36 -15
  136. package/dist/internal/nodes/apiService.js.map +1 -1
  137. package/dist/internal/nodes/apiService.test.js +60 -41
  138. package/dist/internal/nodes/apiService.test.js.map +1 -1
  139. package/dist/internal/nodes/cache.d.ts +5 -5
  140. package/dist/internal/nodes/cache.js +14 -7
  141. package/dist/internal/nodes/cache.js.map +1 -1
  142. package/dist/internal/nodes/cache.test.js +31 -9
  143. package/dist/internal/nodes/cache.test.js.map +1 -1
  144. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  145. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  146. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  147. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  148. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  149. package/dist/internal/nodes/cryptoService.js +11 -17
  150. package/dist/internal/nodes/cryptoService.js.map +1 -1
  151. package/dist/internal/nodes/cryptoService.test.js +320 -241
  152. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  153. package/dist/internal/nodes/events.d.ts +3 -3
  154. package/dist/internal/nodes/events.js +7 -7
  155. package/dist/internal/nodes/events.js.map +1 -1
  156. package/dist/internal/nodes/events.test.js +27 -21
  157. package/dist/internal/nodes/events.test.js.map +1 -1
  158. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  159. package/dist/internal/nodes/extendedAttributes.js +3 -1
  160. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  161. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  162. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  163. package/dist/internal/nodes/index.d.ts +10 -10
  164. package/dist/internal/nodes/index.js.map +1 -1
  165. package/dist/internal/nodes/index.test.d.ts +1 -0
  166. package/dist/internal/nodes/index.test.js +106 -0
  167. package/dist/internal/nodes/index.test.js.map +1 -0
  168. package/dist/internal/nodes/interface.d.ts +2 -2
  169. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  170. package/dist/internal/nodes/nodesAccess.js +28 -16
  171. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  172. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  173. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  174. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  175. package/dist/internal/nodes/nodesManagement.js +9 -7
  176. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  177. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  178. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  179. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  180. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  181. package/dist/internal/photos/albums.d.ts +3 -3
  182. package/dist/internal/photos/albums.js.map +1 -1
  183. package/dist/internal/photos/apiService.d.ts +1 -1
  184. package/dist/internal/photos/apiService.js +3 -6
  185. package/dist/internal/photos/apiService.js.map +1 -1
  186. package/dist/internal/photos/cache.d.ts +1 -1
  187. package/dist/internal/photos/index.d.ts +5 -5
  188. package/dist/internal/photos/index.js.map +1 -1
  189. package/dist/internal/photos/interface.d.ts +2 -2
  190. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  191. package/dist/internal/photos/photosTimeline.js +1 -2
  192. package/dist/internal/photos/photosTimeline.js.map +1 -1
  193. package/dist/internal/sdkEvents.d.ts +1 -1
  194. package/dist/internal/sdkEvents.js +2 -7
  195. package/dist/internal/sdkEvents.js.map +1 -1
  196. package/dist/internal/sdkEvents.test.js +8 -8
  197. package/dist/internal/shares/apiService.d.ts +2 -2
  198. package/dist/internal/shares/apiService.js +5 -3
  199. package/dist/internal/shares/apiService.js.map +1 -1
  200. package/dist/internal/shares/cache.d.ts +2 -2
  201. package/dist/internal/shares/cache.js +12 -6
  202. package/dist/internal/shares/cache.js.map +1 -1
  203. package/dist/internal/shares/cache.test.js.map +1 -1
  204. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  205. package/dist/internal/shares/cryptoCache.test.js +8 -2
  206. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.d.ts +3 -3
  208. package/dist/internal/shares/cryptoService.js.map +1 -1
  209. package/dist/internal/shares/cryptoService.test.js +42 -42
  210. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  211. package/dist/internal/shares/index.d.ts +4 -4
  212. package/dist/internal/shares/index.js.map +1 -1
  213. package/dist/internal/shares/interface.d.ts +2 -2
  214. package/dist/internal/shares/manager.d.ts +7 -7
  215. package/dist/internal/shares/manager.js.map +1 -1
  216. package/dist/internal/shares/manager.test.js +71 -63
  217. package/dist/internal/shares/manager.test.js.map +1 -1
  218. package/dist/internal/sharing/apiService.d.ts +4 -4
  219. package/dist/internal/sharing/apiService.js +4 -3
  220. package/dist/internal/sharing/apiService.js.map +1 -1
  221. package/dist/internal/sharing/cache.d.ts +2 -1
  222. package/dist/internal/sharing/cache.js +9 -0
  223. package/dist/internal/sharing/cache.js.map +1 -1
  224. package/dist/internal/sharing/cache.test.js +33 -33
  225. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  226. package/dist/internal/sharing/cryptoService.js +3 -5
  227. package/dist/internal/sharing/cryptoService.js.map +1 -1
  228. package/dist/internal/sharing/cryptoService.test.js +39 -39
  229. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  230. package/dist/internal/sharing/events.d.ts +5 -4
  231. package/dist/internal/sharing/events.js +28 -19
  232. package/dist/internal/sharing/events.js.map +1 -1
  233. package/dist/internal/sharing/events.test.js +101 -88
  234. package/dist/internal/sharing/events.test.js.map +1 -1
  235. package/dist/internal/sharing/index.d.ts +6 -6
  236. package/dist/internal/sharing/index.js.map +1 -1
  237. package/dist/internal/sharing/interface.d.ts +5 -4
  238. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  239. package/dist/internal/sharing/sharingAccess.js +8 -4
  240. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  241. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  242. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  243. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  244. package/dist/internal/sharing/sharingManagement.js +5 -7
  245. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  246. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  247. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  248. package/dist/internal/uids.js.map +1 -1
  249. package/dist/internal/upload/apiService.d.ts +3 -3
  250. package/dist/internal/upload/apiService.js +1 -1
  251. package/dist/internal/upload/apiService.js.map +1 -1
  252. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  253. package/dist/internal/upload/blockVerifier.js +1 -1
  254. package/dist/internal/upload/blockVerifier.js.map +1 -1
  255. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  256. package/dist/internal/upload/cryptoService.d.ts +4 -4
  257. package/dist/internal/upload/cryptoService.js +4 -4
  258. package/dist/internal/upload/cryptoService.js.map +1 -1
  259. package/dist/internal/upload/digests.js.map +1 -1
  260. package/dist/internal/upload/fileUploader.d.ts +6 -6
  261. package/dist/internal/upload/fileUploader.js.map +1 -1
  262. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  263. package/dist/internal/upload/index.d.ts +5 -5
  264. package/dist/internal/upload/index.js.map +1 -1
  265. package/dist/internal/upload/interface.d.ts +4 -3
  266. package/dist/internal/upload/manager.d.ts +5 -5
  267. package/dist/internal/upload/manager.js +15 -9
  268. package/dist/internal/upload/manager.js.map +1 -1
  269. package/dist/internal/upload/manager.test.js +139 -128
  270. package/dist/internal/upload/manager.test.js.map +1 -1
  271. package/dist/internal/upload/streamUploader.d.ts +6 -6
  272. package/dist/internal/upload/streamUploader.js +9 -7
  273. package/dist/internal/upload/streamUploader.js.map +1 -1
  274. package/dist/internal/upload/streamUploader.test.js +17 -12
  275. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  276. package/dist/internal/upload/telemetry.d.ts +3 -3
  277. package/dist/internal/upload/telemetry.js +5 -3
  278. package/dist/internal/upload/telemetry.js.map +1 -1
  279. package/dist/internal/upload/telemetry.test.js +8 -8
  280. package/dist/internal/upload/telemetry.test.js.map +1 -1
  281. package/dist/protonDriveClient.d.ts +8 -8
  282. package/dist/protonDriveClient.js +12 -9
  283. package/dist/protonDriveClient.js.map +1 -1
  284. package/dist/protonDrivePhotosClient.js.map +1 -1
  285. package/dist/telemetry.js +18 -15
  286. package/dist/telemetry.js.map +1 -1
  287. package/dist/tests/logger.js.map +1 -1
  288. package/dist/tests/telemetry.d.ts +1 -1
  289. package/dist/transformers.d.ts +1 -1
  290. package/dist/transformers.js +5 -2
  291. package/dist/transformers.js.map +1 -1
  292. package/package.json +1 -1
  293. package/src/cache/interface.ts +22 -22
  294. package/src/cache/memoryCache.test.ts +7 -7
  295. package/src/cache/memoryCache.ts +4 -4
  296. package/src/cache/nullCache.ts +1 -1
  297. package/src/config.ts +5 -5
  298. package/src/crypto/driveCrypto.test.ts +15 -15
  299. package/src/crypto/driveCrypto.ts +120 -156
  300. package/src/crypto/hmac.ts +1 -1
  301. package/src/crypto/interface.ts +63 -72
  302. package/src/crypto/openPGPCrypto.ts +74 -94
  303. package/src/crypto/utils.ts +1 -1
  304. package/src/diagnostic/eventsGenerator.ts +2 -2
  305. package/src/diagnostic/httpClient.ts +6 -2
  306. package/src/diagnostic/index.ts +12 -10
  307. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  308. package/src/diagnostic/interface.ts +81 -81
  309. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  310. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  311. package/src/diagnostic/telemetry.ts +4 -1
  312. package/src/diagnostic/zipGenerators.test.ts +1 -1
  313. package/src/diagnostic/zipGenerators.ts +3 -3
  314. package/src/errors.ts +21 -21
  315. package/src/index.ts +3 -3
  316. package/src/interface/account.ts +10 -10
  317. package/src/interface/author.ts +6 -6
  318. package/src/interface/config.ts +4 -4
  319. package/src/interface/devices.ts +6 -6
  320. package/src/interface/download.ts +12 -9
  321. package/src/interface/events.ts +45 -39
  322. package/src/interface/httpClient.ts +11 -11
  323. package/src/interface/index.ts +76 -19
  324. package/src/interface/nodes.ts +47 -49
  325. package/src/interface/result.ts +1 -3
  326. package/src/interface/sharing.ts +60 -57
  327. package/src/interface/telemetry.ts +74 -74
  328. package/src/interface/thumbnail.ts +5 -6
  329. package/src/interface/upload.ts +20 -12
  330. package/src/internal/apiService/apiService.test.ts +109 -76
  331. package/src/internal/apiService/apiService.ts +40 -26
  332. package/src/internal/apiService/coreTypes.ts +2474 -2463
  333. package/src/internal/apiService/driveTypes.ts +1868 -1822
  334. package/src/internal/apiService/errorCodes.ts +4 -4
  335. package/src/internal/apiService/errors.test.ts +25 -23
  336. package/src/internal/apiService/errors.ts +15 -9
  337. package/src/internal/apiService/index.ts +1 -1
  338. package/src/internal/apiService/transformers.ts +2 -2
  339. package/src/internal/asyncIteratorMap.test.ts +4 -4
  340. package/src/internal/asyncIteratorMap.ts +1 -1
  341. package/src/internal/asyncIteratorRace.test.ts +149 -0
  342. package/src/internal/asyncIteratorRace.ts +79 -0
  343. package/src/internal/batch.test.ts +50 -0
  344. package/src/internal/batch.ts +9 -0
  345. package/src/internal/batchLoading.test.ts +13 -14
  346. package/src/internal/batchLoading.ts +8 -8
  347. package/src/internal/devices/apiService.ts +58 -51
  348. package/src/internal/devices/cryptoService.ts +22 -17
  349. package/src/internal/devices/index.ts +17 -10
  350. package/src/internal/devices/interface.ts +21 -12
  351. package/src/internal/devices/manager.test.ts +40 -9
  352. package/src/internal/devices/manager.ts +3 -3
  353. package/src/internal/download/apiService.ts +66 -49
  354. package/src/internal/download/cryptoService.ts +34 -18
  355. package/src/internal/download/fileDownloader.test.ts +25 -9
  356. package/src/internal/download/fileDownloader.ts +36 -18
  357. package/src/internal/download/index.ts +19 -19
  358. package/src/internal/download/interface.ts +19 -20
  359. package/src/internal/download/queue.ts +3 -3
  360. package/src/internal/download/telemetry.test.ts +11 -11
  361. package/src/internal/download/telemetry.ts +24 -14
  362. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  363. package/src/internal/download/thumbnailDownloader.ts +43 -32
  364. package/src/internal/errors.ts +7 -5
  365. package/src/internal/events/apiService.ts +30 -17
  366. package/src/internal/events/coreEventManager.test.ts +18 -18
  367. package/src/internal/events/coreEventManager.ts +9 -6
  368. package/src/internal/events/eventManager.test.ts +108 -82
  369. package/src/internal/events/eventManager.ts +16 -5
  370. package/src/internal/events/index.ts +75 -47
  371. package/src/internal/events/interface.ts +47 -39
  372. package/src/internal/events/volumeEventManager.test.ts +61 -65
  373. package/src/internal/events/volumeEventManager.ts +18 -9
  374. package/src/internal/nodes/apiService.test.ts +197 -147
  375. package/src/internal/nodes/apiService.ts +288 -174
  376. package/src/internal/nodes/cache.test.ts +48 -20
  377. package/src/internal/nodes/cache.ts +60 -44
  378. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  379. package/src/internal/nodes/cryptoCache.ts +10 -5
  380. package/src/internal/nodes/cryptoService.test.ts +492 -351
  381. package/src/internal/nodes/cryptoService.ts +170 -88
  382. package/src/internal/nodes/events.test.ts +38 -28
  383. package/src/internal/nodes/events.ts +13 -12
  384. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  385. package/src/internal/nodes/extendedAttributes.ts +20 -15
  386. package/src/internal/nodes/index.test.ts +133 -0
  387. package/src/internal/nodes/index.ts +27 -15
  388. package/src/internal/nodes/interface.ts +42 -29
  389. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  390. package/src/internal/nodes/nodesAccess.ts +73 -49
  391. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  392. package/src/internal/nodes/nodesManagement.ts +39 -32
  393. package/src/internal/nodes/nodesRevisions.ts +7 -7
  394. package/src/internal/nodes/validations.ts +2 -2
  395. package/src/internal/photos/albums.ts +5 -5
  396. package/src/internal/photos/apiService.ts +4 -7
  397. package/src/internal/photos/cache.ts +1 -1
  398. package/src/internal/photos/index.ts +8 -8
  399. package/src/internal/photos/interface.ts +2 -2
  400. package/src/internal/photos/photosTimeline.ts +4 -5
  401. package/src/internal/sdkEvents.test.ts +10 -10
  402. package/src/internal/sdkEvents.ts +5 -13
  403. package/src/internal/shares/apiService.ts +44 -33
  404. package/src/internal/shares/cache.test.ts +6 -4
  405. package/src/internal/shares/cache.ts +21 -12
  406. package/src/internal/shares/cryptoCache.test.ts +17 -11
  407. package/src/internal/shares/cryptoCache.ts +4 -4
  408. package/src/internal/shares/cryptoService.test.ts +72 -74
  409. package/src/internal/shares/cryptoService.ts +48 -23
  410. package/src/internal/shares/index.ts +23 -11
  411. package/src/internal/shares/interface.ts +8 -8
  412. package/src/internal/shares/manager.test.ts +88 -80
  413. package/src/internal/shares/manager.ts +19 -19
  414. package/src/internal/sharing/apiService.ts +282 -175
  415. package/src/internal/sharing/cache.test.ts +35 -35
  416. package/src/internal/sharing/cache.ts +11 -2
  417. package/src/internal/sharing/cryptoService.test.ts +58 -46
  418. package/src/internal/sharing/cryptoService.ts +121 -84
  419. package/src/internal/sharing/events.test.ts +113 -102
  420. package/src/internal/sharing/events.ts +42 -24
  421. package/src/internal/sharing/index.ts +22 -11
  422. package/src/internal/sharing/interface.ts +40 -40
  423. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  424. package/src/internal/sharing/sharingAccess.ts +39 -21
  425. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  426. package/src/internal/sharing/sharingManagement.ts +138 -65
  427. package/src/internal/uids.ts +1 -1
  428. package/src/internal/upload/apiService.ts +167 -117
  429. package/src/internal/upload/blockVerifier.ts +8 -6
  430. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  431. package/src/internal/upload/cryptoService.ts +42 -36
  432. package/src/internal/upload/digests.ts +2 -2
  433. package/src/internal/upload/fileUploader.test.ts +15 -3
  434. package/src/internal/upload/fileUploader.ts +39 -17
  435. package/src/internal/upload/index.ts +13 -14
  436. package/src/internal/upload/interface.ts +79 -78
  437. package/src/internal/upload/manager.test.ts +170 -156
  438. package/src/internal/upload/manager.ts +66 -39
  439. package/src/internal/upload/queue.ts +3 -3
  440. package/src/internal/upload/streamUploader.test.ts +40 -26
  441. package/src/internal/upload/streamUploader.ts +87 -69
  442. package/src/internal/upload/telemetry.test.ts +11 -11
  443. package/src/internal/upload/telemetry.ts +25 -15
  444. package/src/internal/wait.test.ts +1 -1
  445. package/src/internal/wait.ts +3 -3
  446. package/src/protonDriveClient.ts +121 -39
  447. package/src/protonDrivePhotosClient.ts +16 -10
  448. package/src/telemetry.ts +60 -52
  449. package/src/tests/logger.ts +1 -1
  450. package/src/tests/telemetry.ts +2 -2
  451. package/src/transformers.ts +29 -21
  452. package/src/version.ts +0 -1
@@ -1,12 +1,42 @@
1
1
  import bcrypt from 'bcryptjs';
2
2
  import { c } from 'ttag';
3
3
 
4
- import { DriveCrypto, PrivateKey, SessionKey, SRPVerifier, uint8ArrayToBase64String, VERIFICATION_STATUS } from '../../crypto';
5
- import { ProtonDriveAccount, ProtonInvitation, ProtonInvitationWithNode, NonProtonInvitation, Author, Result, Member, UnverifiedAuthorError, resultError, resultOk, InvalidNameError, ProtonDriveTelemetry, MetricVolumeType } from "../../interface";
4
+ import {
5
+ DriveCrypto,
6
+ PrivateKey,
7
+ SessionKey,
8
+ SRPVerifier,
9
+ uint8ArrayToBase64String,
10
+ VERIFICATION_STATUS,
11
+ } from '../../crypto';
12
+ import {
13
+ ProtonDriveAccount,
14
+ ProtonInvitation,
15
+ ProtonInvitationWithNode,
16
+ NonProtonInvitation,
17
+ Author,
18
+ Result,
19
+ Member,
20
+ UnverifiedAuthorError,
21
+ resultError,
22
+ resultOk,
23
+ InvalidNameError,
24
+ ProtonDriveTelemetry,
25
+ MetricVolumeType,
26
+ } from '../../interface';
6
27
  import { validateNodeName } from '../nodes/validations';
7
- import { getErrorMessage, getVerificationMessage } from "../errors";
8
- import { EncryptedShare } from "../shares";
9
- import { EncryptedInvitation, EncryptedInvitationWithNode, EncryptedExternalInvitation, EncryptedMember, EncryptedPublicLink, PublicLinkWithCreatorEmail, EncryptedBookmark, SharesService } from "./interface";
28
+ import { getErrorMessage, getVerificationMessage } from '../errors';
29
+ import { EncryptedShare } from '../shares';
30
+ import {
31
+ EncryptedInvitation,
32
+ EncryptedInvitationWithNode,
33
+ EncryptedExternalInvitation,
34
+ EncryptedMember,
35
+ EncryptedPublicLink,
36
+ PublicLinkWithCreatorEmail,
37
+ EncryptedBookmark,
38
+ SharesService,
39
+ } from './interface';
10
40
 
11
41
  // Version 2 of bcrypt with 2**10 rounds.
12
42
  // https://en.wikipedia.org/wiki/Bcrypt#Description
@@ -26,7 +56,7 @@ enum PublicLinkFlags {
26
56
 
27
57
  /**
28
58
  * Provides crypto operations for sharing.
29
- *
59
+ *
30
60
  * The sharing crypto service is responsible for encrypting and decrypting
31
61
  * shares, invitations, etc.
32
62
  */
@@ -45,31 +75,31 @@ export class SharingCryptoService {
45
75
 
46
76
  /**
47
77
  * Generates a share key for a standard share used for sharing with other users.
48
- *
78
+ *
49
79
  * Standard share, in contrast to a root share, is encrypted with node key and
50
80
  * can be managed by any admin.
51
81
  */
52
82
  async generateShareKeys(
53
83
  nodeKeys: {
54
- key: PrivateKey
55
- passphraseSessionKey: SessionKey,
56
- nameSessionKey: SessionKey,
84
+ key: PrivateKey;
85
+ passphraseSessionKey: SessionKey;
86
+ nameSessionKey: SessionKey;
57
87
  },
58
88
  addressKey: PrivateKey,
59
89
  ): Promise<{
60
90
  shareKey: {
61
91
  encrypted: {
62
- armoredKey: string,
63
- armoredPassphrase: string,
64
- armoredPassphraseSignature: string,
65
- },
92
+ armoredKey: string;
93
+ armoredPassphrase: string;
94
+ armoredPassphraseSignature: string;
95
+ };
66
96
  decrypted: {
67
- key: PrivateKey,
68
- passphraseSessionKey: SessionKey,
69
- },
70
- },
71
- base64PpassphraseKeyPacket: string,
72
- base64NameKeyPacket: string,
97
+ key: PrivateKey;
98
+ passphraseSessionKey: SessionKey;
99
+ };
100
+ };
101
+ base64PpassphraseKeyPacket: string;
102
+ base64NameKeyPacket: string;
73
103
  }> {
74
104
  const shareKey = await this.driveCrypto.generateKey([nodeKeys.key, addressKey], addressKey);
75
105
 
@@ -87,21 +117,24 @@ export class SharingCryptoService {
87
117
  base64PpassphraseKeyPacket,
88
118
  base64NameKeyPacket,
89
119
  };
90
- };
120
+ }
91
121
 
92
122
  /**
93
123
  * Decrypts a share using the node key.
94
- *
124
+ *
95
125
  * The share is encrypted with the node key and can be managed by any admin.
96
126
  *
97
127
  * Old shares are encrypted with address key only and thus available only
98
128
  * to owners. `decryptShare` automatically tries to decrypt the share with
99
129
  * address keys as fallback if available.
100
130
  */
101
- async decryptShare(share: EncryptedShare, nodeKey: PrivateKey): Promise<{
102
- author: Author,
103
- key: PrivateKey,
104
- passphraseSessionKey: SessionKey,
131
+ async decryptShare(
132
+ share: EncryptedShare,
133
+ nodeKey: PrivateKey,
134
+ ): Promise<{
135
+ author: Author;
136
+ key: PrivateKey;
137
+ passphraseSessionKey: SessionKey;
105
138
  }> {
106
139
  // All standard shares should be encrypted with node key.
107
140
  // Using node key is essential so any admin can manage the share.
@@ -121,25 +154,26 @@ export class SharingCryptoService {
121
154
  share.encryptedCrypto.armoredPassphraseSignature,
122
155
  decryptionKeys,
123
156
  addressPublicKeys,
124
- )
157
+ );
125
158
 
126
- const author: Result<string, UnverifiedAuthorError> = verified === VERIFICATION_STATUS.SIGNED_AND_VALID
127
- ? resultOk(share.creatorEmail)
128
- : resultError({
129
- claimedAuthor: share.creatorEmail,
130
- error: getVerificationMessage(verified),
131
- });
159
+ const author: Result<string, UnverifiedAuthorError> =
160
+ verified === VERIFICATION_STATUS.SIGNED_AND_VALID
161
+ ? resultOk(share.creatorEmail)
162
+ : resultError({
163
+ claimedAuthor: share.creatorEmail,
164
+ error: getVerificationMessage(verified),
165
+ });
132
166
 
133
167
  return {
134
168
  author,
135
169
  key,
136
170
  passphraseSessionKey,
137
- }
171
+ };
138
172
  }
139
173
 
140
174
  /**
141
175
  * Encrypts an invitation for sharing a node with another user.
142
- *
176
+ *
143
177
  * `inviteeEmail` is used to load public key of the invitee and used to
144
178
  * encrypt share's session key. `inviterKey` is used to sign the invitation.
145
179
  */
@@ -148,18 +182,20 @@ export class SharingCryptoService {
148
182
  inviterKey: PrivateKey,
149
183
  inviteeEmail: string,
150
184
  ): Promise<{
151
- base64KeyPacket: string,
152
- base64KeyPacketSignature: string,
185
+ base64KeyPacket: string;
186
+ base64KeyPacketSignature: string;
153
187
  }> {
154
188
  const inviteePublicKeys = await this.account.getPublicKeys(inviteeEmail);
155
- const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey)
189
+ const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey);
156
190
  return result;
157
- };
191
+ }
158
192
 
159
193
  /**
160
194
  * Decrypts and verifies an invitation and node's name.
161
195
  */
162
- async decryptInvitationWithNode(encryptedInvitation: EncryptedInvitationWithNode): Promise<ProtonInvitationWithNode> {
196
+ async decryptInvitationWithNode(
197
+ encryptedInvitation: EncryptedInvitationWithNode,
198
+ ): Promise<ProtonInvitationWithNode> {
163
199
  const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
164
200
  const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
165
201
 
@@ -171,11 +207,7 @@ export class SharingCryptoService {
171
207
 
172
208
  let nodeName: Result<string, Error>;
173
209
  try {
174
- const result = await this.driveCrypto.decryptNodeName(
175
- encryptedInvitation.node.encryptedName,
176
- shareKey,
177
- [],
178
- );
210
+ const result = await this.driveCrypto.decryptNodeName(encryptedInvitation.node.encryptedName, shareKey, []);
179
211
  nodeName = resultOk(result.name);
180
212
  } catch (error: unknown) {
181
213
  const message = getErrorMessage(error);
@@ -184,13 +216,14 @@ export class SharingCryptoService {
184
216
  }
185
217
 
186
218
  return {
187
- ...await this.decryptInvitation(encryptedInvitation),
219
+ ...(await this.decryptInvitation(encryptedInvitation)),
188
220
  node: {
221
+ uid: encryptedInvitation.node.uid,
189
222
  name: nodeName,
190
223
  type: encryptedInvitation.node.type,
191
224
  mediaType: encryptedInvitation.node.mediaType,
192
225
  },
193
- }
226
+ };
194
227
  }
195
228
 
196
229
  /**
@@ -213,22 +246,19 @@ export class SharingCryptoService {
213
246
  * Accepts an invitation by signing the session key by invitee.
214
247
  */
215
248
  async acceptInvitation(encryptedInvitation: EncryptedInvitationWithNode): Promise<{
216
- base64SessionKeySignature: string,
249
+ base64SessionKeySignature: string;
217
250
  }> {
218
251
  const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
219
252
  const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
220
- const result = await this.driveCrypto.acceptInvitation(
221
- encryptedInvitation.base64KeyPacket,
222
- inviteeKey,
223
- );
253
+ const result = await this.driveCrypto.acceptInvitation(encryptedInvitation.base64KeyPacket, inviteeKey);
224
254
  return result;
225
255
  }
226
256
 
227
257
  /**
228
258
  * Encrypts an external invitation for sharing a node with another user.
229
- *
259
+ *
230
260
  * `inviteeEmail` is used to sign the invitation with `inviterKey`.
231
- *
261
+ *
232
262
  * External invitations are used to share nodes with users who are not
233
263
  * registered with Proton Drive. The external invitation then requires
234
264
  * the invitee to sign up to create key. Then it can be followed by
@@ -239,7 +269,7 @@ export class SharingCryptoService {
239
269
  inviterKey: PrivateKey,
240
270
  inviteeEmail: string,
241
271
  ): Promise<{
242
- base64ExternalInvitationSignature: string,
272
+ base64ExternalInvitationSignature: string;
243
273
  }> {
244
274
  const result = await this.driveCrypto.encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail);
245
275
  return result;
@@ -278,19 +308,30 @@ export class SharingCryptoService {
278
308
  };
279
309
  }
280
310
 
281
- async encryptPublicLink(creatorEmail: string, shareSessionKey: SessionKey, password: string): Promise<{
311
+ async encryptPublicLink(
312
+ creatorEmail: string,
313
+ shareSessionKey: SessionKey,
314
+ password: string,
315
+ ): Promise<{
282
316
  crypto: {
283
- base64SharePasswordSalt: string,
284
- base64SharePassphraseKeyPacket: string,
285
- armoredPassword: string,
286
- },
287
- srp: SRPVerifier,
317
+ base64SharePasswordSalt: string;
318
+ base64SharePassphraseKeyPacket: string;
319
+ armoredPassword: string;
320
+ };
321
+ srp: SRPVerifier;
288
322
  }> {
289
323
  const address = await this.account.getOwnAddress(creatorEmail);
290
324
  const addressKey = address.keys[address.primaryKeyIndex].key;
291
325
 
292
- const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } = await this.computeKeySaltAndPassphrase(password);
293
- const { base64SharePassphraseKeyPacket, armoredPassword, srp } = await this.driveCrypto.encryptPublicLinkPasswordAndSessionKey(password, addressKey, bcryptPassphrase, shareSessionKey);
326
+ const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } =
327
+ await this.computeKeySaltAndPassphrase(password);
328
+ const { base64SharePassphraseKeyPacket, armoredPassword, srp } =
329
+ await this.driveCrypto.encryptPublicLinkPasswordAndSessionKey(
330
+ password,
331
+ addressKey,
332
+ bcryptPassphrase,
333
+ shareSessionKey,
334
+ );
294
335
 
295
336
  return {
296
337
  crypto: {
@@ -299,7 +340,7 @@ export class SharingCryptoService {
299
340
  armoredPassword,
300
341
  },
301
342
  srp,
302
- }
343
+ };
303
344
  }
304
345
 
305
346
  async generatePublicLinkPassword(): Promise<string> {
@@ -327,17 +368,14 @@ export class SharingCryptoService {
327
368
  return {
328
369
  base64Salt: uint8ArrayToBase64String(salt),
329
370
  bcryptPassphrase,
330
- }
331
- };
371
+ };
372
+ }
332
373
 
333
374
  async decryptPublicLink(encryptedPublicLink: EncryptedPublicLink): Promise<PublicLinkWithCreatorEmail> {
334
375
  const address = await this.account.getOwnAddress(encryptedPublicLink.creatorEmail);
335
376
  const addressKeys = address.keys.map(({ key }) => key);
336
377
 
337
- const { password, customPassword } = await this.decryptShareUrlPassword(
338
- encryptedPublicLink,
339
- addressKeys,
340
- );
378
+ const { password, customPassword } = await this.decryptShareUrlPassword(encryptedPublicLink, addressKeys);
341
379
 
342
380
  return {
343
381
  uid: encryptedPublicLink.uid,
@@ -347,16 +385,16 @@ export class SharingCryptoService {
347
385
  url: `${encryptedPublicLink.publicUrl}#${password}`,
348
386
  customPassword,
349
387
  creatorEmail: encryptedPublicLink.creatorEmail,
350
- numberOfInitializedDownloads: encryptedPublicLink.numberOfInitializedDownloads
351
- }
388
+ numberOfInitializedDownloads: encryptedPublicLink.numberOfInitializedDownloads,
389
+ };
352
390
  }
353
391
 
354
392
  private async decryptShareUrlPassword(
355
393
  encryptedPublicLink: Pick<EncryptedPublicLink, 'armoredUrlPassword' | 'flags'>,
356
394
  addressKeys: PrivateKey[],
357
395
  ): Promise<{
358
- password: string,
359
- customPassword?: string,
396
+ password: string;
397
+ customPassword?: string;
360
398
  }> {
361
399
  const password = await this.driveCrypto.decryptShareUrlPassword(
362
400
  encryptedPublicLink.armoredUrlPassword,
@@ -370,21 +408,21 @@ export class SharingCryptoService {
370
408
  case PublicLinkFlags.CustomPassword:
371
409
  return {
372
410
  password,
373
- }
411
+ };
374
412
  case PublicLinkFlags.GeneratedPasswordIncluded:
375
413
  case PublicLinkFlags.GeneratedPasswordWithCustomPassword:
376
414
  return {
377
415
  password: password.substring(0, PUBLIC_LINK_GENERATED_PASSWORD_LENGTH),
378
416
  customPassword: password.substring(PUBLIC_LINK_GENERATED_PASSWORD_LENGTH) || undefined,
379
- }
417
+ };
380
418
  default:
381
419
  throw new Error(`Unsupported public link with flags: ${encryptedPublicLink.flags}`);
382
420
  }
383
421
  }
384
422
 
385
423
  async decryptBookmark(encryptedBookmark: EncryptedBookmark): Promise<{
386
- url: Result<string, Error>,
387
- nodeName: Result<string, Error | InvalidNameError>,
424
+ url: Result<string, Error>;
425
+ nodeName: Result<string, Error | InvalidNameError>;
388
426
  }> {
389
427
  // TODO: Signatures are not checked and not specified in the interface.
390
428
  // In the future, we will need to add authorship verification.
@@ -478,14 +516,13 @@ export class SharingCryptoService {
478
516
  }
479
517
  }
480
518
 
481
- private async decryptBookmarkName(encryptedBookmark: EncryptedBookmark, shareKey: PrivateKey): Promise<Result<string, Error | InvalidNameError>> {
519
+ private async decryptBookmarkName(
520
+ encryptedBookmark: EncryptedBookmark,
521
+ shareKey: PrivateKey,
522
+ ): Promise<Result<string, Error | InvalidNameError>> {
482
523
  try {
483
524
  // Use the share key to decrypt the node name of the bookmark.
484
- const { name } = await this.driveCrypto.decryptNodeName(
485
- encryptedBookmark.node.encryptedName,
486
- shareKey,
487
- [],
488
- );
525
+ const { name } = await this.driveCrypto.decryptNodeName(encryptedBookmark.node.encryptedName, shareKey, []);
489
526
 
490
527
  try {
491
528
  validateNodeName(name);
@@ -1,13 +1,13 @@
1
- import { getMockLogger } from "../../tests/logger";
2
- import { DriveEvent, DriveEventType } from "../events";
3
- import { SharingCache } from "./cache";
4
- import { SharingAccess } from "./sharingAccess";
5
- import { SharingEventHandler } from "./events";
6
- import { SharesManager } from "../shares/manager";
1
+ import { getMockLogger } from '../../tests/logger';
2
+ import { DriveEvent, DriveEventType } from '../events';
3
+ import { SharingCache } from './cache';
4
+ import { SharingAccess } from './sharingAccess';
5
+ import { SharingEventHandler } from './events';
6
+ import { SharesManager } from '../shares/manager';
7
7
 
8
8
  // FIXME: test tree_refresh and tree_remove
9
9
 
10
- describe("handleSharedByMeNodes", () => {
10
+ describe('handleSharedByMeNodes', () => {
11
11
  let cache: SharingCache;
12
12
  let sharingEventHandler: SharingEventHandler;
13
13
  let sharesManager: SharesManager;
@@ -20,7 +20,8 @@ describe("handleSharedByMeNodes", () => {
20
20
  addSharedByMeNodeUid: jest.fn(),
21
21
  removeSharedByMeNodeUid: jest.fn(),
22
22
  setSharedWithMeNodeUids: jest.fn(),
23
- getSharedByMeNodeUids: jest.fn().mockResolvedValue(["cachedNodeUid"]),
23
+ getSharedByMeNodeUids: jest.fn().mockResolvedValue(['cachedNodeUid']),
24
+ hasSharedByMeNodeUidsLoaded: jest.fn().mockResolvedValue(true),
24
25
  };
25
26
  sharesManager = {
26
27
  isOwnVolume: jest.fn(async (volumeId: string) => volumeId === 'MyVolume1'),
@@ -28,102 +29,112 @@ describe("handleSharedByMeNodes", () => {
28
29
  sharingEventHandler = new SharingEventHandler(getMockLogger(), cache, sharesManager);
29
30
  });
30
31
 
31
- describe("node events trigger cache update", () => {
32
-
33
- it("should add if new own shared node is created", async () => {
34
- const event: DriveEvent = {
35
- eventId: "1",
36
- type: DriveEventType.NodeCreated,
37
- nodeUid: "newNodeUid",
38
- parentNodeUid: "parentUid",
39
- isTrashed: false,
40
- isShared: true,
41
- treeEventScopeId: "MyVolume1",
42
- };
43
- await sharingEventHandler.handleDriveEvent(event);
44
- expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith("newNodeUid");
45
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
46
-
47
- });
48
-
49
- // FIXME enable when volume ownership is handled
50
- test.skip("should not add if new shared node is not own", async () => {
51
- const event: DriveEvent = {
52
- eventId: "1",
53
- type: DriveEventType.NodeCreated,
54
- nodeUid: "newNodeUid",
55
- parentNodeUid: "parentUid",
56
- isTrashed: false,
57
- isShared: true,
58
- treeEventScopeId: "NotOwnVolume",
59
- };
60
- await sharingEventHandler.handleDriveEvent(event);
61
- expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
62
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
63
-
64
- });
65
-
66
- it("should not add if new own node is not shared", async () => {
67
- const event: DriveEvent = {
68
- type: DriveEventType.NodeCreated,
69
- nodeUid: "newNodeUid",
70
- parentNodeUid: "parentUid",
71
- isTrashed: false,
72
- isShared: false,
73
- eventId: "1",
74
- treeEventScopeId: "MyVolume1",
75
- };
76
- await sharingEventHandler.handleDriveEvent(event);
77
- expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
78
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
79
- });
80
-
81
- it("should add if own node is updated and shared", async () => {
82
- const event: DriveEvent = {
83
- type: DriveEventType.NodeUpdated,
84
- nodeUid: "cachedNodeUid",
85
- parentNodeUid: "parentUid",
86
- isTrashed: false,
87
- isShared: true,
88
- eventId: "1",
89
- treeEventScopeId: "MyVolume1",
90
- };
91
- await sharingEventHandler.handleDriveEvent(event);
92
- expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith("cachedNodeUid");
93
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
94
- });
95
-
96
- it("should remove if shared node is un-shared", async () => {
97
- const event: DriveEvent = {
98
- type: DriveEventType.NodeUpdated,
99
- nodeUid: "cachedNodeUid",
100
- parentNodeUid: "parentUid",
101
- isTrashed: false,
102
- isShared: false,
103
- eventId: "1",
104
- treeEventScopeId: "MyVolume1",
105
- };
106
- await sharingEventHandler.handleDriveEvent(event);
107
- expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith("cachedNodeUid");
108
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
109
- });
110
-
111
- it("should remove if shared node is deleted", async () => {
112
- const event: DriveEvent = {
113
- type: DriveEventType.NodeDeleted,
114
- nodeUid: "cachedNodeUid",
115
- parentNodeUid: "parentUid",
116
- eventId: "1",
117
- treeEventScopeId: "MyVolume1",
118
- };
119
- await sharingEventHandler.handleDriveEvent(event);
120
- expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith("cachedNodeUid");
121
- expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
122
- });
32
+ it('should add if new own shared node is created', async () => {
33
+ const event: DriveEvent = {
34
+ eventId: '1',
35
+ type: DriveEventType.NodeCreated,
36
+ nodeUid: 'newNodeUid',
37
+ parentNodeUid: 'parentUid',
38
+ isTrashed: false,
39
+ isShared: true,
40
+ treeEventScopeId: 'MyVolume1',
41
+ };
42
+ await sharingEventHandler.handleDriveEvent(event);
43
+ expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith('newNodeUid');
44
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
45
+ });
46
+
47
+ test('should not add if new shared node is not own', async () => {
48
+ const event: DriveEvent = {
49
+ eventId: '1',
50
+ type: DriveEventType.NodeCreated,
51
+ nodeUid: 'newNodeUid',
52
+ parentNodeUid: 'parentUid',
53
+ isTrashed: false,
54
+ isShared: true,
55
+ treeEventScopeId: 'NotOwnVolume',
56
+ };
57
+ await sharingEventHandler.handleDriveEvent(event);
58
+ expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
59
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
60
+ });
61
+
62
+ it('should not add if new own node is not shared', async () => {
63
+ const event: DriveEvent = {
64
+ type: DriveEventType.NodeCreated,
65
+ nodeUid: 'newNodeUid',
66
+ parentNodeUid: 'parentUid',
67
+ isTrashed: false,
68
+ isShared: false,
69
+ eventId: '1',
70
+ treeEventScopeId: 'MyVolume1',
71
+ };
72
+ await sharingEventHandler.handleDriveEvent(event);
73
+ expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
74
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
75
+ });
76
+
77
+ it('should add if own node is updated and shared', async () => {
78
+ const event: DriveEvent = {
79
+ type: DriveEventType.NodeUpdated,
80
+ nodeUid: 'cachedNodeUid',
81
+ parentNodeUid: 'parentUid',
82
+ isTrashed: false,
83
+ isShared: true,
84
+ eventId: '1',
85
+ treeEventScopeId: 'MyVolume1',
86
+ };
87
+ await sharingEventHandler.handleDriveEvent(event);
88
+ expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
89
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
90
+ });
91
+
92
+ it('should remove if shared node is un-shared', async () => {
93
+ const event: DriveEvent = {
94
+ type: DriveEventType.NodeUpdated,
95
+ nodeUid: 'cachedNodeUid',
96
+ parentNodeUid: 'parentUid',
97
+ isTrashed: false,
98
+ isShared: false,
99
+ eventId: '1',
100
+ treeEventScopeId: 'MyVolume1',
101
+ };
102
+ await sharingEventHandler.handleDriveEvent(event);
103
+ expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
104
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
105
+ });
106
+
107
+ it('should remove if shared node is deleted', async () => {
108
+ const event: DriveEvent = {
109
+ type: DriveEventType.NodeDeleted,
110
+ nodeUid: 'cachedNodeUid',
111
+ parentNodeUid: 'parentUid',
112
+ eventId: '1',
113
+ treeEventScopeId: 'MyVolume1',
114
+ };
115
+ await sharingEventHandler.handleDriveEvent(event);
116
+ expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
117
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
118
+ });
119
+
120
+ it('should not update cache if shared by me is not loaded', async () => {
121
+ cache.hasSharedByMeNodeUidsLoaded = jest.fn().mockResolvedValue(false);
122
+ const event: DriveEvent = {
123
+ eventId: '1',
124
+ type: DriveEventType.NodeCreated,
125
+ nodeUid: 'newNodeUid',
126
+ parentNodeUid: 'parentUid',
127
+ isTrashed: false,
128
+ isShared: true,
129
+ treeEventScopeId: 'MyVolume1',
130
+ };
131
+ await sharingEventHandler.handleDriveEvent(event);
132
+ expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
133
+ expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
123
134
  });
124
135
  });
125
136
 
126
- describe("handleSharedWithMeNodes", () => {
137
+ describe('handleSharedWithMeNodes', () => {
127
138
  let cache: SharingCache;
128
139
  let sharingAccess: SharingAccess;
129
140
  let sharesManager: SharesManager;
@@ -145,7 +156,7 @@ describe("handleSharedWithMeNodes", () => {
145
156
  } as any;
146
157
  });
147
158
 
148
- it("should only update cache", async () => {
159
+ it('should update cache', async () => {
149
160
  const event: DriveEvent = {
150
161
  type: DriveEventType.SharedWithMeUpdated,
151
162
  eventId: 'event1',