@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
@@ -3,30 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const logger_1 = require("../../tests/logger");
4
4
  const interface_1 = require("../../interface");
5
5
  const sharingManagement_1 = require("./sharingManagement");
6
- describe("SharingManagement", () => {
6
+ describe('SharingManagement', () => {
7
7
  let apiService;
8
8
  let cryptoService;
9
9
  let accountService;
10
10
  let sharesService;
11
11
  let nodesService;
12
- let nodesEvents;
13
12
  let sharingManagement;
14
13
  beforeEach(() => {
15
14
  // @ts-expect-error No need to implement all methods for mocking
16
15
  apiService = {
17
- createStandardShare: jest.fn().mockReturnValue("newShareId"),
16
+ createStandardShare: jest.fn().mockReturnValue('newShareId'),
18
17
  getShareInvitations: jest.fn().mockResolvedValue([]),
19
18
  getShareExternalInvitations: jest.fn().mockResolvedValue([]),
20
19
  getShareMembers: jest.fn().mockResolvedValue([]),
21
20
  inviteProtonUser: jest.fn().mockImplementation((_, invitation) => ({
22
21
  ...invitation,
23
- uid: "created-invitation",
22
+ uid: 'created-invitation',
24
23
  })),
25
24
  updateInvitation: jest.fn(),
26
25
  deleteInvitation: jest.fn(),
27
26
  inviteExternalUser: jest.fn().mockImplementation((_, invitation) => ({
28
27
  ...invitation,
29
- uid: "created-external-invitation",
28
+ uid: 'created-external-invitation',
30
29
  state: interface_1.NonProtonInvitationState.Pending,
31
30
  })),
32
31
  updateExternalInvitation: jest.fn(),
@@ -39,14 +38,18 @@ describe("SharingManagement", () => {
39
38
  resendInvitationEmail: jest.fn(),
40
39
  resendExternalInvitationEmail: jest.fn(),
41
40
  createPublicLink: jest.fn().mockResolvedValue({
42
- uid: "publicLinkUid",
43
- publicUrl: "publicLinkUrl",
41
+ uid: 'publicLinkUid',
42
+ publicUrl: 'publicLinkUrl',
44
43
  }),
45
44
  updatePublicLink: jest.fn(),
46
45
  };
47
46
  // @ts-expect-error No need to implement all methods for mocking
48
47
  cryptoService = {
49
- generateShareKeys: jest.fn().mockResolvedValue({ shareKey: { encrypted: "encrypted-key", decrypted: { passphraseSessionKey: "pass-session-key", } } }),
48
+ generateShareKeys: jest
49
+ .fn()
50
+ .mockResolvedValue({
51
+ shareKey: { encrypted: 'encrypted-key', decrypted: { passphraseSessionKey: 'pass-session-key' } },
52
+ }),
50
53
  decryptShare: jest.fn().mockImplementation((share) => share),
51
54
  decryptInvitation: jest.fn().mockImplementation((invitation) => invitation),
52
55
  decryptExternalInvitation: jest.fn().mockImplementation((invitation) => invitation),
@@ -54,13 +57,13 @@ describe("SharingManagement", () => {
54
57
  encryptInvitation: jest.fn().mockImplementation(() => { }),
55
58
  encryptExternalInvitation: jest.fn().mockImplementation((invitation) => ({
56
59
  ...invitation,
57
- base64ExternalInvitationSignature: "extenral-signature",
60
+ base64ExternalInvitationSignature: 'extenral-signature',
58
61
  })),
59
62
  decryptPublicLink: jest.fn().mockImplementation((publicLink) => publicLink),
60
- generatePublicLinkPassword: jest.fn().mockResolvedValue("generatedPassword"),
63
+ generatePublicLinkPassword: jest.fn().mockResolvedValue('generatedPassword'),
61
64
  encryptPublicLink: jest.fn().mockImplementation(() => ({
62
- crypto: "publicLinkCrypto",
63
- srp: "publicLinkSrp",
65
+ crypto: 'publicLinkCrypto',
66
+ srp: 'publicLinkSrp',
64
67
  })),
65
68
  };
66
69
  // @ts-expect-error No need to implement all methods for mocking
@@ -69,36 +72,43 @@ describe("SharingManagement", () => {
69
72
  };
70
73
  // @ts-expect-error No need to implement all methods for mocking
71
74
  sharesService = {
72
- loadEncryptedShare: jest.fn().mockResolvedValue({ id: "shareId", addressId: "addressId", creatorEmail: "address@example.com", passphraseSessionKey: "sharePassphraseSessionKey" }),
73
- getContextShareMemberEmailKey: jest.fn().mockResolvedValue({ email: "volume-email", addressId: "addressId", addressKey: "volume-key" }),
75
+ loadEncryptedShare: jest
76
+ .fn()
77
+ .mockResolvedValue({
78
+ id: 'shareId',
79
+ addressId: 'addressId',
80
+ creatorEmail: 'address@example.com',
81
+ passphraseSessionKey: 'sharePassphraseSessionKey',
82
+ }),
83
+ getContextShareMemberEmailKey: jest
84
+ .fn()
85
+ .mockResolvedValue({ email: 'volume-email', addressId: 'addressId', addressKey: 'volume-key' }),
74
86
  };
75
87
  // @ts-expect-error No need to implement all methods for mocking
76
88
  nodesService = {
77
- getNode: jest.fn().mockImplementation((nodeUid) => ({ nodeUid, shareId: "shareId", name: { ok: true, value: "name" } })),
78
- getNodeKeys: jest.fn().mockImplementation((nodeUid) => ({ key: "node-key" })),
89
+ getNode: jest
90
+ .fn()
91
+ .mockImplementation((nodeUid) => ({ nodeUid, shareId: 'shareId', name: { ok: true, value: 'name' } })),
92
+ getNodeKeys: jest.fn().mockImplementation((nodeUid) => ({ key: 'node-key' })),
79
93
  getNodePrivateAndSessionKeys: jest.fn().mockImplementation((nodeUid) => ({})),
80
- getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: "volume-email", addressKey: "volume-key" }),
81
- };
82
- nodesEvents = {
83
- nodeUpdated: jest.fn(),
94
+ getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: 'volume-email', addressKey: 'volume-key' }),
95
+ notifyNodeChanged: jest.fn(),
84
96
  };
85
- sharingManagement = new sharingManagement_1.SharingManagement((0, logger_1.getMockLogger)(), apiService, cryptoService, accountService, sharesService, nodesService, nodesEvents);
97
+ sharingManagement = new sharingManagement_1.SharingManagement((0, logger_1.getMockLogger)(), apiService, cryptoService, accountService, sharesService, nodesService);
86
98
  });
87
- describe("getSharingInfo", () => {
88
- it("should return empty sharing info for unshared node", async () => {
89
- nodesService.getNode = jest.fn().mockResolvedValue({ nodeUid: "nodeUid", shareId: undefined });
90
- const sharingInfo = await sharingManagement.getSharingInfo("nodeUid");
99
+ describe('getSharingInfo', () => {
100
+ it('should return empty sharing info for unshared node', async () => {
101
+ nodesService.getNode = jest.fn().mockResolvedValue({ nodeUid: 'nodeUid', shareId: undefined });
102
+ const sharingInfo = await sharingManagement.getSharingInfo('nodeUid');
91
103
  expect(sharingInfo).toEqual(undefined);
92
104
  expect(apiService.getShareInvitations).not.toHaveBeenCalled();
93
105
  expect(apiService.getShareExternalInvitations).not.toHaveBeenCalled();
94
106
  expect(apiService.getShareMembers).not.toHaveBeenCalled();
95
107
  });
96
- it("should return invitations", async () => {
97
- const invitation = { uid: "invitaiton", addedByEmail: "email" };
98
- apiService.getShareInvitations = jest.fn().mockResolvedValue([
99
- invitation,
100
- ]);
101
- const sharingInfo = await sharingManagement.getSharingInfo("nodeUid");
108
+ it('should return invitations', async () => {
109
+ const invitation = { uid: 'invitaiton', addedByEmail: 'email' };
110
+ apiService.getShareInvitations = jest.fn().mockResolvedValue([invitation]);
111
+ const sharingInfo = await sharingManagement.getSharingInfo('nodeUid');
102
112
  expect(sharingInfo).toEqual({
103
113
  protonInvitations: [invitation],
104
114
  nonProtonInvitations: [],
@@ -107,12 +117,10 @@ describe("SharingManagement", () => {
107
117
  });
108
118
  expect(cryptoService.decryptInvitation).toHaveBeenCalledWith(invitation);
109
119
  });
110
- it("should return external invitations", async () => {
111
- const externalInvitation = { uid: "external-invitation", addedByEmail: "email" };
112
- apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([
113
- externalInvitation,
114
- ]);
115
- const sharingInfo = await sharingManagement.getSharingInfo("nodeUid");
120
+ it('should return external invitations', async () => {
121
+ const externalInvitation = { uid: 'external-invitation', addedByEmail: 'email' };
122
+ apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([externalInvitation]);
123
+ const sharingInfo = await sharingManagement.getSharingInfo('nodeUid');
116
124
  expect(sharingInfo).toEqual({
117
125
  protonInvitations: [],
118
126
  nonProtonInvitations: [externalInvitation],
@@ -121,12 +129,10 @@ describe("SharingManagement", () => {
121
129
  });
122
130
  expect(cryptoService.decryptExternalInvitation).toHaveBeenCalledWith(externalInvitation);
123
131
  });
124
- it("should return members", async () => {
125
- const member = { uid: "member", addedByEmail: "email" };
126
- apiService.getShareMembers = jest.fn().mockResolvedValue([
127
- member,
128
- ]);
129
- const sharingInfo = await sharingManagement.getSharingInfo("nodeUid");
132
+ it('should return members', async () => {
133
+ const member = { uid: 'member', addedByEmail: 'email' };
134
+ apiService.getShareMembers = jest.fn().mockResolvedValue([member]);
135
+ const sharingInfo = await sharingManagement.getSharingInfo('nodeUid');
130
136
  expect(sharingInfo).toEqual({
131
137
  protonInvitations: [],
132
138
  nonProtonInvitations: [],
@@ -135,12 +141,12 @@ describe("SharingManagement", () => {
135
141
  });
136
142
  expect(cryptoService.decryptMember).toHaveBeenCalledWith(member);
137
143
  });
138
- it("should return public link", async () => {
144
+ it('should return public link', async () => {
139
145
  const publicLink = {
140
146
  uid: 'shared~publicLink',
141
147
  };
142
148
  apiService.getPublicLink = jest.fn().mockResolvedValue(publicLink);
143
- const sharingInfo = await sharingManagement.getSharingInfo("nodeUid");
149
+ const sharingInfo = await sharingManagement.getSharingInfo('nodeUid');
144
150
  expect(sharingInfo).toEqual({
145
151
  protonInvitations: [],
146
152
  nonProtonInvitations: [],
@@ -150,124 +156,134 @@ describe("SharingManagement", () => {
150
156
  expect(cryptoService.decryptPublicLink).toHaveBeenCalledWith(publicLink);
151
157
  });
152
158
  });
153
- describe("shareNode with share creation", () => {
154
- const nodeUid = "volumeId~nodeUid";
155
- it("should create share if no exists", async () => {
156
- nodesService.getNode = jest.fn().mockImplementation((nodeUid) => ({ nodeUid, parentUid: 'parentUid', name: { ok: true, value: "name" } }));
157
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ["email"] });
159
+ describe('shareNode with share creation', () => {
160
+ const nodeUid = 'volumeId~nodeUid';
161
+ it('should create share if no exists', async () => {
162
+ nodesService.getNode = jest
163
+ .fn()
164
+ .mockImplementation((nodeUid) => ({
165
+ nodeUid,
166
+ parentUid: 'parentUid',
167
+ name: { ok: true, value: 'name' },
168
+ }));
169
+ nodesService.notifyNodeChanged = jest.fn();
170
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ['email'] });
158
171
  expect(sharingInfo).toEqual({
159
- protonInvitations: [{
160
- uid: "created-invitation",
161
- addedByEmail: { ok: true, value: "volume-email" },
162
- inviteeEmail: "email",
163
- role: "viewer",
164
- }],
172
+ protonInvitations: [
173
+ {
174
+ uid: 'created-invitation',
175
+ addedByEmail: { ok: true, value: 'volume-email' },
176
+ inviteeEmail: 'email',
177
+ role: 'viewer',
178
+ },
179
+ ],
165
180
  nonProtonInvitations: [],
166
181
  members: [],
167
182
  publicLink: undefined,
168
183
  });
169
184
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
170
185
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
171
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
172
- uid: nodeUid,
173
- shareId: "newShareId",
174
- isShared: true,
175
- });
186
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalledWith(nodeUid);
176
187
  });
177
188
  });
178
- describe("shareNode with share re-use", () => {
179
- const nodeUid = "volumeId~nodeUid";
189
+ describe('shareNode with share re-use', () => {
190
+ const nodeUid = 'volumeId~nodeUid';
180
191
  let invitation;
181
192
  let externalInvitation;
182
193
  let member;
183
194
  beforeEach(async () => {
184
195
  invitation = {
185
- uid: "invitation",
186
- addedByEmail: (0, interface_1.resultOk)("added-email"),
187
- inviteeEmail: "internal-email",
196
+ uid: 'invitation',
197
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
198
+ inviteeEmail: 'internal-email',
188
199
  role: interface_1.MemberRole.Viewer,
189
200
  invitationTime: new Date(),
190
201
  };
191
202
  externalInvitation = {
192
- uid: "external-invitation",
193
- addedByEmail: (0, interface_1.resultOk)("added-email"),
194
- inviteeEmail: "external-email",
203
+ uid: 'external-invitation',
204
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
205
+ inviteeEmail: 'external-email',
195
206
  role: interface_1.MemberRole.Viewer,
196
207
  invitationTime: new Date(),
197
208
  state: interface_1.NonProtonInvitationState.Pending,
198
209
  };
199
210
  member = {
200
- uid: "member",
201
- addedByEmail: (0, interface_1.resultOk)("added-email"),
202
- inviteeEmail: "member-email",
211
+ uid: 'member',
212
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
213
+ inviteeEmail: 'member-email',
203
214
  role: interface_1.MemberRole.Viewer,
204
215
  invitationTime: new Date(),
205
216
  };
206
- apiService.getShareInvitations = jest.fn().mockResolvedValue([
207
- invitation,
208
- ]);
209
- apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([
210
- externalInvitation,
211
- ]);
212
- apiService.getShareMembers = jest.fn().mockResolvedValue([
213
- member,
214
- ]);
217
+ apiService.getShareInvitations = jest.fn().mockResolvedValue([invitation]);
218
+ apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([externalInvitation]);
219
+ apiService.getShareMembers = jest.fn().mockResolvedValue([member]);
215
220
  });
216
- describe("invitations", () => {
221
+ describe('invitations', () => {
217
222
  beforeEach(() => {
218
223
  accountService.hasProtonAccount = jest.fn().mockResolvedValue(true);
219
224
  });
220
- it("should share node with proton email with default role", async () => {
221
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ["email"] });
225
+ it('should share node with proton email with default role', async () => {
226
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ['email'] });
222
227
  expect(sharingInfo).toEqual({
223
- protonInvitations: [invitation, {
224
- uid: "created-invitation",
225
- addedByEmail: { ok: true, value: "volume-email" },
226
- inviteeEmail: "email",
227
- role: "viewer",
228
- }],
228
+ protonInvitations: [
229
+ invitation,
230
+ {
231
+ uid: 'created-invitation',
232
+ addedByEmail: { ok: true, value: 'volume-email' },
233
+ inviteeEmail: 'email',
234
+ role: 'viewer',
235
+ },
236
+ ],
229
237
  nonProtonInvitations: [externalInvitation],
230
238
  members: [member],
231
239
  publicLink: undefined,
232
240
  });
233
241
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
234
242
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
235
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
236
243
  });
237
- it("should share node with proton email with specific role", async () => {
238
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "email", role: interface_1.MemberRole.Editor }] });
244
+ it('should share node with proton email with specific role', async () => {
245
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
246
+ users: [{ email: 'email', role: interface_1.MemberRole.Editor }],
247
+ });
239
248
  expect(sharingInfo).toEqual({
240
- protonInvitations: [invitation, {
241
- uid: "created-invitation",
242
- addedByEmail: { ok: true, value: "volume-email" },
243
- inviteeEmail: "email",
244
- role: "editor",
245
- }],
249
+ protonInvitations: [
250
+ invitation,
251
+ {
252
+ uid: 'created-invitation',
253
+ addedByEmail: { ok: true, value: 'volume-email' },
254
+ inviteeEmail: 'email',
255
+ role: 'editor',
256
+ },
257
+ ],
246
258
  nonProtonInvitations: [externalInvitation],
247
259
  members: [member],
248
260
  publicLink: undefined,
249
261
  });
250
262
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
251
263
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
252
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
253
264
  });
254
- it("should update existing role", async () => {
255
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "internal-email", role: interface_1.MemberRole.Editor }] });
265
+ it('should update existing role', async () => {
266
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
267
+ users: [{ email: 'internal-email', role: interface_1.MemberRole.Editor }],
268
+ });
256
269
  expect(sharingInfo).toEqual({
257
- protonInvitations: [{
270
+ protonInvitations: [
271
+ {
258
272
  ...invitation,
259
- role: "editor",
260
- }],
273
+ role: 'editor',
274
+ },
275
+ ],
261
276
  nonProtonInvitations: [externalInvitation],
262
277
  members: [member],
263
278
  publicLink: undefined,
264
279
  });
265
280
  expect(apiService.updateInvitation).toHaveBeenCalled();
266
281
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
267
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
268
282
  });
269
- it("should be no-op if no change", async () => {
270
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "internal-email", role: interface_1.MemberRole.Viewer }] });
283
+ it('should be no-op if no change', async () => {
284
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
285
+ users: [{ email: 'internal-email', role: interface_1.MemberRole.Viewer }],
286
+ });
271
287
  expect(sharingInfo).toEqual({
272
288
  protonInvitations: [invitation],
273
289
  nonProtonInvitations: [externalInvitation],
@@ -276,66 +292,76 @@ describe("SharingManagement", () => {
276
292
  });
277
293
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
278
294
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
279
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
280
295
  });
281
296
  });
282
- describe("external invitations", () => {
297
+ describe('external invitations', () => {
283
298
  beforeEach(() => {
284
299
  accountService.hasProtonAccount = jest.fn().mockResolvedValue(false);
285
300
  });
286
- it("should share node with external email with default role", async () => {
287
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ["email"] });
301
+ it('should share node with external email with default role', async () => {
302
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ['email'] });
288
303
  expect(sharingInfo).toEqual({
289
304
  protonInvitations: [invitation],
290
- nonProtonInvitations: [externalInvitation, {
291
- uid: "created-external-invitation",
292
- addedByEmail: { ok: true, value: "volume-email" },
293
- inviteeEmail: "email",
294
- role: "viewer",
295
- state: "pending",
296
- }],
305
+ nonProtonInvitations: [
306
+ externalInvitation,
307
+ {
308
+ uid: 'created-external-invitation',
309
+ addedByEmail: { ok: true, value: 'volume-email' },
310
+ inviteeEmail: 'email',
311
+ role: 'viewer',
312
+ state: 'pending',
313
+ },
314
+ ],
297
315
  members: [member],
298
316
  publicLink: undefined,
299
317
  });
300
318
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
301
319
  expect(apiService.inviteExternalUser).toHaveBeenCalled();
302
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
303
320
  });
304
- it("should share node with external email with specific role", async () => {
305
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "email", role: interface_1.MemberRole.Editor }] });
321
+ it('should share node with external email with specific role', async () => {
322
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
323
+ users: [{ email: 'email', role: interface_1.MemberRole.Editor }],
324
+ });
306
325
  expect(sharingInfo).toEqual({
307
326
  protonInvitations: [invitation],
308
- nonProtonInvitations: [externalInvitation, {
309
- uid: "created-external-invitation",
310
- addedByEmail: { ok: true, value: "volume-email" },
311
- inviteeEmail: "email",
312
- role: "editor",
313
- state: "pending",
314
- }],
327
+ nonProtonInvitations: [
328
+ externalInvitation,
329
+ {
330
+ uid: 'created-external-invitation',
331
+ addedByEmail: { ok: true, value: 'volume-email' },
332
+ inviteeEmail: 'email',
333
+ role: 'editor',
334
+ state: 'pending',
335
+ },
336
+ ],
315
337
  members: [member],
316
338
  publicLink: undefined,
317
339
  });
318
340
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
319
341
  expect(apiService.inviteExternalUser).toHaveBeenCalled();
320
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
321
342
  });
322
- it("should update existing role", async () => {
323
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "external-email", role: interface_1.MemberRole.Editor }] });
343
+ it('should update existing role', async () => {
344
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
345
+ users: [{ email: 'external-email', role: interface_1.MemberRole.Editor }],
346
+ });
324
347
  expect(sharingInfo).toEqual({
325
348
  protonInvitations: [invitation],
326
- nonProtonInvitations: [{
349
+ nonProtonInvitations: [
350
+ {
327
351
  ...externalInvitation,
328
- role: "editor",
329
- }],
352
+ role: 'editor',
353
+ },
354
+ ],
330
355
  members: [member],
331
356
  publicLink: undefined,
332
357
  });
333
358
  expect(apiService.updateExternalInvitation).toHaveBeenCalled();
334
359
  expect(apiService.inviteExternalUser).not.toHaveBeenCalled();
335
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
336
360
  });
337
- it("should be no-op if no change", async () => {
338
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "external-email", role: interface_1.MemberRole.Viewer }] });
361
+ it('should be no-op if no change', async () => {
362
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
363
+ users: [{ email: 'external-email', role: interface_1.MemberRole.Viewer }],
364
+ });
339
365
  expect(sharingInfo).toEqual({
340
366
  protonInvitations: [invitation],
341
367
  nonProtonInvitations: [externalInvitation],
@@ -344,63 +370,70 @@ describe("SharingManagement", () => {
344
370
  });
345
371
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
346
372
  expect(apiService.inviteExternalUser).not.toHaveBeenCalled();
347
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
348
373
  });
349
374
  });
350
- describe("mix of internal and external invitations", () => {
375
+ describe('mix of internal and external invitations', () => {
351
376
  beforeEach(() => {
352
- accountService.hasProtonAccount = jest.fn()
353
- .mockResolvedValueOnce(true)
354
- .mockResolvedValueOnce(false);
377
+ accountService.hasProtonAccount = jest.fn().mockResolvedValueOnce(true).mockResolvedValueOnce(false);
355
378
  });
356
- it("should share node with proton and external email with default role", async () => {
357
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ["email", "email2"] });
379
+ it('should share node with proton and external email with default role', async () => {
380
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ['email', 'email2'] });
358
381
  expect(sharingInfo).toEqual({
359
- protonInvitations: [invitation, {
360
- uid: "created-invitation",
361
- addedByEmail: { ok: true, value: "volume-email" },
362
- inviteeEmail: "email",
363
- role: "viewer",
364
- }],
365
- nonProtonInvitations: [externalInvitation, {
366
- uid: "created-external-invitation",
367
- addedByEmail: { ok: true, value: "volume-email" },
368
- inviteeEmail: "email2",
369
- role: "viewer",
370
- state: "pending",
371
- }],
382
+ protonInvitations: [
383
+ invitation,
384
+ {
385
+ uid: 'created-invitation',
386
+ addedByEmail: { ok: true, value: 'volume-email' },
387
+ inviteeEmail: 'email',
388
+ role: 'viewer',
389
+ },
390
+ ],
391
+ nonProtonInvitations: [
392
+ externalInvitation,
393
+ {
394
+ uid: 'created-external-invitation',
395
+ addedByEmail: { ok: true, value: 'volume-email' },
396
+ inviteeEmail: 'email2',
397
+ role: 'viewer',
398
+ state: 'pending',
399
+ },
400
+ ],
372
401
  members: [member],
373
402
  publicLink: undefined,
374
403
  });
375
404
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
376
- expect(apiService.inviteProtonUser).toHaveBeenCalledWith("shareId", expect.objectContaining({
377
- inviteeEmail: "email",
405
+ expect(apiService.inviteProtonUser).toHaveBeenCalledWith('shareId', expect.objectContaining({
406
+ inviteeEmail: 'email',
378
407
  }), expect.anything());
379
- expect(apiService.inviteExternalUser).toHaveBeenCalledWith("shareId", expect.objectContaining({
380
- inviteeEmail: "email2",
408
+ expect(apiService.inviteExternalUser).toHaveBeenCalledWith('shareId', expect.objectContaining({
409
+ inviteeEmail: 'email2',
381
410
  }), expect.anything());
382
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
383
411
  });
384
412
  });
385
- describe("members", () => {
386
- it("should update member via proton user", async () => {
387
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "member-email", role: interface_1.MemberRole.Editor }] });
413
+ describe('members', () => {
414
+ it('should update member via proton user', async () => {
415
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
416
+ users: [{ email: 'member-email', role: interface_1.MemberRole.Editor }],
417
+ });
388
418
  expect(sharingInfo).toEqual({
389
419
  protonInvitations: [invitation],
390
420
  nonProtonInvitations: [externalInvitation],
391
- members: [{
421
+ members: [
422
+ {
392
423
  ...member,
393
- role: "editor",
394
- }],
424
+ role: 'editor',
425
+ },
426
+ ],
395
427
  publicLink: undefined,
396
428
  });
397
429
  expect(apiService.updateMember).toHaveBeenCalled();
398
430
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
399
431
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
400
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
401
432
  });
402
- it("should be no-op if no change via proton user", async () => {
403
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "member-email", role: interface_1.MemberRole.Viewer }] });
433
+ it('should be no-op if no change via proton user', async () => {
434
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
435
+ users: [{ email: 'member-email', role: interface_1.MemberRole.Viewer }],
436
+ });
404
437
  expect(sharingInfo).toEqual({
405
438
  protonInvitations: [invitation],
406
439
  nonProtonInvitations: [externalInvitation],
@@ -410,26 +443,30 @@ describe("SharingManagement", () => {
410
443
  expect(apiService.updateMember).not.toHaveBeenCalled();
411
444
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
412
445
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
413
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
414
446
  });
415
- it("should update member via non-proton user", async () => {
416
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "member-email", role: interface_1.MemberRole.Editor }] });
447
+ it('should update member via non-proton user', async () => {
448
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
449
+ users: [{ email: 'member-email', role: interface_1.MemberRole.Editor }],
450
+ });
417
451
  expect(sharingInfo).toEqual({
418
452
  protonInvitations: [invitation],
419
453
  nonProtonInvitations: [externalInvitation],
420
- members: [{
454
+ members: [
455
+ {
421
456
  ...member,
422
- role: "editor",
423
- }],
457
+ role: 'editor',
458
+ },
459
+ ],
424
460
  publicLink: undefined,
425
461
  });
426
462
  expect(apiService.updateMember).toHaveBeenCalled();
427
463
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
428
464
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
429
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
430
465
  });
431
- it("should be no-op if no change via non-proton user", async () => {
432
- const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: [{ email: "member-email", role: interface_1.MemberRole.Viewer }] });
466
+ it('should be no-op if no change via non-proton user', async () => {
467
+ const sharingInfo = await sharingManagement.shareNode(nodeUid, {
468
+ users: [{ email: 'member-email', role: interface_1.MemberRole.Viewer }],
469
+ });
433
470
  expect(sharingInfo).toEqual({
434
471
  protonInvitations: [invitation],
435
472
  nonProtonInvitations: [externalInvitation],
@@ -439,11 +476,10 @@ describe("SharingManagement", () => {
439
476
  expect(apiService.updateMember).not.toHaveBeenCalled();
440
477
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
441
478
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
442
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
443
479
  });
444
480
  });
445
- describe("public link", () => {
446
- it("should share node with public link", async () => {
481
+ describe('public link', () => {
482
+ it('should share node with public link', async () => {
447
483
  jest.useFakeTimers();
448
484
  jest.setSystemTime(new Date('2025-01-01'));
449
485
  const sharingInfo = await sharingManagement.shareNode(nodeUid, {
@@ -458,32 +494,33 @@ describe("SharingManagement", () => {
458
494
  nonProtonInvitations: [externalInvitation],
459
495
  members: [member],
460
496
  publicLink: {
461
- uid: "publicLinkUid",
497
+ uid: 'publicLinkUid',
462
498
  role: interface_1.MemberRole.Viewer,
463
- url: "publicLinkUrl#generatedPassword",
499
+ url: 'publicLinkUrl#generatedPassword',
464
500
  creationTime: new Date(),
465
501
  expirationTime: undefined,
466
502
  customPassword: undefined,
467
- creatorEmail: "volume-email",
503
+ creatorEmail: 'volume-email',
504
+ numberOfInitializedDownloads: 0,
468
505
  },
469
506
  });
470
507
  expect(cryptoService.generatePublicLinkPassword).toHaveBeenCalled();
471
- expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith("volume-email", "sharePassphraseSessionKey", "generatedPassword");
472
- expect(apiService.createPublicLink).toHaveBeenCalledWith("shareId", expect.objectContaining({
508
+ expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith('volume-email', 'sharePassphraseSessionKey', 'generatedPassword');
509
+ expect(apiService.createPublicLink).toHaveBeenCalledWith('shareId', expect.objectContaining({
473
510
  role: interface_1.MemberRole.Viewer,
474
511
  includesCustomPassword: false,
475
512
  expirationTime: undefined,
476
- crypto: "publicLinkCrypto",
477
- srp: "publicLinkSrp",
513
+ crypto: 'publicLinkCrypto',
514
+ srp: 'publicLinkSrp',
478
515
  }));
479
516
  });
480
- it("should share node with custom password and expiration", async () => {
517
+ it('should share node with custom password and expiration', async () => {
481
518
  jest.useFakeTimers();
482
519
  jest.setSystemTime(new Date('2025-01-01'));
483
520
  const sharingInfo = await sharingManagement.shareNode(nodeUid, {
484
521
  publicLink: {
485
522
  role: interface_1.MemberRole.Viewer,
486
- customPassword: "customPassword",
523
+ customPassword: 'customPassword',
487
524
  expiration: new Date('2025-01-02'),
488
525
  },
489
526
  });
@@ -492,42 +529,43 @@ describe("SharingManagement", () => {
492
529
  nonProtonInvitations: [externalInvitation],
493
530
  members: [member],
494
531
  publicLink: {
495
- uid: "publicLinkUid",
532
+ uid: 'publicLinkUid',
496
533
  role: interface_1.MemberRole.Viewer,
497
- url: "publicLinkUrl#generatedPassword",
534
+ url: 'publicLinkUrl#generatedPassword',
498
535
  creationTime: new Date(),
499
536
  expirationTime: new Date('2025-01-02'),
500
- customPassword: "customPassword",
501
- creatorEmail: "volume-email",
537
+ customPassword: 'customPassword',
538
+ creatorEmail: 'volume-email',
539
+ numberOfInitializedDownloads: 0,
502
540
  },
503
541
  });
504
542
  expect(cryptoService.generatePublicLinkPassword).toHaveBeenCalled();
505
- expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith("volume-email", "sharePassphraseSessionKey", "generatedPasswordcustomPassword");
506
- expect(apiService.createPublicLink).toHaveBeenCalledWith("shareId", expect.objectContaining({
543
+ expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith('volume-email', 'sharePassphraseSessionKey', 'generatedPasswordcustomPassword');
544
+ expect(apiService.createPublicLink).toHaveBeenCalledWith('shareId', expect.objectContaining({
507
545
  role: interface_1.MemberRole.Viewer,
508
546
  includesCustomPassword: true,
509
547
  expirationTime: 1735776000,
510
- crypto: "publicLinkCrypto",
511
- srp: "publicLinkSrp",
548
+ crypto: 'publicLinkCrypto',
549
+ srp: 'publicLinkSrp',
512
550
  }));
513
551
  });
514
- it("should update public link with custom password and expiration", async () => {
552
+ it('should update public link with custom password and expiration', async () => {
515
553
  jest.useFakeTimers();
516
554
  jest.setSystemTime(new Date('2025-01-01'));
517
555
  const publicLink = {
518
556
  uid: 'publicLinkUid',
519
- url: "publicLinkUrl#generatedpas", // Generated password must be 12 chararacters long.
557
+ url: 'publicLinkUrl#generatedpas', // Generated password must be 12 chararacters long.
520
558
  creationTime: new Date('2025-01-01'),
521
559
  role: interface_1.MemberRole.Viewer,
522
560
  customPassword: undefined,
523
561
  expirationTime: undefined,
524
- creatorEmail: "publicLinkCreatorEmail",
562
+ creatorEmail: 'publicLinkCreatorEmail',
525
563
  };
526
564
  apiService.getPublicLink = jest.fn().mockResolvedValue(publicLink);
527
565
  const sharingInfo = await sharingManagement.shareNode(nodeUid, {
528
566
  publicLink: {
529
567
  role: interface_1.MemberRole.Editor,
530
- customPassword: "customPassword",
568
+ customPassword: 'customPassword',
531
569
  expiration: new Date('2025-01-02'),
532
570
  },
533
571
  });
@@ -536,43 +574,43 @@ describe("SharingManagement", () => {
536
574
  nonProtonInvitations: [externalInvitation],
537
575
  members: [member],
538
576
  publicLink: {
539
- uid: "publicLinkUid",
577
+ uid: 'publicLinkUid',
540
578
  role: interface_1.MemberRole.Editor,
541
- url: "publicLinkUrl#generatedpas",
579
+ url: 'publicLinkUrl#generatedpas',
542
580
  creationTime: new Date('2025-01-01'),
543
581
  expirationTime: new Date('2025-01-02'),
544
- customPassword: "customPassword",
545
- creatorEmail: "publicLinkCreatorEmail",
582
+ customPassword: 'customPassword',
583
+ creatorEmail: 'publicLinkCreatorEmail',
546
584
  },
547
585
  });
548
- expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith("publicLinkCreatorEmail", "sharePassphraseSessionKey", "generatedpascustomPassword");
549
- expect(apiService.updatePublicLink).toHaveBeenCalledWith("publicLinkUid", expect.objectContaining({
586
+ expect(cryptoService.encryptPublicLink).toHaveBeenCalledWith('publicLinkCreatorEmail', 'sharePassphraseSessionKey', 'generatedpascustomPassword');
587
+ expect(apiService.updatePublicLink).toHaveBeenCalledWith('publicLinkUid', expect.objectContaining({
550
588
  role: interface_1.MemberRole.Editor,
551
589
  includesCustomPassword: true,
552
590
  expirationTime: 1735776000,
553
- crypto: "publicLinkCrypto",
554
- srp: "publicLinkSrp",
591
+ crypto: 'publicLinkCrypto',
592
+ srp: 'publicLinkSrp',
555
593
  }));
556
594
  });
557
- it("should not allow updating legacy public link", async () => {
595
+ it('should not allow updating legacy public link', async () => {
558
596
  apiService.getPublicLink = jest.fn().mockResolvedValue({
559
597
  uid: 'publicLinkUid',
560
- url: "publicLinkUrl#aaa", // Legacy public links doesn't have 12 chars.
598
+ url: 'publicLinkUrl#aaa', // Legacy public links doesn't have 12 chars.
561
599
  });
562
600
  await expect(sharingManagement.shareNode(nodeUid, {
563
601
  publicLink: true,
564
- })).rejects.toThrow("Legacy public link cannot be updated. Please re-create a new public link.");
602
+ })).rejects.toThrow('Legacy public link cannot be updated. Please re-create a new public link.');
565
603
  });
566
- it("should not allow updating legacy public link without generated password", async () => {
604
+ it('should not allow updating legacy public link without generated password', async () => {
567
605
  apiService.getPublicLink = jest.fn().mockResolvedValue({
568
606
  uid: 'publicLinkUid',
569
- url: "publicLinkUrl",
607
+ url: 'publicLinkUrl',
570
608
  });
571
609
  await expect(sharingManagement.shareNode(nodeUid, {
572
610
  publicLink: true,
573
- })).rejects.toThrow("Legacy public link cannot be updated. Please re-create a new public link.");
611
+ })).rejects.toThrow('Legacy public link cannot be updated. Please re-create a new public link.');
574
612
  });
575
- it("should not allow creating public link with expiration in the past", async () => {
613
+ it('should not allow creating public link with expiration in the past', async () => {
576
614
  jest.useFakeTimers();
577
615
  jest.setSystemTime(new Date('2025-01-01'));
578
616
  await expect(sharingManagement.shareNode(nodeUid, {
@@ -580,60 +618,55 @@ describe("SharingManagement", () => {
580
618
  role: interface_1.MemberRole.Viewer,
581
619
  expiration: new Date('2024-01-01'),
582
620
  },
583
- })).rejects.toThrow("Expiration date cannot be in the past");
621
+ })).rejects.toThrow('Expiration date cannot be in the past');
584
622
  expect(apiService.createStandardShare).not.toHaveBeenCalled();
585
623
  expect(apiService.createPublicLink).not.toHaveBeenCalled();
586
624
  });
587
625
  });
588
626
  });
589
- describe("unsahreNode", () => {
590
- const nodeUid = "volumeId~nodeUid";
627
+ describe('unshareNode', () => {
628
+ const nodeUid = 'volumeId~nodeUid';
591
629
  let invitation;
592
630
  let externalInvitation;
593
631
  let member;
594
632
  let publicLink;
595
633
  beforeEach(async () => {
596
634
  invitation = {
597
- uid: "invitation",
598
- addedByEmail: (0, interface_1.resultOk)("added-email"),
599
- inviteeEmail: "internal-email",
635
+ uid: 'invitation',
636
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
637
+ inviteeEmail: 'internal-email',
600
638
  role: interface_1.MemberRole.Viewer,
601
639
  invitationTime: new Date(),
602
640
  };
603
641
  externalInvitation = {
604
- uid: "external-invitation",
605
- addedByEmail: (0, interface_1.resultOk)("added-email"),
606
- inviteeEmail: "external-email",
642
+ uid: 'external-invitation',
643
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
644
+ inviteeEmail: 'external-email',
607
645
  role: interface_1.MemberRole.Viewer,
608
646
  invitationTime: new Date(),
609
647
  state: interface_1.NonProtonInvitationState.Pending,
610
648
  };
611
649
  member = {
612
- uid: "member",
613
- addedByEmail: (0, interface_1.resultOk)("added-email"),
614
- inviteeEmail: "member-email",
650
+ uid: 'member',
651
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
652
+ inviteeEmail: 'member-email',
615
653
  role: interface_1.MemberRole.Viewer,
616
654
  invitationTime: new Date(),
617
655
  };
618
656
  publicLink = {
619
- uid: "publicLink",
657
+ uid: 'publicLink',
620
658
  creationTime: new Date(),
621
659
  role: interface_1.MemberRole.Viewer,
622
- url: "url",
660
+ url: 'url',
661
+ numberOfInitializedDownloads: 0,
623
662
  };
624
- apiService.getShareInvitations = jest.fn().mockResolvedValue([
625
- invitation,
626
- ]);
627
- apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([
628
- externalInvitation,
629
- ]);
630
- apiService.getShareMembers = jest.fn().mockResolvedValue([
631
- member,
632
- ]);
663
+ apiService.getShareInvitations = jest.fn().mockResolvedValue([invitation]);
664
+ apiService.getShareExternalInvitations = jest.fn().mockResolvedValue([externalInvitation]);
665
+ apiService.getShareMembers = jest.fn().mockResolvedValue([member]);
633
666
  apiService.getPublicLink = jest.fn().mockResolvedValue(publicLink);
634
667
  });
635
- it("should delete invitation", async () => {
636
- const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ["internal-email"] });
668
+ it('should delete invitation', async () => {
669
+ const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ['internal-email'] });
637
670
  expect(sharingInfo).toEqual({
638
671
  protonInvitations: [],
639
672
  nonProtonInvitations: [externalInvitation],
@@ -645,10 +678,9 @@ describe("SharingManagement", () => {
645
678
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
646
679
  expect(apiService.removeMember).not.toHaveBeenCalled();
647
680
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
648
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
649
681
  });
650
- it("should delete external invitation", async () => {
651
- const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ["external-email"] });
682
+ it('should delete external invitation', async () => {
683
+ const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ['external-email'] });
652
684
  expect(sharingInfo).toEqual({
653
685
  protonInvitations: [invitation],
654
686
  nonProtonInvitations: [],
@@ -660,10 +692,9 @@ describe("SharingManagement", () => {
660
692
  expect(apiService.deleteExternalInvitation).toHaveBeenCalled();
661
693
  expect(apiService.removeMember).not.toHaveBeenCalled();
662
694
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
663
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
664
695
  });
665
- it("should remove member", async () => {
666
- const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ["member-email"] });
696
+ it('should remove member', async () => {
697
+ const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ['member-email'] });
667
698
  expect(sharingInfo).toEqual({
668
699
  protonInvitations: [invitation],
669
700
  nonProtonInvitations: [externalInvitation],
@@ -675,10 +706,9 @@ describe("SharingManagement", () => {
675
706
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
676
707
  expect(apiService.removeMember).toHaveBeenCalled();
677
708
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
678
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
679
709
  });
680
- it("should be no-op if not shared with email", async () => {
681
- const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ["non-existing-email"] });
710
+ it('should be no-op if not shared with email', async () => {
711
+ const sharingInfo = await sharingManagement.unshareNode(nodeUid, { users: ['non-existing-email'] });
682
712
  expect(sharingInfo).toEqual({
683
713
  protonInvitations: [invitation],
684
714
  nonProtonInvitations: [externalInvitation],
@@ -690,10 +720,9 @@ describe("SharingManagement", () => {
690
720
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
691
721
  expect(apiService.removeMember).not.toHaveBeenCalled();
692
722
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
693
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
694
723
  });
695
- it("should remove public link", async () => {
696
- const sharingInfo = await sharingManagement.unshareNode(nodeUid, { publicLink: "remove" });
724
+ it('should remove public link', async () => {
725
+ const sharingInfo = await sharingManagement.unshareNode(nodeUid, { publicLink: 'remove' });
697
726
  expect(sharingInfo).toEqual({
698
727
  protonInvitations: [invitation],
699
728
  nonProtonInvitations: [externalInvitation],
@@ -705,9 +734,8 @@ describe("SharingManagement", () => {
705
734
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
706
735
  expect(apiService.removeMember).not.toHaveBeenCalled();
707
736
  expect(apiService.removePublicLink).toHaveBeenCalled();
708
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
709
737
  });
710
- it("should remove share if all is removed", async () => {
738
+ it('should remove share if all is removed', async () => {
711
739
  const sharingInfo = await sharingManagement.unshareNode(nodeUid);
712
740
  expect(sharingInfo).toEqual(undefined);
713
741
  expect(apiService.deleteShare).toHaveBeenCalled();
@@ -715,16 +743,12 @@ describe("SharingManagement", () => {
715
743
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
716
744
  expect(apiService.removeMember).not.toHaveBeenCalled();
717
745
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
718
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
719
- uid: nodeUid,
720
- shareId: undefined,
721
- isShared: false,
722
- });
746
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalled();
723
747
  });
724
- it("should remove share if everything is manually removed", async () => {
748
+ it('should remove share if everything is manually removed', async () => {
725
749
  const sharingInfo = await sharingManagement.unshareNode(nodeUid, {
726
- users: ["internal-email", "external-email", "member-email"],
727
- publicLink: "remove",
750
+ users: ['internal-email', 'external-email', 'member-email'],
751
+ publicLink: 'remove',
728
752
  });
729
753
  expect(sharingInfo).toEqual(undefined);
730
754
  expect(apiService.deleteShare).toHaveBeenCalled();
@@ -732,26 +756,21 @@ describe("SharingManagement", () => {
732
756
  expect(apiService.deleteExternalInvitation).toHaveBeenCalled();
733
757
  expect(apiService.removeMember).toHaveBeenCalled();
734
758
  expect(apiService.removePublicLink).toHaveBeenCalled();
735
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
736
- uid: nodeUid,
737
- shareId: undefined,
738
- isShared: false,
739
- });
740
759
  });
741
760
  });
742
- describe("resendInvitationEmail", () => {
743
- const nodeUid = "volumeId~nodeUid";
761
+ describe('resendInvitationEmail', () => {
762
+ const nodeUid = 'volumeId~nodeUid';
744
763
  const invitation = {
745
- uid: "invitation",
746
- addedByEmail: (0, interface_1.resultOk)("added-email"),
747
- inviteeEmail: "internal-email",
764
+ uid: 'invitation',
765
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
766
+ inviteeEmail: 'internal-email',
748
767
  role: interface_1.MemberRole.Viewer,
749
768
  invitationTime: new Date(),
750
769
  };
751
770
  const externalInvitation = {
752
- uid: "external-invitation",
753
- addedByEmail: (0, interface_1.resultOk)("added-email"),
754
- inviteeEmail: "external-email",
771
+ uid: 'external-invitation',
772
+ addedByEmail: (0, interface_1.resultOk)('added-email'),
773
+ inviteeEmail: 'external-email',
755
774
  role: interface_1.MemberRole.Viewer,
756
775
  invitationTime: new Date(),
757
776
  state: interface_1.NonProtonInvitationState.Pending,
@@ -762,24 +781,24 @@ describe("SharingManagement", () => {
762
781
  apiService.getShareMembers = jest.fn().mockResolvedValue([]);
763
782
  apiService.getPublicLink = jest.fn().mockResolvedValue(undefined);
764
783
  });
765
- it("should resend email for proton invitation", async () => {
784
+ it('should resend email for proton invitation', async () => {
766
785
  await sharingManagement.resendInvitationEmail(nodeUid, invitation.uid);
767
786
  expect(apiService.resendInvitationEmail).toHaveBeenCalledWith(invitation.uid);
768
787
  expect(apiService.resendExternalInvitationEmail).not.toHaveBeenCalled();
769
788
  });
770
- it("should resend email for external invitation", async () => {
789
+ it('should resend email for external invitation', async () => {
771
790
  await sharingManagement.resendInvitationEmail(nodeUid, externalInvitation.uid);
772
791
  expect(apiService.resendExternalInvitationEmail).toHaveBeenCalledWith(externalInvitation.uid);
773
792
  expect(apiService.resendInvitationEmail).not.toHaveBeenCalled();
774
793
  });
775
- it("should throw error when no sharing found for node", async () => {
794
+ it('should throw error when no sharing found for node', async () => {
776
795
  nodesService.getNode = jest.fn().mockResolvedValue({ nodeUid, shareId: undefined });
777
- await expect(sharingManagement.resendInvitationEmail(nodeUid, invitation.uid)).rejects.toThrow("Node is not shared");
796
+ await expect(sharingManagement.resendInvitationEmail(nodeUid, invitation.uid)).rejects.toThrow('Node is not shared');
778
797
  expect(apiService.resendInvitationEmail).not.toHaveBeenCalled();
779
798
  expect(apiService.resendExternalInvitationEmail).not.toHaveBeenCalled();
780
799
  });
781
- it("should log when no invitation found", async () => {
782
- await expect(sharingManagement.resendInvitationEmail(nodeUid, "non-existent-uid")).rejects.toThrow("Invitation not found");
800
+ it('should log when no invitation found', async () => {
801
+ await expect(sharingManagement.resendInvitationEmail(nodeUid, 'non-existent-uid')).rejects.toThrow('Invitation not found');
783
802
  expect(apiService.resendInvitationEmail).not.toHaveBeenCalled();
784
803
  expect(apiService.resendExternalInvitationEmail).not.toHaveBeenCalled();
785
804
  });