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