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