@protontech/drive-sdk 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +2 -1
  120. package/dist/internal/events/eventManager.js +9 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +84 -60
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +10 -9
  125. package/dist/internal/events/index.js +38 -32
  126. package/dist/internal/events/index.js.map +1 -1
  127. package/dist/internal/events/interface.d.ts +1 -1
  128. package/dist/internal/events/interface.js +0 -1
  129. package/dist/internal/events/interface.js.map +1 -1
  130. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  131. package/dist/internal/events/volumeEventManager.js.map +1 -1
  132. package/dist/internal/events/volumeEventManager.test.js +55 -55
  133. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  134. package/dist/internal/nodes/apiService.d.ts +4 -3
  135. package/dist/internal/nodes/apiService.js +36 -15
  136. package/dist/internal/nodes/apiService.js.map +1 -1
  137. package/dist/internal/nodes/apiService.test.js +60 -41
  138. package/dist/internal/nodes/apiService.test.js.map +1 -1
  139. package/dist/internal/nodes/cache.d.ts +5 -5
  140. package/dist/internal/nodes/cache.js +14 -7
  141. package/dist/internal/nodes/cache.js.map +1 -1
  142. package/dist/internal/nodes/cache.test.js +31 -9
  143. package/dist/internal/nodes/cache.test.js.map +1 -1
  144. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  145. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  146. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  147. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  148. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  149. package/dist/internal/nodes/cryptoService.js +11 -17
  150. package/dist/internal/nodes/cryptoService.js.map +1 -1
  151. package/dist/internal/nodes/cryptoService.test.js +320 -241
  152. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  153. package/dist/internal/nodes/events.d.ts +3 -3
  154. package/dist/internal/nodes/events.js +7 -7
  155. package/dist/internal/nodes/events.js.map +1 -1
  156. package/dist/internal/nodes/events.test.js +27 -21
  157. package/dist/internal/nodes/events.test.js.map +1 -1
  158. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  159. package/dist/internal/nodes/extendedAttributes.js +3 -1
  160. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  161. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  162. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  163. package/dist/internal/nodes/index.d.ts +10 -10
  164. package/dist/internal/nodes/index.js.map +1 -1
  165. package/dist/internal/nodes/index.test.d.ts +1 -0
  166. package/dist/internal/nodes/index.test.js +106 -0
  167. package/dist/internal/nodes/index.test.js.map +1 -0
  168. package/dist/internal/nodes/interface.d.ts +2 -2
  169. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  170. package/dist/internal/nodes/nodesAccess.js +28 -16
  171. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  172. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  173. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  174. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  175. package/dist/internal/nodes/nodesManagement.js +9 -7
  176. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  177. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  178. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  179. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  180. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  181. package/dist/internal/photos/albums.d.ts +3 -3
  182. package/dist/internal/photos/albums.js.map +1 -1
  183. package/dist/internal/photos/apiService.d.ts +1 -1
  184. package/dist/internal/photos/apiService.js +3 -6
  185. package/dist/internal/photos/apiService.js.map +1 -1
  186. package/dist/internal/photos/cache.d.ts +1 -1
  187. package/dist/internal/photos/index.d.ts +5 -5
  188. package/dist/internal/photos/index.js.map +1 -1
  189. package/dist/internal/photos/interface.d.ts +2 -2
  190. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  191. package/dist/internal/photos/photosTimeline.js +1 -2
  192. package/dist/internal/photos/photosTimeline.js.map +1 -1
  193. package/dist/internal/sdkEvents.d.ts +1 -1
  194. package/dist/internal/sdkEvents.js +2 -7
  195. package/dist/internal/sdkEvents.js.map +1 -1
  196. package/dist/internal/sdkEvents.test.js +8 -8
  197. package/dist/internal/shares/apiService.d.ts +2 -2
  198. package/dist/internal/shares/apiService.js +5 -3
  199. package/dist/internal/shares/apiService.js.map +1 -1
  200. package/dist/internal/shares/cache.d.ts +2 -2
  201. package/dist/internal/shares/cache.js +12 -6
  202. package/dist/internal/shares/cache.js.map +1 -1
  203. package/dist/internal/shares/cache.test.js.map +1 -1
  204. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  205. package/dist/internal/shares/cryptoCache.test.js +8 -2
  206. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.d.ts +3 -3
  208. package/dist/internal/shares/cryptoService.js.map +1 -1
  209. package/dist/internal/shares/cryptoService.test.js +42 -42
  210. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  211. package/dist/internal/shares/index.d.ts +4 -4
  212. package/dist/internal/shares/index.js.map +1 -1
  213. package/dist/internal/shares/interface.d.ts +2 -2
  214. package/dist/internal/shares/manager.d.ts +7 -7
  215. package/dist/internal/shares/manager.js.map +1 -1
  216. package/dist/internal/shares/manager.test.js +71 -63
  217. package/dist/internal/shares/manager.test.js.map +1 -1
  218. package/dist/internal/sharing/apiService.d.ts +4 -4
  219. package/dist/internal/sharing/apiService.js +4 -3
  220. package/dist/internal/sharing/apiService.js.map +1 -1
  221. package/dist/internal/sharing/cache.d.ts +2 -1
  222. package/dist/internal/sharing/cache.js +9 -0
  223. package/dist/internal/sharing/cache.js.map +1 -1
  224. package/dist/internal/sharing/cache.test.js +33 -33
  225. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  226. package/dist/internal/sharing/cryptoService.js +3 -5
  227. package/dist/internal/sharing/cryptoService.js.map +1 -1
  228. package/dist/internal/sharing/cryptoService.test.js +39 -39
  229. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  230. package/dist/internal/sharing/events.d.ts +5 -4
  231. package/dist/internal/sharing/events.js +28 -19
  232. package/dist/internal/sharing/events.js.map +1 -1
  233. package/dist/internal/sharing/events.test.js +101 -88
  234. package/dist/internal/sharing/events.test.js.map +1 -1
  235. package/dist/internal/sharing/index.d.ts +6 -6
  236. package/dist/internal/sharing/index.js.map +1 -1
  237. package/dist/internal/sharing/interface.d.ts +5 -4
  238. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  239. package/dist/internal/sharing/sharingAccess.js +8 -4
  240. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  241. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  242. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  243. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  244. package/dist/internal/sharing/sharingManagement.js +5 -7
  245. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  246. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  247. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  248. package/dist/internal/uids.js.map +1 -1
  249. package/dist/internal/upload/apiService.d.ts +3 -3
  250. package/dist/internal/upload/apiService.js +1 -1
  251. package/dist/internal/upload/apiService.js.map +1 -1
  252. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  253. package/dist/internal/upload/blockVerifier.js +1 -1
  254. package/dist/internal/upload/blockVerifier.js.map +1 -1
  255. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  256. package/dist/internal/upload/cryptoService.d.ts +4 -4
  257. package/dist/internal/upload/cryptoService.js +4 -4
  258. package/dist/internal/upload/cryptoService.js.map +1 -1
  259. package/dist/internal/upload/digests.js.map +1 -1
  260. package/dist/internal/upload/fileUploader.d.ts +6 -6
  261. package/dist/internal/upload/fileUploader.js.map +1 -1
  262. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  263. package/dist/internal/upload/index.d.ts +5 -5
  264. package/dist/internal/upload/index.js.map +1 -1
  265. package/dist/internal/upload/interface.d.ts +4 -3
  266. package/dist/internal/upload/manager.d.ts +5 -5
  267. package/dist/internal/upload/manager.js +15 -9
  268. package/dist/internal/upload/manager.js.map +1 -1
  269. package/dist/internal/upload/manager.test.js +139 -128
  270. package/dist/internal/upload/manager.test.js.map +1 -1
  271. package/dist/internal/upload/streamUploader.d.ts +6 -6
  272. package/dist/internal/upload/streamUploader.js +9 -7
  273. package/dist/internal/upload/streamUploader.js.map +1 -1
  274. package/dist/internal/upload/streamUploader.test.js +17 -12
  275. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  276. package/dist/internal/upload/telemetry.d.ts +3 -3
  277. package/dist/internal/upload/telemetry.js +5 -3
  278. package/dist/internal/upload/telemetry.js.map +1 -1
  279. package/dist/internal/upload/telemetry.test.js +8 -8
  280. package/dist/internal/upload/telemetry.test.js.map +1 -1
  281. package/dist/protonDriveClient.d.ts +8 -8
  282. package/dist/protonDriveClient.js +12 -9
  283. package/dist/protonDriveClient.js.map +1 -1
  284. package/dist/protonDrivePhotosClient.js.map +1 -1
  285. package/dist/telemetry.js +18 -15
  286. package/dist/telemetry.js.map +1 -1
  287. package/dist/tests/logger.js.map +1 -1
  288. package/dist/tests/telemetry.d.ts +1 -1
  289. package/dist/transformers.d.ts +1 -1
  290. package/dist/transformers.js +5 -2
  291. package/dist/transformers.js.map +1 -1
  292. package/package.json +1 -1
  293. package/src/cache/interface.ts +22 -22
  294. package/src/cache/memoryCache.test.ts +7 -7
  295. package/src/cache/memoryCache.ts +4 -4
  296. package/src/cache/nullCache.ts +1 -1
  297. package/src/config.ts +5 -5
  298. package/src/crypto/driveCrypto.test.ts +15 -15
  299. package/src/crypto/driveCrypto.ts +120 -156
  300. package/src/crypto/hmac.ts +1 -1
  301. package/src/crypto/interface.ts +63 -72
  302. package/src/crypto/openPGPCrypto.ts +74 -94
  303. package/src/crypto/utils.ts +1 -1
  304. package/src/diagnostic/eventsGenerator.ts +2 -2
  305. package/src/diagnostic/httpClient.ts +6 -2
  306. package/src/diagnostic/index.ts +12 -10
  307. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  308. package/src/diagnostic/interface.ts +81 -81
  309. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  310. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  311. package/src/diagnostic/telemetry.ts +4 -1
  312. package/src/diagnostic/zipGenerators.test.ts +1 -1
  313. package/src/diagnostic/zipGenerators.ts +3 -3
  314. package/src/errors.ts +21 -21
  315. package/src/index.ts +3 -3
  316. package/src/interface/account.ts +10 -10
  317. package/src/interface/author.ts +6 -6
  318. package/src/interface/config.ts +4 -4
  319. package/src/interface/devices.ts +6 -6
  320. package/src/interface/download.ts +12 -9
  321. package/src/interface/events.ts +45 -39
  322. package/src/interface/httpClient.ts +11 -11
  323. package/src/interface/index.ts +76 -19
  324. package/src/interface/nodes.ts +47 -49
  325. package/src/interface/result.ts +1 -3
  326. package/src/interface/sharing.ts +60 -57
  327. package/src/interface/telemetry.ts +74 -74
  328. package/src/interface/thumbnail.ts +5 -6
  329. package/src/interface/upload.ts +20 -12
  330. package/src/internal/apiService/apiService.test.ts +109 -76
  331. package/src/internal/apiService/apiService.ts +40 -26
  332. package/src/internal/apiService/coreTypes.ts +2474 -2463
  333. package/src/internal/apiService/driveTypes.ts +1868 -1822
  334. package/src/internal/apiService/errorCodes.ts +4 -4
  335. package/src/internal/apiService/errors.test.ts +25 -23
  336. package/src/internal/apiService/errors.ts +15 -9
  337. package/src/internal/apiService/index.ts +1 -1
  338. package/src/internal/apiService/transformers.ts +2 -2
  339. package/src/internal/asyncIteratorMap.test.ts +4 -4
  340. package/src/internal/asyncIteratorMap.ts +1 -1
  341. package/src/internal/asyncIteratorRace.test.ts +149 -0
  342. package/src/internal/asyncIteratorRace.ts +79 -0
  343. package/src/internal/batch.test.ts +50 -0
  344. package/src/internal/batch.ts +9 -0
  345. package/src/internal/batchLoading.test.ts +13 -14
  346. package/src/internal/batchLoading.ts +8 -8
  347. package/src/internal/devices/apiService.ts +58 -51
  348. package/src/internal/devices/cryptoService.ts +22 -17
  349. package/src/internal/devices/index.ts +17 -10
  350. package/src/internal/devices/interface.ts +21 -12
  351. package/src/internal/devices/manager.test.ts +40 -9
  352. package/src/internal/devices/manager.ts +3 -3
  353. package/src/internal/download/apiService.ts +66 -49
  354. package/src/internal/download/cryptoService.ts +34 -18
  355. package/src/internal/download/fileDownloader.test.ts +25 -9
  356. package/src/internal/download/fileDownloader.ts +36 -18
  357. package/src/internal/download/index.ts +19 -19
  358. package/src/internal/download/interface.ts +19 -20
  359. package/src/internal/download/queue.ts +3 -3
  360. package/src/internal/download/telemetry.test.ts +11 -11
  361. package/src/internal/download/telemetry.ts +24 -14
  362. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  363. package/src/internal/download/thumbnailDownloader.ts +43 -32
  364. package/src/internal/errors.ts +7 -5
  365. package/src/internal/events/apiService.ts +30 -17
  366. package/src/internal/events/coreEventManager.test.ts +18 -18
  367. package/src/internal/events/coreEventManager.ts +9 -6
  368. package/src/internal/events/eventManager.test.ts +108 -82
  369. package/src/internal/events/eventManager.ts +16 -5
  370. package/src/internal/events/index.ts +75 -47
  371. package/src/internal/events/interface.ts +47 -39
  372. package/src/internal/events/volumeEventManager.test.ts +61 -65
  373. package/src/internal/events/volumeEventManager.ts +18 -9
  374. package/src/internal/nodes/apiService.test.ts +197 -147
  375. package/src/internal/nodes/apiService.ts +288 -174
  376. package/src/internal/nodes/cache.test.ts +48 -20
  377. package/src/internal/nodes/cache.ts +60 -44
  378. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  379. package/src/internal/nodes/cryptoCache.ts +10 -5
  380. package/src/internal/nodes/cryptoService.test.ts +492 -351
  381. package/src/internal/nodes/cryptoService.ts +170 -88
  382. package/src/internal/nodes/events.test.ts +38 -28
  383. package/src/internal/nodes/events.ts +13 -12
  384. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  385. package/src/internal/nodes/extendedAttributes.ts +20 -15
  386. package/src/internal/nodes/index.test.ts +133 -0
  387. package/src/internal/nodes/index.ts +27 -15
  388. package/src/internal/nodes/interface.ts +42 -29
  389. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  390. package/src/internal/nodes/nodesAccess.ts +73 -49
  391. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  392. package/src/internal/nodes/nodesManagement.ts +39 -32
  393. package/src/internal/nodes/nodesRevisions.ts +7 -7
  394. package/src/internal/nodes/validations.ts +2 -2
  395. package/src/internal/photos/albums.ts +5 -5
  396. package/src/internal/photos/apiService.ts +4 -7
  397. package/src/internal/photos/cache.ts +1 -1
  398. package/src/internal/photos/index.ts +8 -8
  399. package/src/internal/photos/interface.ts +2 -2
  400. package/src/internal/photos/photosTimeline.ts +4 -5
  401. package/src/internal/sdkEvents.test.ts +10 -10
  402. package/src/internal/sdkEvents.ts +5 -13
  403. package/src/internal/shares/apiService.ts +44 -33
  404. package/src/internal/shares/cache.test.ts +6 -4
  405. package/src/internal/shares/cache.ts +21 -12
  406. package/src/internal/shares/cryptoCache.test.ts +17 -11
  407. package/src/internal/shares/cryptoCache.ts +4 -4
  408. package/src/internal/shares/cryptoService.test.ts +72 -74
  409. package/src/internal/shares/cryptoService.ts +48 -23
  410. package/src/internal/shares/index.ts +23 -11
  411. package/src/internal/shares/interface.ts +8 -8
  412. package/src/internal/shares/manager.test.ts +88 -80
  413. package/src/internal/shares/manager.ts +19 -19
  414. package/src/internal/sharing/apiService.ts +282 -175
  415. package/src/internal/sharing/cache.test.ts +35 -35
  416. package/src/internal/sharing/cache.ts +11 -2
  417. package/src/internal/sharing/cryptoService.test.ts +58 -46
  418. package/src/internal/sharing/cryptoService.ts +121 -84
  419. package/src/internal/sharing/events.test.ts +113 -102
  420. package/src/internal/sharing/events.ts +42 -24
  421. package/src/internal/sharing/index.ts +22 -11
  422. package/src/internal/sharing/interface.ts +40 -40
  423. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  424. package/src/internal/sharing/sharingAccess.ts +39 -21
  425. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  426. package/src/internal/sharing/sharingManagement.ts +138 -65
  427. package/src/internal/uids.ts +1 -1
  428. package/src/internal/upload/apiService.ts +167 -117
  429. package/src/internal/upload/blockVerifier.ts +8 -6
  430. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  431. package/src/internal/upload/cryptoService.ts +42 -36
  432. package/src/internal/upload/digests.ts +2 -2
  433. package/src/internal/upload/fileUploader.test.ts +15 -3
  434. package/src/internal/upload/fileUploader.ts +39 -17
  435. package/src/internal/upload/index.ts +13 -14
  436. package/src/internal/upload/interface.ts +79 -78
  437. package/src/internal/upload/manager.test.ts +170 -156
  438. package/src/internal/upload/manager.ts +66 -39
  439. package/src/internal/upload/queue.ts +3 -3
  440. package/src/internal/upload/streamUploader.test.ts +40 -26
  441. package/src/internal/upload/streamUploader.ts +87 -69
  442. package/src/internal/upload/telemetry.test.ts +11 -11
  443. package/src/internal/upload/telemetry.ts +25 -15
  444. package/src/internal/wait.test.ts +1 -1
  445. package/src/internal/wait.ts +3 -3
  446. package/src/protonDriveClient.ts +121 -39
  447. package/src/protonDrivePhotosClient.ts +16 -10
  448. package/src/telemetry.ts +60 -52
  449. package/src/tests/logger.ts +1 -1
  450. package/src/tests/telemetry.ts +2 -2
  451. package/src/transformers.ts +29 -21
  452. package/src/version.ts +0 -1
@@ -1,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
@@ -27,26 +30,41 @@ export class SharingEventHandler {
27
30
  await this.cache.setSharedWithMeNodeUids(undefined);
28
31
  return;
29
32
  }
30
- if (!(await this.shares.isOwnVolume(event.treeEventScopeId))) {
31
- return;
32
- }
33
- if (event.type === DriveEventType.NodeCreated || event.type == DriveEventType.NodeUpdated) {
34
- if (event.isShared && !event.isTrashed) {
35
- await this.cache.addSharedByMeNodeUid(event.nodeUid);
36
- } else {
37
- await this.cache.removeSharedByMeNodeUid(event.nodeUid);
38
- }
39
- return;
40
- }
41
- if (event.type === DriveEventType.NodeDeleted) {
42
- await this.cache.removeSharedByMeNodeUid(event.nodeUid);
43
- return;
44
- }
45
- if (event.type === DriveEventType.TreeRefresh || event.type === DriveEventType.TreeRemove) {
46
- await this.cache.setSharedWithMeNodeUids(undefined);
47
- }
33
+ await this.handleSharedByMeNodeUidsLoaded(event);
48
34
  } catch (error: unknown) {
49
35
  this.logger.error(`Skipping shared by me node cache update`, error);
50
36
  }
51
37
  }
38
+
39
+ private async handleSharedByMeNodeUidsLoaded(event: DriveEvent) {
40
+ if (event.type === DriveEventType.TreeRefresh || event.type === DriveEventType.TreeRemove) {
41
+ await this.cache.setSharedWithMeNodeUids(undefined);
42
+ return;
43
+ }
44
+
45
+ if (![DriveEventType.NodeCreated, DriveEventType.NodeUpdated, DriveEventType.NodeDeleted].includes(event.type)) {
46
+ return;
47
+ }
48
+
49
+ const hasSharedByMeLoaded = await this.cache.hasSharedByMeNodeUidsLoaded();
50
+ if (!hasSharedByMeLoaded) {
51
+ return;
52
+ }
53
+
54
+ const isOwnVolume = await this.shares.isOwnVolume(event.treeEventScopeId);
55
+ if (!isOwnVolume) {
56
+ return;
57
+ }
58
+
59
+ if (event.type === DriveEventType.NodeCreated || event.type == DriveEventType.NodeUpdated) {
60
+ if (event.isShared && !event.isTrashed) {
61
+ await this.cache.addSharedByMeNodeUid(event.nodeUid);
62
+ } else {
63
+ await this.cache.removeSharedByMeNodeUid(event.nodeUid);
64
+ }
65
+ }
66
+ if (event.type === DriveEventType.NodeDeleted) {
67
+ await this.cache.removeSharedByMeNodeUid(event.nodeUid);
68
+ }
69
+ }
52
70
  }
@@ -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,
@@ -1,7 +1,7 @@
1
- import { NodeType, MemberRole, NonProtonInvitationState, MissingNode, ShareResult, PublicLink } from "../../interface";
2
- import { PrivateKey, SessionKey } from "../../crypto";
3
- import { EncryptedShare } from "../shares";
4
- import { DecryptedNode } from "../nodes";
1
+ import { NodeType, MemberRole, NonProtonInvitationState, MissingNode, ShareResult, PublicLink } from '../../interface';
2
+ import { PrivateKey, SessionKey } from '../../crypto';
3
+ import { EncryptedShare } from '../shares';
4
+ import { DecryptedNode } from '../nodes';
5
5
 
6
6
  export enum SharingType {
7
7
  SharedByMe = 'sharedByMe',
@@ -43,10 +43,11 @@ export interface EncryptedInvitationWithNode extends EncryptedInvitation {
43
43
  creatorEmail: string;
44
44
  };
45
45
  node: {
46
+ uid: string;
46
47
  type: NodeType;
47
48
  mediaType?: string;
48
49
  encryptedName: string;
49
- }
50
+ };
50
51
  }
51
52
 
52
53
  /**
@@ -109,24 +110,24 @@ export interface EncryptedBookmark {
109
110
  }
110
111
 
111
112
  export interface EncryptedPublicLink {
112
- uid: string,
113
- creationTime: Date,
114
- expirationTime?: Date,
115
- role: MemberRole,
116
- flags: number,
117
- creatorEmail: string,
118
- publicUrl: string,
113
+ uid: string;
114
+ creationTime: Date;
115
+ expirationTime?: Date;
116
+ role: MemberRole;
117
+ flags: number;
118
+ creatorEmail: string;
119
+ publicUrl: string;
119
120
  numberOfInitializedDownloads: number;
120
- armoredUrlPassword: string,
121
- urlPasswordSalt: string,
122
- base64SharePassphraseKeyPacket: string,
123
- sharePassphraseSalt: string,
121
+ armoredUrlPassword: string;
122
+ urlPasswordSalt: string;
123
+ base64SharePassphraseKeyPacket: string;
124
+ sharePassphraseSalt: string;
124
125
  }
125
126
 
126
127
  export interface EncryptedPublicLinkCrypto {
127
- base64SharePasswordSalt: string,
128
- base64SharePassphraseKeyPacket: string,
129
- armoredPassword: string,
128
+ base64SharePasswordSalt: string;
129
+ base64SharePassphraseKeyPacket: string;
130
+ armoredPassword: string;
130
131
  }
131
132
 
132
133
  export interface ShareResultWithCreatorEmail extends ShareResult {
@@ -137,22 +138,21 @@ export interface PublicLinkWithCreatorEmail extends PublicLink {
137
138
  creatorEmail: string;
138
139
  }
139
140
 
140
-
141
141
  /**
142
142
  * Interface describing the dependencies to the shares module.
143
143
  */
144
144
  export interface SharesService {
145
- getMyFilesIDs(): Promise<{ volumeId: string }>,
146
- loadEncryptedShare(shareId: string): Promise<EncryptedShare>,
145
+ getMyFilesIDs(): Promise<{ volumeId: string }>;
146
+ loadEncryptedShare(shareId: string): Promise<EncryptedShare>;
147
147
  getMyFilesShareMemberEmailKey(): Promise<{
148
- addressId: string,
149
- addressKey: PrivateKey,
150
- }>,
148
+ addressId: string;
149
+ addressKey: PrivateKey;
150
+ }>;
151
151
  getContextShareMemberEmailKey(shareId: string): Promise<{
152
- email: string,
153
- addressId: string,
154
- addressKey: PrivateKey,
155
- }>,
152
+ email: string;
153
+ addressId: string;
154
+ addressKey: PrivateKey;
155
+ }>;
156
156
  isOwnVolume(volumeId: string): Promise<boolean>;
157
157
  }
158
158
 
@@ -160,18 +160,18 @@ export interface SharesService {
160
160
  * Interface describing the dependencies to the nodes module.
161
161
  */
162
162
  export interface NodesService {
163
- getNode(nodeUid: string): Promise<DecryptedNode>,
164
- getNodeKeys(nodeUid: string): Promise<{ key: PrivateKey }>,
163
+ getNode(nodeUid: string): Promise<DecryptedNode>;
164
+ getNodeKeys(nodeUid: string): Promise<{ key: PrivateKey }>;
165
165
  getNodePrivateAndSessionKeys(nodeUid: string): Promise<{
166
- key: PrivateKey,
167
- passphraseSessionKey: SessionKey,
168
- nameSessionKey: SessionKey,
169
- }>,
166
+ key: PrivateKey;
167
+ passphraseSessionKey: SessionKey;
168
+ nameSessionKey: SessionKey;
169
+ }>;
170
170
  getRootNodeEmailKey(nodeUid: string): Promise<{
171
- email: string,
172
- addressId: string,
173
- addressKey: PrivateKey,
174
- }>,
171
+ email: string;
172
+ addressId: string;
173
+ addressKey: PrivateKey;
174
+ }>;
175
175
  iterateNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode>;
176
176
  notifyNodeChanged(nodeUid: string): Promise<void>;
177
177
  }
@@ -181,5 +181,5 @@ export interface NodesService {
181
181
  * Interface describing the dependencies to the nodes module.
182
182
  */
183
183
  export interface NodesEvents {
184
- nodeUpdated(partialNode: { uid: string, shareId: string | undefined, isShared: boolean }): Promise<void>,
184
+ nodeUpdated(partialNode: { uid: string; shareId: string | undefined; isShared: boolean }): Promise<void>;
185
185
  }
@@ -1,11 +1,11 @@
1
- import { NodeType, resultError, resultOk } from "../../interface";
2
- import { SharingAPIService } from "./apiService";
3
- import { SharingCache } from "./cache";
4
- import { SharingCryptoService } from "./cryptoService";
5
- import { SharesService, NodesService } from "./interface";
6
- import { SharingAccess } from "./sharingAccess";
7
-
8
- describe("SharingAccess", () => {
1
+ import { NodeType, resultError, resultOk } from '../../interface';
2
+ import { SharingAPIService } from './apiService';
3
+ import { SharingCache } from './cache';
4
+ import { SharingCryptoService } from './cryptoService';
5
+ import { SharesService, NodesService } from './interface';
6
+ import { SharingAccess } from './sharingAccess';
7
+
8
+ describe('SharingAccess', () => {
9
9
  let apiService: SharingAPIService;
10
10
  let cache: SharingCache;
11
11
  let cryptoService: SharingCryptoService;
@@ -20,7 +20,7 @@ describe("SharingAccess", () => {
20
20
  for (const nodeUid of nodeUids) {
21
21
  yield nodeUid;
22
22
  }
23
- }
23
+ };
24
24
 
25
25
  beforeEach(() => {
26
26
  // @ts-expect-error No need to implement all methods for mocking
@@ -29,29 +29,29 @@ describe("SharingAccess", () => {
29
29
  iterateSharedWithMeNodeUids: jest.fn().mockImplementation(() => nodeUidsIterator()),
30
30
  iterateBookmarks: jest.fn().mockImplementation(async function* () {
31
31
  yield {
32
- tokenId: "tokenId",
32
+ tokenId: 'tokenId',
33
33
  creationTime: new Date('2025-01-01'),
34
34
  node: {
35
35
  type: NodeType.File,
36
- mediaType: "mediaType",
36
+ mediaType: 'mediaType',
37
37
  },
38
- }
38
+ };
39
39
  }),
40
- }
40
+ };
41
41
  // @ts-expect-error No need to implement all methods for mocking
42
42
  cache = {
43
43
  setSharedByMeNodeUids: jest.fn(),
44
44
  setSharedWithMeNodeUids: jest.fn(),
45
- }
45
+ };
46
46
  // @ts-expect-error No need to implement all methods for mocking
47
47
  cryptoService = {
48
48
  decryptInvitation: jest.fn(),
49
49
  decryptBookmark: jest.fn(),
50
- }
50
+ };
51
51
  // @ts-expect-error No need to implement all methods for mocking
52
52
  sharesService = {
53
- getMyFilesIDs: jest.fn().mockResolvedValue({ volumeId: "volumeId" }),
54
- }
53
+ getMyFilesIDs: jest.fn().mockResolvedValue({ volumeId: 'volumeId' }),
54
+ };
55
55
  // @ts-expect-error No need to implement all methods for mocking
56
56
  nodesService = {
57
57
  iterateNodes: jest.fn().mockImplementation(async function* (nodeUids) {
@@ -61,13 +61,13 @@ describe("SharingAccess", () => {
61
61
  }
62
62
  }
63
63
  }),
64
- }
64
+ };
65
65
 
66
66
  sharingAccess = new SharingAccess(apiService, cache, cryptoService, sharesService, nodesService);
67
67
  });
68
68
 
69
- describe("iterateSharedNodes", () => {
70
- it("should iterate from cache", async () => {
69
+ describe('iterateSharedNodes', () => {
70
+ it('should iterate from cache', async () => {
71
71
  cache.getSharedByMeNodeUids = jest.fn().mockResolvedValue(nodeUids);
72
72
 
73
73
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodes());
@@ -77,20 +77,20 @@ describe("SharingAccess", () => {
77
77
  expect(cache.setSharedByMeNodeUids).not.toHaveBeenCalled();
78
78
  });
79
79
 
80
- it("should iterate from API", async () => {
80
+ it('should iterate from API', async () => {
81
81
  cache.getSharedByMeNodeUids = jest.fn().mockRejectedValue(new Error('Not cached'));
82
82
 
83
83
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodes());
84
84
 
85
85
  expect(result).toEqual(nodes);
86
- expect(apiService.iterateSharedNodeUids).toHaveBeenCalledWith("volumeId", undefined);
86
+ expect(apiService.iterateSharedNodeUids).toHaveBeenCalledWith('volumeId', undefined);
87
87
  expect(nodesService.iterateNodes).toHaveBeenCalledTimes(2); // 15 / 10 per batch
88
88
  expect(cache.setSharedByMeNodeUids).toHaveBeenCalledWith(nodeUids);
89
89
  });
90
90
  });
91
91
 
92
- describe("iterateSharedNodesWithMe", () => {
93
- it("should iterate from cache", async () => {
92
+ describe('iterateSharedNodesWithMe', () => {
93
+ it('should iterate from cache', async () => {
94
94
  cache.getSharedWithMeNodeUids = jest.fn().mockResolvedValue(nodeUids);
95
95
 
96
96
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodesWithMe());
@@ -100,7 +100,7 @@ describe("SharingAccess", () => {
100
100
  expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
101
101
  });
102
102
 
103
- it("should iterate from API", async () => {
103
+ it('should iterate from API', async () => {
104
104
  cache.getSharedWithMeNodeUids = jest.fn().mockRejectedValue(new Error('Not cached'));
105
105
 
106
106
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodesWithMe());
@@ -112,65 +112,71 @@ describe("SharingAccess", () => {
112
112
  });
113
113
  });
114
114
 
115
- describe("iterateBookmarks", () => {
116
- it("should return decrypted bookmark", async () => {
115
+ describe('iterateBookmarks', () => {
116
+ it('should return decrypted bookmark', async () => {
117
117
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
118
- url: resultOk("url"),
119
- nodeName: resultOk("nodeName"),
118
+ url: resultOk('url'),
119
+ nodeName: resultOk('nodeName'),
120
120
  });
121
121
 
122
122
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
123
123
 
124
- expect(result).toEqual([resultOk({
125
- uid: "tokenId",
126
- creationTime: new Date('2025-01-01'),
127
- url: "url",
128
- node: {
129
- name: "nodeName",
130
- type: NodeType.File,
131
- mediaType: "mediaType",
132
- },
133
- })]);
124
+ expect(result).toEqual([
125
+ resultOk({
126
+ uid: 'tokenId',
127
+ creationTime: new Date('2025-01-01'),
128
+ url: 'url',
129
+ node: {
130
+ name: 'nodeName',
131
+ type: NodeType.File,
132
+ mediaType: 'mediaType',
133
+ },
134
+ }),
135
+ ]);
134
136
  });
135
137
 
136
- it("should return degraded bookmark if URL password cannot be decrypted", async () => {
138
+ it('should return degraded bookmark if URL password cannot be decrypted', async () => {
137
139
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
138
- url: resultError("url cannot be decrypted"),
139
- nodeName: resultError("url cannot be decrypted"),
140
+ url: resultError('url cannot be decrypted'),
141
+ nodeName: resultError('url cannot be decrypted'),
140
142
  });
141
143
 
142
144
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
143
145
 
144
- expect(result).toEqual([resultError({
145
- uid: "tokenId",
146
- creationTime: new Date('2025-01-01'),
147
- url: resultError("url cannot be decrypted"),
148
- node: {
149
- name: resultError("url cannot be decrypted"),
150
- type: NodeType.File,
151
- mediaType: "mediaType",
152
- },
153
- })]);
146
+ expect(result).toEqual([
147
+ resultError({
148
+ uid: 'tokenId',
149
+ creationTime: new Date('2025-01-01'),
150
+ url: resultError('url cannot be decrypted'),
151
+ node: {
152
+ name: resultError('url cannot be decrypted'),
153
+ type: NodeType.File,
154
+ mediaType: 'mediaType',
155
+ },
156
+ }),
157
+ ]);
154
158
  });
155
159
 
156
- it("should return degraded bookmark if node name cannot be decrypted", async () => {
160
+ it('should return degraded bookmark if node name cannot be decrypted', async () => {
157
161
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
158
- url: resultOk("url"),
159
- nodeName: resultError("node name cannot be decrypted"),
162
+ url: resultOk('url'),
163
+ nodeName: resultError('node name cannot be decrypted'),
160
164
  });
161
165
 
162
166
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
163
167
 
164
- expect(result).toEqual([resultError({
165
- uid: "tokenId",
166
- creationTime: new Date('2025-01-01'),
167
- url: resultOk("url"),
168
- node: {
169
- name: resultError("node name cannot be decrypted"),
170
- type: NodeType.File,
171
- mediaType: "mediaType",
172
- },
173
- })]);
168
+ expect(result).toEqual([
169
+ resultError({
170
+ uid: 'tokenId',
171
+ creationTime: new Date('2025-01-01'),
172
+ url: resultOk('url'),
173
+ node: {
174
+ name: resultError('node name cannot be decrypted'),
175
+ type: NodeType.File,
176
+ mediaType: 'mediaType',
177
+ },
178
+ }),
179
+ ]);
174
180
  });
175
181
  });
176
182
  });
@@ -1,13 +1,13 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { MaybeBookmark, ProtonInvitationWithNode, resultError, resultOk } from "../../interface";
4
- import { ValidationError } from "../../errors";
5
- import { DecryptedNode } from "../nodes";
6
- import { BatchLoading } from "../batchLoading";
7
- import { SharingAPIService } from "./apiService";
8
- import { SharingCache } from "./cache";
9
- import { SharingCryptoService } from "./cryptoService";
10
- import { SharesService, NodesService } from "./interface";
3
+ import { MaybeBookmark, ProtonInvitationWithNode, resultError, resultOk } from '../../interface';
4
+ import { ValidationError } from '../../errors';
5
+ import { DecryptedNode } from '../nodes';
6
+ import { BatchLoading } from '../batchLoading';
7
+ import { SharingAPIService } from './apiService';
8
+ import { SharingCache } from './cache';
9
+ import { SharingCryptoService } from './cryptoService';
10
+ import { SharesService, NodesService } from './interface';
11
11
 
12
12
  /**
13
13
  * Provides high-level actions for access shared nodes.
@@ -31,42 +31,57 @@ export class SharingAccess {
31
31
  this.nodesService = nodesService;
32
32
  }
33
33
 
34
- async* iterateSharedNodes(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
34
+ async *iterateSharedNodes(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
35
35
  try {
36
36
  const nodeUids = await this.cache.getSharedByMeNodeUids();
37
37
  yield* this.iterateSharedNodesFromCache(nodeUids, signal);
38
38
  } catch {
39
39
  const { volumeId } = await this.sharesService.getMyFilesIDs();
40
40
  const nodeUidsIterator = this.apiService.iterateSharedNodeUids(volumeId, signal);
41
- yield* this.iterateSharedNodesFromAPI(nodeUidsIterator, (nodeUids) => this.cache.setSharedByMeNodeUids(nodeUids), signal);
41
+ yield* this.iterateSharedNodesFromAPI(
42
+ nodeUidsIterator,
43
+ (nodeUids) => this.cache.setSharedByMeNodeUids(nodeUids),
44
+ signal,
45
+ );
42
46
  }
43
47
  }
44
48
 
45
- async* iterateSharedNodesWithMe(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
49
+ async *iterateSharedNodesWithMe(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
46
50
  try {
47
51
  const nodeUids = await this.cache.getSharedWithMeNodeUids();
48
52
  yield* this.iterateSharedNodesFromCache(nodeUids, signal);
49
53
  } catch {
50
54
  const nodeUidsIterator = this.apiService.iterateSharedWithMeNodeUids(signal);
51
- yield* this.iterateSharedNodesFromAPI(nodeUidsIterator, (nodeUids) => this.cache.setSharedWithMeNodeUids(nodeUids), signal);
55
+ yield* this.iterateSharedNodesFromAPI(
56
+ nodeUidsIterator,
57
+ (nodeUids) => this.cache.setSharedWithMeNodeUids(nodeUids),
58
+ signal,
59
+ );
52
60
  }
53
61
  }
54
62
 
55
- private async* iterateSharedNodesFromCache(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
56
- const batchLoading = new BatchLoading<string, DecryptedNode>({ iterateItems: (nodeUids) => this.iterateNodesAndIgnoreMissingOnes(nodeUids, signal) });
63
+ private async *iterateSharedNodesFromCache(
64
+ nodeUids: string[],
65
+ signal?: AbortSignal,
66
+ ): AsyncGenerator<DecryptedNode> {
67
+ const batchLoading = new BatchLoading<string, DecryptedNode>({
68
+ iterateItems: (nodeUids) => this.iterateNodesAndIgnoreMissingOnes(nodeUids, signal),
69
+ });
57
70
  for (const nodeUid of nodeUids) {
58
71
  yield* batchLoading.load(nodeUid);
59
72
  }
60
73
  yield* batchLoading.loadRest();
61
74
  }
62
75
 
63
- private async* iterateSharedNodesFromAPI(
76
+ private async *iterateSharedNodesFromAPI(
64
77
  nodeUidsIterator: AsyncGenerator<string>,
65
78
  setCache: (nodeUids: string[]) => Promise<void>,
66
79
  signal?: AbortSignal,
67
80
  ): AsyncGenerator<DecryptedNode> {
68
81
  const loadedNodeUids = [];
69
- const batchLoading = new BatchLoading<string, DecryptedNode>({ iterateItems: (nodeUids) => this.iterateNodesAndIgnoreMissingOnes(nodeUids, signal) });
82
+ const batchLoading = new BatchLoading<string, DecryptedNode>({
83
+ iterateItems: (nodeUids) => this.iterateNodesAndIgnoreMissingOnes(nodeUids, signal),
84
+ });
70
85
  for await (const nodeUid of nodeUidsIterator) {
71
86
  loadedNodeUids.push(nodeUid);
72
87
  yield* batchLoading.load(nodeUid);
@@ -77,7 +92,10 @@ export class SharingAccess {
77
92
  await setCache(loadedNodeUids);
78
93
  }
79
94
 
80
- private async* iterateNodesAndIgnoreMissingOnes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
95
+ private async *iterateNodesAndIgnoreMissingOnes(
96
+ nodeUids: string[],
97
+ signal?: AbortSignal,
98
+ ): AsyncGenerator<DecryptedNode> {
81
99
  const nodeGenerator = this.nodesService.iterateNodes(nodeUids, signal);
82
100
  for await (const node of nodeGenerator) {
83
101
  if ('missingUid' in node) {
@@ -102,7 +120,7 @@ export class SharingAccess {
102
120
  await this.apiService.removeMember(memberUid);
103
121
  }
104
122
 
105
- async* iterateInvitations(signal?: AbortSignal): AsyncGenerator<ProtonInvitationWithNode> {
123
+ async *iterateInvitations(signal?: AbortSignal): AsyncGenerator<ProtonInvitationWithNode> {
106
124
  for await (const invitationUid of this.apiService.iterateInvitationUids(signal)) {
107
125
  const encryptedInvitation = await this.apiService.getInvitation(invitationUid);
108
126
  const invitation = await this.cryptoService.decryptInvitationWithNode(encryptedInvitation);
@@ -120,7 +138,7 @@ export class SharingAccess {
120
138
  await this.apiService.rejectInvitation(invitationUid);
121
139
  }
122
140
 
123
- async* iterateBookmarks(signal?: AbortSignal): AsyncGenerator<MaybeBookmark> {
141
+ async *iterateBookmarks(signal?: AbortSignal): AsyncGenerator<MaybeBookmark> {
124
142
  for await (const bookmark of this.apiService.iterateBookmarks(signal)) {
125
143
  const { url, nodeName } = await this.cryptoService.decryptBookmark(bookmark);
126
144
 
@@ -133,7 +151,7 @@ export class SharingAccess {
133
151
  name: nodeName,
134
152
  type: bookmark.node.type,
135
153
  mediaType: bookmark.node.mediaType,
136
- }
154
+ },
137
155
  });
138
156
  } else {
139
157
  yield resultOk({
@@ -144,7 +162,7 @@ export class SharingAccess {
144
162
  name: nodeName.value,
145
163
  type: bookmark.node.type,
146
164
  mediaType: bookmark.node.mediaType,
147
- }
165
+ },
148
166
  });
149
167
  }
150
168
  }