@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,15 +1,35 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { DriveCrypto, PrivateKey, PublicKey, SessionKey, VERIFICATION_STATUS } from "../../crypto";
4
- import { resultOk, resultError, Result, Author, AnonymousUser, ProtonDriveAccount, ProtonDriveTelemetry, Logger, MetricsDecryptionErrorField, MetricVerificationErrorField } from "../../interface";
3
+ import { DriveCrypto, PrivateKey, PublicKey, SessionKey, VERIFICATION_STATUS } from '../../crypto';
4
+ import {
5
+ resultOk,
6
+ resultError,
7
+ Result,
8
+ Author,
9
+ AnonymousUser,
10
+ ProtonDriveAccount,
11
+ ProtonDriveTelemetry,
12
+ Logger,
13
+ MetricsDecryptionErrorField,
14
+ MetricVerificationErrorField,
15
+ } from '../../interface';
5
16
  import { ValidationError } from '../../errors';
6
- import { getErrorMessage, getVerificationMessage } from "../errors";
7
- import { splitNodeUid } from "../uids";
8
- import { EncryptedNode, EncryptedNodeFolderCrypto, DecryptedUnparsedNode, DecryptedNode, DecryptedNodeKeys, SharesService, EncryptedRevision, DecryptedUnparsedRevision } from "./interface";
17
+ import { getErrorMessage, getVerificationMessage } from '../errors';
18
+ import { splitNodeUid } from '../uids';
19
+ import {
20
+ EncryptedNode,
21
+ EncryptedNodeFolderCrypto,
22
+ DecryptedUnparsedNode,
23
+ DecryptedNode,
24
+ DecryptedNodeKeys,
25
+ SharesService,
26
+ EncryptedRevision,
27
+ DecryptedUnparsedRevision,
28
+ } from './interface';
9
29
 
10
30
  /**
11
31
  * Provides crypto operations for nodes metadata.
12
- *
32
+ *
13
33
  * The node crypto service is responsible for decrypting and encrypting node
14
34
  * metadata. It should export high-level actions only, such as "decrypt node"
15
35
  * instead of low-level operations like "decrypt node key". Low-level operations
@@ -36,11 +56,14 @@ export class NodesCryptoService {
36
56
  this.shareService = shareService;
37
57
  }
38
58
 
39
- async decryptNode(node: EncryptedNode, parentKey: PrivateKey): Promise<{ node: DecryptedUnparsedNode, keys?: DecryptedNodeKeys }> {
59
+ async decryptNode(
60
+ node: EncryptedNode,
61
+ parentKey: PrivateKey,
62
+ ): Promise<{ node: DecryptedUnparsedNode; keys?: DecryptedNodeKeys }> {
40
63
  const commonNodeMetadata = {
41
64
  ...node,
42
65
  encryptedCrypto: undefined,
43
- }
66
+ };
44
67
 
45
68
  const signatureEmailKeys = node.encryptedCrypto.signatureEmail
46
69
  ? await this.account.getPublicKeys(node.encryptedCrypto.signatureEmail)
@@ -53,9 +76,7 @@ export class NodesCryptoService {
53
76
  const nodeParentKeys = node.parentUid ? [parentKey] : [];
54
77
 
55
78
  // Anonymous uploads (without signature email set) use parent key instead.
56
- const keyVerificationKeys = node.encryptedCrypto.signatureEmail
57
- ? signatureEmailKeys
58
- : nodeParentKeys;
79
+ const keyVerificationKeys = node.encryptedCrypto.signatureEmail ? signatureEmailKeys : nodeParentKeys;
59
80
 
60
81
  let nameVerificationKeys;
61
82
  const nameSignatureEmail = node.encryptedCrypto.nameSignatureEmail;
@@ -89,13 +110,11 @@ export class NodesCryptoService {
89
110
  error: errorMessage,
90
111
  }),
91
112
  nameAuthor,
92
- activeRevision: "file" in node.encryptedCrypto
93
- ? resultError(new Error(errorMessage))
94
- : undefined,
113
+ activeRevision: 'file' in node.encryptedCrypto ? resultError(new Error(errorMessage)) : undefined,
95
114
  folder: undefined,
96
115
  errors: [error],
97
116
  },
98
- }
117
+ };
99
118
  }
100
119
 
101
120
  const errors = [];
@@ -104,7 +123,7 @@ export class NodesCryptoService {
104
123
  let hashKeyAuthor;
105
124
  let folder;
106
125
  let folderExtendedAttributesAuthor;
107
- if ("folder" in node.encryptedCrypto) {
126
+ if ('folder' in node.encryptedCrypto) {
108
127
  try {
109
128
  const hashKeyResult = await this.decryptHashKey(node, key, signatureEmailKeys);
110
129
  hashKey = hashKeyResult.hashKey;
@@ -123,7 +142,7 @@ export class NodesCryptoService {
123
142
  node.encryptedCrypto.folder.armoredExtendedAttributes,
124
143
  key,
125
144
  folderExtendedAttributesVerificationKeys,
126
- node.encryptedCrypto.signatureEmail
145
+ node.encryptedCrypto.signatureEmail,
127
146
  );
128
147
  folder = {
129
148
  extendedAttributes: extendedAttributesResult.extendedAttributes,
@@ -138,9 +157,11 @@ export class NodesCryptoService {
138
157
  let activeRevision: Result<DecryptedUnparsedRevision, Error> | undefined;
139
158
  let contentKeyPacketSessionKey;
140
159
  let contentKeyPacketAuthor;
141
- if ("file" in node.encryptedCrypto) {
160
+ if ('file' in node.encryptedCrypto) {
142
161
  try {
143
- activeRevision = resultOk(await this.decryptRevision(node.uid, node.encryptedCrypto.activeRevision, key));
162
+ activeRevision = resultOk(
163
+ await this.decryptRevision(node.uid, node.encryptedCrypto.activeRevision, key),
164
+ );
144
165
  } catch (error: unknown) {
145
166
  void this.reportDecryptionError(node, 'nodeExtendedAttributes', error);
146
167
  const message = getErrorMessage(error);
@@ -159,13 +180,15 @@ export class NodesCryptoService {
159
180
  );
160
181
 
161
182
  contentKeyPacketSessionKey = keySessionKeyResult.sessionKey;
162
- contentKeyPacketAuthor = keySessionKeyResult.verified && await this.handleClaimedAuthor(
163
- node,
164
- 'nodeContentKey',
165
- c('Property').t`content key`,
166
- keySessionKeyResult.verified,
167
- node.encryptedCrypto.signatureEmail,
168
- );
183
+ contentKeyPacketAuthor =
184
+ keySessionKeyResult.verified &&
185
+ (await this.handleClaimedAuthor(
186
+ node,
187
+ 'nodeContentKey',
188
+ c('Property').t`content key`,
189
+ keySessionKeyResult.verified,
190
+ node.encryptedCrypto.signatureEmail,
191
+ ));
169
192
  } catch (error: unknown) {
170
193
  void this.reportDecryptionError(node, 'nodeContentKey', error);
171
194
  const message = getErrorMessage(error);
@@ -217,11 +240,17 @@ export class NodesCryptoService {
217
240
  hashKey,
218
241
  },
219
242
  };
220
- };
243
+ }
221
244
 
222
- private async decryptKey(node: EncryptedNode, parentKey: PrivateKey, verificationKeys: PublicKey[]): Promise<DecryptedNodeKeys & {
223
- author: Author,
224
- }> {
245
+ private async decryptKey(
246
+ node: EncryptedNode,
247
+ parentKey: PrivateKey,
248
+ verificationKeys: PublicKey[],
249
+ ): Promise<
250
+ DecryptedNodeKeys & {
251
+ author: Author;
252
+ }
253
+ > {
225
254
  const key = await this.driveCrypto.decryptKey(
226
255
  node.encryptedCrypto.armoredKey,
227
256
  node.encryptedCrypto.armoredNodePassphrase,
@@ -234,13 +263,24 @@ export class NodesCryptoService {
234
263
  passphrase: key.passphrase,
235
264
  key: key.key,
236
265
  passphraseSessionKey: key.passphraseSessionKey,
237
- author: await this.handleClaimedAuthor(node, 'nodeKey', c('Property').t`key`, key.verified, node.encryptedCrypto.signatureEmail, verificationKeys.length === 0),
266
+ author: await this.handleClaimedAuthor(
267
+ node,
268
+ 'nodeKey',
269
+ c('Property').t`key`,
270
+ key.verified,
271
+ node.encryptedCrypto.signatureEmail,
272
+ verificationKeys.length === 0,
273
+ ),
238
274
  };
239
- };
275
+ }
240
276
 
241
- private async decryptName(node: EncryptedNode, parentKey: PrivateKey, verificationKeys: PublicKey[]): Promise<{
242
- name: Result<string, Error>,
243
- author: Author,
277
+ private async decryptName(
278
+ node: EncryptedNode,
279
+ parentKey: PrivateKey,
280
+ verificationKeys: PublicKey[],
281
+ ): Promise<{
282
+ name: Result<string, Error>;
283
+ author: Author;
244
284
  }> {
245
285
  const nameSignatureEmail = node.encryptedCrypto.nameSignatureEmail;
246
286
 
@@ -253,8 +293,15 @@ export class NodesCryptoService {
253
293
 
254
294
  return {
255
295
  name: resultOk(name),
256
- author: await this.handleClaimedAuthor(node, 'nodeName', c('Property').t`name`, verified, nameSignatureEmail, verificationKeys.length === 0),
257
- }
296
+ author: await this.handleClaimedAuthor(
297
+ node,
298
+ 'nodeName',
299
+ c('Property').t`name`,
300
+ verified,
301
+ nameSignatureEmail,
302
+ verificationKeys.length === 0,
303
+ ),
304
+ };
258
305
  } catch (error: unknown) {
259
306
  void this.reportDecryptionError(node, 'nodeName', error);
260
307
  const errorMessage = getErrorMessage(error);
@@ -264,19 +311,23 @@ export class NodesCryptoService {
264
311
  claimedAuthor: nameSignatureEmail,
265
312
  error: errorMessage,
266
313
  }),
267
- }
314
+ };
268
315
  }
269
- };
316
+ }
270
317
 
271
318
  async getNameSessionKey(node: { encryptedName: string }, parentKey: PrivateKey): Promise<SessionKey> {
272
319
  return this.driveCrypto.decryptSessionKey(node.encryptedName, parentKey);
273
320
  }
274
321
 
275
- private async decryptHashKey(node: EncryptedNode, nodeKey: PrivateKey, addressKeys: PublicKey[]): Promise<{
276
- hashKey: Uint8Array,
277
- author: Author,
322
+ private async decryptHashKey(
323
+ node: EncryptedNode,
324
+ nodeKey: PrivateKey,
325
+ addressKeys: PublicKey[],
326
+ ): Promise<{
327
+ hashKey: Uint8Array;
328
+ author: Author;
278
329
  }> {
279
- if (!("folder" in node.encryptedCrypto)) {
330
+ if (!('folder' in node.encryptedCrypto)) {
280
331
  // This is developer error.
281
332
  throw new Error('Node is not a folder');
282
333
  }
@@ -289,19 +340,26 @@ export class NodesCryptoService {
289
340
 
290
341
  return {
291
342
  hashKey,
292
- author: await this.handleClaimedAuthor(node, 'nodeHashKey', c('Property').t`hash key`, verified, node.encryptedCrypto.signatureEmail),
293
- }
343
+ author: await this.handleClaimedAuthor(
344
+ node,
345
+ 'nodeHashKey',
346
+ c('Property').t`hash key`,
347
+ verified,
348
+ node.encryptedCrypto.signatureEmail,
349
+ ),
350
+ };
294
351
  }
295
352
 
296
- async decryptRevision(nodeUid: string, encryptedRevision: EncryptedRevision, nodeKey: PrivateKey): Promise<DecryptedUnparsedRevision> {
353
+ async decryptRevision(
354
+ nodeUid: string,
355
+ encryptedRevision: EncryptedRevision,
356
+ nodeKey: PrivateKey,
357
+ ): Promise<DecryptedUnparsedRevision> {
297
358
  const verificationKeys = encryptedRevision.signatureEmail
298
359
  ? await this.account.getPublicKeys(encryptedRevision.signatureEmail)
299
360
  : [nodeKey];
300
361
 
301
- const {
302
- extendedAttributes,
303
- author: contentAuthor,
304
- } = await this.decryptExtendedAttributes(
362
+ const { extendedAttributes, author: contentAuthor } = await this.decryptExtendedAttributes(
305
363
  { uid: nodeUid, creationTime: encryptedRevision.creationTime },
306
364
  encryptedRevision.armoredExtendedAttributes,
307
365
  nodeKey,
@@ -317,23 +375,23 @@ export class NodesCryptoService {
317
375
  contentAuthor,
318
376
  extendedAttributes,
319
377
  thumbnails: encryptedRevision.thumbnails,
320
- }
378
+ };
321
379
  }
322
380
 
323
381
  private async decryptExtendedAttributes(
324
- node: { uid: string, creationTime: Date },
382
+ node: { uid: string; creationTime: Date },
325
383
  encryptedExtendedAttributes: string | undefined,
326
384
  nodeKey: PrivateKey,
327
385
  addressKeys: PublicKey[],
328
386
  signatureEmail?: string,
329
387
  ): Promise<{
330
- extendedAttributes?: string,
331
- author: Author,
388
+ extendedAttributes?: string;
389
+ author: Author;
332
390
  }> {
333
391
  if (!encryptedExtendedAttributes) {
334
392
  return {
335
393
  author: resultOk(signatureEmail) as Author,
336
- }
394
+ };
337
395
  }
338
396
 
339
397
  const { extendedAttributes, verified } = await this.driveCrypto.decryptExtendedAttributes(
@@ -344,25 +402,27 @@ export class NodesCryptoService {
344
402
 
345
403
  return {
346
404
  extendedAttributes,
347
- author: await this.handleClaimedAuthor(node, "nodeExtendedAttributes", c('Property').t`attributes`, verified, signatureEmail),
348
- }
405
+ author: await this.handleClaimedAuthor(
406
+ node,
407
+ 'nodeExtendedAttributes',
408
+ c('Property').t`attributes`,
409
+ verified,
410
+ signatureEmail,
411
+ ),
412
+ };
349
413
  }
350
414
 
351
415
  async createFolder(
352
- parentKeys: { key: PrivateKey, hashKey: Uint8Array },
353
- address: { email: string, addressKey: PrivateKey },
416
+ parentKeys: { key: PrivateKey; hashKey: Uint8Array },
417
+ address: { email: string; addressKey: PrivateKey },
354
418
  name: string,
355
419
  extendedAttributes?: string,
356
420
  ): Promise<{
357
- encryptedCrypto: Required<EncryptedNodeFolderCrypto> & { encryptedName: string, hash: string },
358
- keys: DecryptedNodeKeys,
421
+ encryptedCrypto: Required<EncryptedNodeFolderCrypto> & { encryptedName: string; hash: string };
422
+ keys: DecryptedNodeKeys;
359
423
  }> {
360
424
  const { email, addressKey } = address;
361
- const [
362
- nodeKeys,
363
- { armoredNodeName },
364
- hash,
365
- ] = await Promise.all([
425
+ const [nodeKeys, { armoredNodeName }, hash] = await Promise.all([
366
426
  this.driveCrypto.generateKey([parentKeys.key], addressKey),
367
427
  this.driveCrypto.encryptNodeName(name, undefined, parentKeys.key, addressKey),
368
428
  this.driveCrypto.generateLookupHash(name, parentKeys.hashKey),
@@ -398,18 +458,23 @@ export class NodesCryptoService {
398
458
  }
399
459
 
400
460
  async encryptNewName(
401
- parentKeys: { key: PrivateKey, hashKey?: Uint8Array },
461
+ parentKeys: { key: PrivateKey; hashKey?: Uint8Array },
402
462
  nodeNameSessionKey: SessionKey,
403
- address: { email: string, addressKey: PrivateKey },
463
+ address: { email: string; addressKey: PrivateKey },
404
464
  newName: string,
405
465
  ): Promise<{
406
- signatureEmail: string,
407
- armoredNodeName: string,
408
- hash?: string,
466
+ signatureEmail: string;
467
+ armoredNodeName: string;
468
+ hash?: string;
409
469
  }> {
410
470
  const { email, addressKey } = address;
411
471
 
412
- const { armoredNodeName } = await this.driveCrypto.encryptNodeName(newName, nodeNameSessionKey, parentKeys.key, addressKey);
472
+ const { armoredNodeName } = await this.driveCrypto.encryptNodeName(
473
+ newName,
474
+ nodeNameSessionKey,
475
+ parentKeys.key,
476
+ addressKey,
477
+ );
413
478
 
414
479
  const hash = parentKeys.hashKey
415
480
  ? await this.driveCrypto.generateLookupHash(newName, parentKeys.hashKey)
@@ -419,20 +484,20 @@ export class NodesCryptoService {
419
484
  armoredNodeName,
420
485
  hash,
421
486
  };
422
- };
487
+ }
423
488
 
424
489
  async moveNode(
425
490
  node: Pick<DecryptedNode, 'name'>,
426
- keys: { passphrase: string, passphraseSessionKey: SessionKey, nameSessionKey: SessionKey },
427
- parentKeys: { key: PrivateKey, hashKey: Uint8Array },
428
- address: { email: string, addressKey: PrivateKey },
491
+ keys: { passphrase: string; passphraseSessionKey: SessionKey; nameSessionKey: SessionKey },
492
+ parentKeys: { key: PrivateKey; hashKey: Uint8Array },
493
+ address: { email: string; addressKey: PrivateKey },
429
494
  ): Promise<{
430
- encryptedName: string,
431
- hash: string,
432
- armoredNodePassphrase: string,
433
- armoredNodePassphraseSignature: string,
434
- signatureEmail: string,
435
- nameSignatureEmail: string,
495
+ encryptedName: string;
496
+ hash: string;
497
+ armoredNodePassphrase: string;
498
+ armoredNodePassphraseSignature: string;
499
+ signatureEmail: string;
500
+ nameSignatureEmail: string;
436
501
  }> {
437
502
  if (!parentKeys.hashKey) {
438
503
  throw new ValidationError('Moving item to a non-folder is not allowed');
@@ -442,9 +507,19 @@ export class NodesCryptoService {
442
507
  }
443
508
 
444
509
  const { email, addressKey } = address;
445
- const { armoredNodeName } = await this.driveCrypto.encryptNodeName(node.name.value, keys.nameSessionKey, parentKeys.key, addressKey);
510
+ const { armoredNodeName } = await this.driveCrypto.encryptNodeName(
511
+ node.name.value,
512
+ keys.nameSessionKey,
513
+ parentKeys.key,
514
+ addressKey,
515
+ );
446
516
  const hash = await this.driveCrypto.generateLookupHash(node.name.value, parentKeys.hashKey);
447
- const { armoredPassphrase, armoredPassphraseSignature } = await this.driveCrypto.encryptPassphrase(keys.passphrase, keys.passphraseSessionKey, [parentKeys.key], addressKey);
517
+ const { armoredPassphrase, armoredPassphraseSignature } = await this.driveCrypto.encryptPassphrase(
518
+ keys.passphrase,
519
+ keys.passphraseSessionKey,
520
+ [parentKeys.key],
521
+ addressKey,
522
+ );
448
523
 
449
524
  return {
450
525
  encryptedName: armoredNodeName,
@@ -457,7 +532,7 @@ export class NodesCryptoService {
457
532
  }
458
533
 
459
534
  private async handleClaimedAuthor(
460
- node: { uid: string, creationTime: Date },
535
+ node: { uid: string; creationTime: Date },
461
536
  field: MetricVerificationErrorField,
462
537
  signatureType: string,
463
538
  verified: VERIFICATION_STATUS,
@@ -472,7 +547,7 @@ export class NodesCryptoService {
472
547
  }
473
548
 
474
549
  private async reportVerificationError(
475
- node: { uid: string, creationTime: Date },
550
+ node: { uid: string; creationTime: Date },
476
551
  field: MetricVerificationErrorField,
477
552
  claimedAuthor?: string,
478
553
  ) {
@@ -492,7 +567,9 @@ export class NodesCryptoService {
492
567
  this.logger.error('Failed to check if claimed author matches default share', error);
493
568
  }
494
569
 
495
- this.logger.warn(`Failed to verify ${field} for node ${node.uid} (from before 2024: ${fromBefore2024}, matching address: ${addressMatchingDefaultShare})`);
570
+ this.logger.warn(
571
+ `Failed to verify ${field} for node ${node.uid} (from before 2024: ${fromBefore2024}, matching address: ${addressMatchingDefaultShare})`,
572
+ );
496
573
 
497
574
  this.telemetry.logEvent({
498
575
  eventName: 'verificationError',
@@ -535,7 +612,12 @@ export class NodesCryptoService {
535
612
  /**
536
613
  * @param signatureType - Must be translated before calling this function.
537
614
  */
538
- function handleClaimedAuthor(signatureType: string, verified: VERIFICATION_STATUS, claimedAuthor?: string, notAvailableVerificationKeys = false): Author {
615
+ function handleClaimedAuthor(
616
+ signatureType: string,
617
+ verified: VERIFICATION_STATUS,
618
+ claimedAuthor?: string,
619
+ notAvailableVerificationKeys = false,
620
+ ): Author {
539
621
  if (!claimedAuthor && notAvailableVerificationKeys) {
540
622
  return resultOk(null as AnonymousUser);
541
623
  }
@@ -1,10 +1,10 @@
1
- import { getMockLogger } from "../../tests/logger";
2
- import { DriveEvent, DriveEventType } from "../events";
3
- import { NodesEventsHandler } from "./events";
4
- import { DecryptedNode } from "./interface";
5
- import { NodesCache } from "./cache";
1
+ import { getMockLogger } from '../../tests/logger';
2
+ import { DriveEvent, DriveEventType } from '../events';
3
+ import { NodesEventsHandler } from './events';
4
+ import { DecryptedNode } from './interface';
5
+ import { NodesCache } from './cache';
6
6
 
7
- describe("NodesEventsHandler", () => {
7
+ describe('NodesEventsHandler', () => {
8
8
  const logger = getMockLogger();
9
9
  let cache: NodesCache;
10
10
  let nodesEventsNodesEventsHandler: NodesEventsHandler;
@@ -14,11 +14,13 @@ describe("NodesEventsHandler", () => {
14
14
 
15
15
  // @ts-expect-error No need to implement all methods for mocking
16
16
  cache = {
17
- getNode: jest.fn(() => Promise.resolve({
18
- uid: "nodeUid123",
19
- parentUid: "parentUid",
20
- name: { ok: true, value: "name" },
21
- } as DecryptedNode)),
17
+ getNode: jest.fn(() =>
18
+ Promise.resolve({
19
+ uid: 'nodeUid123',
20
+ parentUid: 'parentUid',
21
+ name: { ok: true, value: 'name' },
22
+ } as DecryptedNode),
23
+ ),
22
24
  setNode: jest.fn(),
23
25
  removeNodes: jest.fn(),
24
26
  resetFolderChildrenLoaded: jest.fn(),
@@ -26,47 +28,55 @@ describe("NodesEventsHandler", () => {
26
28
  nodesEventsNodesEventsHandler = new NodesEventsHandler(logger, cache);
27
29
  });
28
30
 
29
- it("should unset the parent listing complete status when a `NodeCreated` event is received.", async () => {
31
+ it('should unset the parent listing complete status when a `NodeCreated` event is received.', async () => {
30
32
  const event: DriveEvent = {
31
- eventId: "event1",
33
+ eventId: 'event1',
32
34
  type: DriveEventType.NodeCreated,
33
- nodeUid: "nodeUid",
34
- parentNodeUid: "parentUid",
35
+ nodeUid: 'nodeUid',
36
+ parentNodeUid: 'parentUid',
35
37
  isTrashed: false,
36
38
  isShared: false,
37
- treeEventScopeId: "volume1",
39
+ treeEventScopeId: 'volume1',
38
40
  };
39
41
  await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
40
42
 
41
43
  expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledTimes(1);
42
- expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledWith("parentUid");
44
+ expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledWith('parentUid');
43
45
  expect(cache.setNode).toHaveBeenCalledTimes(0);
44
46
  });
45
47
 
46
- it("should update the node metadata when a `NodeUpdated` event is received.", async () => {
48
+ it('should update the node metadata when a `NodeUpdated` event is received.', async () => {
47
49
  const event: DriveEvent = {
48
50
  type: DriveEventType.NodeUpdated,
49
- eventId: "event1",
50
- nodeUid: "nodeUid123",
51
- parentNodeUid: "parentUid",
51
+ eventId: 'event1',
52
+ nodeUid: 'nodeUid123',
53
+ parentNodeUid: 'parentUid',
52
54
  isTrashed: false,
53
55
  isShared: false,
54
- treeEventScopeId: "volume1",
56
+ treeEventScopeId: 'volume1',
55
57
  };
56
58
  await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
57
59
 
58
60
  expect(cache.getNode).toHaveBeenCalledTimes(1);
59
61
  expect(cache.setNode).toHaveBeenCalledTimes(1);
60
- expect(cache.setNode).toHaveBeenCalledWith(expect.objectContaining({ uid: 'nodeUid123', isStale: true, parentUid: "parentUid", trashTime: undefined, isShared: false }));
62
+ expect(cache.setNode).toHaveBeenCalledWith(
63
+ expect.objectContaining({
64
+ uid: 'nodeUid123',
65
+ isStale: true,
66
+ parentUid: 'parentUid',
67
+ trashTime: undefined,
68
+ isShared: false,
69
+ }),
70
+ );
61
71
  });
62
72
 
63
- it("should remove node from cache", async () => {
73
+ it('should remove node from cache', async () => {
64
74
  const event: DriveEvent = {
65
75
  type: DriveEventType.NodeDeleted,
66
- eventId: "event1",
67
- nodeUid: "nodeUid123",
68
- parentNodeUid: "parentUid",
69
- treeEventScopeId: "volume1",
76
+ eventId: 'event1',
77
+ nodeUid: 'nodeUid123',
78
+ parentNodeUid: 'parentUid',
79
+ treeEventScopeId: 'volume1',
70
80
  };
71
81
 
72
82
  await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
@@ -1,6 +1,6 @@
1
- import { Logger } from "../../interface";
2
- import { DriveEvent, DriveEventType } from "../events";
3
- import { NodesCache } from "./cache";
1
+ import { Logger } from '../../interface';
2
+ import { DriveEvent, DriveEventType } from '../events';
3
+ import { NodesCache } from './cache';
4
4
 
5
5
  /**
6
6
  * Provides internal event handling.
@@ -9,8 +9,10 @@ import { NodesCache } from "./cache";
9
9
  * from the DriveEventsService.
10
10
  */
11
11
  export class NodesEventsHandler {
12
- constructor(private logger: Logger, private cache: NodesCache) {
13
- }
12
+ constructor(
13
+ private logger: Logger,
14
+ private cache: NodesCache,
15
+ ) {}
14
16
 
15
17
  async updateNodesCacheOnEvent(event: DriveEvent): Promise<void> {
16
18
  try {
@@ -39,7 +41,12 @@ export class NodesEventsHandler {
39
41
  return;
40
42
  }
41
43
  if (event.type === DriveEventType.NodeUpdated) {
42
- const node = await this.cache.getNode(event.nodeUid);
44
+ let node;
45
+ try {
46
+ node = await this.cache.getNode(event.nodeUid);
47
+ } catch {
48
+ return;
49
+ }
43
50
  node.isStale = true;
44
51
  node.parentUid = event.parentNodeUid;
45
52
  node.isShared = event.isShared;
@@ -51,12 +58,6 @@ export class NodesEventsHandler {
51
58
  await this.cache.setNode(node);
52
59
  }
53
60
  } catch (error: unknown) {
54
- if (error instanceof Error) {
55
- // FIXME throw CacheMissException error and catch it
56
- if (error.message === 'Entity not found') {
57
- return;
58
- }
59
- }
60
61
  this.logger.error(`Failed to update node cache for event: ${event.eventId}`, error);
61
62
  }
62
63
  }