@protontech/drive-sdk 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +1 -1
  120. package/dist/internal/events/eventManager.js +0 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +34 -25
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +6 -6
  125. package/dist/internal/events/index.js.map +1 -1
  126. package/dist/internal/events/interface.d.ts +1 -1
  127. package/dist/internal/events/interface.js +0 -1
  128. package/dist/internal/events/interface.js.map +1 -1
  129. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  130. package/dist/internal/events/volumeEventManager.js.map +1 -1
  131. package/dist/internal/events/volumeEventManager.test.js +55 -55
  132. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  133. package/dist/internal/nodes/apiService.d.ts +4 -3
  134. package/dist/internal/nodes/apiService.js +36 -15
  135. package/dist/internal/nodes/apiService.js.map +1 -1
  136. package/dist/internal/nodes/apiService.test.js +60 -41
  137. package/dist/internal/nodes/apiService.test.js.map +1 -1
  138. package/dist/internal/nodes/cache.d.ts +5 -5
  139. package/dist/internal/nodes/cache.js +14 -7
  140. package/dist/internal/nodes/cache.js.map +1 -1
  141. package/dist/internal/nodes/cache.test.js +31 -9
  142. package/dist/internal/nodes/cache.test.js.map +1 -1
  143. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  144. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  145. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  146. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  147. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  148. package/dist/internal/nodes/cryptoService.js +11 -17
  149. package/dist/internal/nodes/cryptoService.js.map +1 -1
  150. package/dist/internal/nodes/cryptoService.test.js +320 -241
  151. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  152. package/dist/internal/nodes/events.d.ts +3 -3
  153. package/dist/internal/nodes/events.js.map +1 -1
  154. package/dist/internal/nodes/events.test.js +27 -21
  155. package/dist/internal/nodes/events.test.js.map +1 -1
  156. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  157. package/dist/internal/nodes/extendedAttributes.js +3 -1
  158. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  159. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  160. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  161. package/dist/internal/nodes/index.d.ts +10 -10
  162. package/dist/internal/nodes/index.js.map +1 -1
  163. package/dist/internal/nodes/index.test.d.ts +1 -0
  164. package/dist/internal/nodes/index.test.js +106 -0
  165. package/dist/internal/nodes/index.test.js.map +1 -0
  166. package/dist/internal/nodes/interface.d.ts +2 -2
  167. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  168. package/dist/internal/nodes/nodesAccess.js +28 -16
  169. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  170. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  171. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  172. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  173. package/dist/internal/nodes/nodesManagement.js +9 -7
  174. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  175. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  176. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  177. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  178. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  179. package/dist/internal/photos/albums.d.ts +3 -3
  180. package/dist/internal/photos/albums.js.map +1 -1
  181. package/dist/internal/photos/apiService.d.ts +1 -1
  182. package/dist/internal/photos/apiService.js +3 -6
  183. package/dist/internal/photos/apiService.js.map +1 -1
  184. package/dist/internal/photos/cache.d.ts +1 -1
  185. package/dist/internal/photos/index.d.ts +5 -5
  186. package/dist/internal/photos/index.js.map +1 -1
  187. package/dist/internal/photos/interface.d.ts +2 -2
  188. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  189. package/dist/internal/photos/photosTimeline.js +1 -2
  190. package/dist/internal/photos/photosTimeline.js.map +1 -1
  191. package/dist/internal/sdkEvents.d.ts +1 -1
  192. package/dist/internal/sdkEvents.js +2 -7
  193. package/dist/internal/sdkEvents.js.map +1 -1
  194. package/dist/internal/sdkEvents.test.js +8 -8
  195. package/dist/internal/shares/apiService.d.ts +2 -2
  196. package/dist/internal/shares/apiService.js +5 -3
  197. package/dist/internal/shares/apiService.js.map +1 -1
  198. package/dist/internal/shares/cache.d.ts +2 -2
  199. package/dist/internal/shares/cache.js +12 -6
  200. package/dist/internal/shares/cache.js.map +1 -1
  201. package/dist/internal/shares/cache.test.js.map +1 -1
  202. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  203. package/dist/internal/shares/cryptoCache.test.js +8 -2
  204. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  205. package/dist/internal/shares/cryptoService.d.ts +3 -3
  206. package/dist/internal/shares/cryptoService.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.test.js +42 -42
  208. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  209. package/dist/internal/shares/index.d.ts +4 -4
  210. package/dist/internal/shares/index.js.map +1 -1
  211. package/dist/internal/shares/interface.d.ts +2 -2
  212. package/dist/internal/shares/manager.d.ts +7 -7
  213. package/dist/internal/shares/manager.js.map +1 -1
  214. package/dist/internal/shares/manager.test.js +71 -63
  215. package/dist/internal/shares/manager.test.js.map +1 -1
  216. package/dist/internal/sharing/apiService.d.ts +4 -4
  217. package/dist/internal/sharing/apiService.js +4 -3
  218. package/dist/internal/sharing/apiService.js.map +1 -1
  219. package/dist/internal/sharing/cache.d.ts +1 -1
  220. package/dist/internal/sharing/cache.test.js +33 -33
  221. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  222. package/dist/internal/sharing/cryptoService.js +3 -5
  223. package/dist/internal/sharing/cryptoService.js.map +1 -1
  224. package/dist/internal/sharing/cryptoService.test.js +39 -39
  225. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  226. package/dist/internal/sharing/events.d.ts +4 -4
  227. package/dist/internal/sharing/events.js +0 -1
  228. package/dist/internal/sharing/events.js.map +1 -1
  229. package/dist/internal/sharing/events.test.js +39 -40
  230. package/dist/internal/sharing/events.test.js.map +1 -1
  231. package/dist/internal/sharing/index.d.ts +6 -6
  232. package/dist/internal/sharing/index.js.map +1 -1
  233. package/dist/internal/sharing/interface.d.ts +5 -4
  234. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  235. package/dist/internal/sharing/sharingAccess.js +8 -4
  236. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  237. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  238. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  239. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  240. package/dist/internal/sharing/sharingManagement.js +5 -7
  241. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  242. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  243. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  244. package/dist/internal/uids.js.map +1 -1
  245. package/dist/internal/upload/apiService.d.ts +3 -3
  246. package/dist/internal/upload/apiService.js +1 -1
  247. package/dist/internal/upload/apiService.js.map +1 -1
  248. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  249. package/dist/internal/upload/blockVerifier.js +1 -1
  250. package/dist/internal/upload/blockVerifier.js.map +1 -1
  251. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  252. package/dist/internal/upload/cryptoService.d.ts +4 -4
  253. package/dist/internal/upload/cryptoService.js +4 -4
  254. package/dist/internal/upload/cryptoService.js.map +1 -1
  255. package/dist/internal/upload/digests.js.map +1 -1
  256. package/dist/internal/upload/fileUploader.d.ts +6 -6
  257. package/dist/internal/upload/fileUploader.js.map +1 -1
  258. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  259. package/dist/internal/upload/index.d.ts +5 -5
  260. package/dist/internal/upload/index.js.map +1 -1
  261. package/dist/internal/upload/interface.d.ts +3 -3
  262. package/dist/internal/upload/manager.d.ts +4 -4
  263. package/dist/internal/upload/manager.js +7 -5
  264. package/dist/internal/upload/manager.js.map +1 -1
  265. package/dist/internal/upload/manager.test.js +137 -123
  266. package/dist/internal/upload/manager.test.js.map +1 -1
  267. package/dist/internal/upload/streamUploader.d.ts +6 -6
  268. package/dist/internal/upload/streamUploader.js +8 -6
  269. package/dist/internal/upload/streamUploader.js.map +1 -1
  270. package/dist/internal/upload/streamUploader.test.js +16 -11
  271. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  272. package/dist/internal/upload/telemetry.d.ts +3 -3
  273. package/dist/internal/upload/telemetry.js +5 -3
  274. package/dist/internal/upload/telemetry.js.map +1 -1
  275. package/dist/internal/upload/telemetry.test.js +8 -8
  276. package/dist/internal/upload/telemetry.test.js.map +1 -1
  277. package/dist/protonDriveClient.d.ts +8 -8
  278. package/dist/protonDriveClient.js +12 -9
  279. package/dist/protonDriveClient.js.map +1 -1
  280. package/dist/protonDrivePhotosClient.js.map +1 -1
  281. package/dist/telemetry.js +18 -15
  282. package/dist/telemetry.js.map +1 -1
  283. package/dist/tests/logger.js.map +1 -1
  284. package/dist/tests/telemetry.d.ts +1 -1
  285. package/dist/transformers.js +4 -2
  286. package/dist/transformers.js.map +1 -1
  287. package/package.json +1 -1
  288. package/src/cache/interface.ts +22 -22
  289. package/src/cache/memoryCache.test.ts +7 -7
  290. package/src/cache/memoryCache.ts +4 -4
  291. package/src/cache/nullCache.ts +1 -1
  292. package/src/config.ts +5 -5
  293. package/src/crypto/driveCrypto.test.ts +15 -15
  294. package/src/crypto/driveCrypto.ts +120 -156
  295. package/src/crypto/hmac.ts +1 -1
  296. package/src/crypto/interface.ts +63 -72
  297. package/src/crypto/openPGPCrypto.ts +74 -94
  298. package/src/crypto/utils.ts +1 -1
  299. package/src/diagnostic/eventsGenerator.ts +2 -2
  300. package/src/diagnostic/httpClient.ts +6 -2
  301. package/src/diagnostic/index.ts +12 -10
  302. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  303. package/src/diagnostic/interface.ts +81 -81
  304. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  305. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  306. package/src/diagnostic/telemetry.ts +4 -1
  307. package/src/diagnostic/zipGenerators.test.ts +1 -1
  308. package/src/diagnostic/zipGenerators.ts +3 -3
  309. package/src/errors.ts +21 -21
  310. package/src/index.ts +3 -3
  311. package/src/interface/account.ts +10 -10
  312. package/src/interface/author.ts +6 -6
  313. package/src/interface/config.ts +4 -4
  314. package/src/interface/devices.ts +6 -6
  315. package/src/interface/download.ts +12 -9
  316. package/src/interface/events.ts +45 -39
  317. package/src/interface/httpClient.ts +11 -11
  318. package/src/interface/index.ts +76 -19
  319. package/src/interface/nodes.ts +47 -49
  320. package/src/interface/result.ts +1 -3
  321. package/src/interface/sharing.ts +60 -57
  322. package/src/interface/telemetry.ts +74 -74
  323. package/src/interface/thumbnail.ts +5 -6
  324. package/src/interface/upload.ts +20 -12
  325. package/src/internal/apiService/apiService.test.ts +109 -76
  326. package/src/internal/apiService/apiService.ts +40 -26
  327. package/src/internal/apiService/coreTypes.ts +2474 -2463
  328. package/src/internal/apiService/driveTypes.ts +1868 -1822
  329. package/src/internal/apiService/errorCodes.ts +4 -4
  330. package/src/internal/apiService/errors.test.ts +25 -23
  331. package/src/internal/apiService/errors.ts +15 -9
  332. package/src/internal/apiService/index.ts +1 -1
  333. package/src/internal/apiService/transformers.ts +2 -2
  334. package/src/internal/asyncIteratorMap.test.ts +4 -4
  335. package/src/internal/asyncIteratorMap.ts +1 -1
  336. package/src/internal/asyncIteratorRace.test.ts +149 -0
  337. package/src/internal/asyncIteratorRace.ts +79 -0
  338. package/src/internal/batch.test.ts +50 -0
  339. package/src/internal/batch.ts +9 -0
  340. package/src/internal/batchLoading.test.ts +13 -14
  341. package/src/internal/batchLoading.ts +8 -8
  342. package/src/internal/devices/apiService.ts +58 -51
  343. package/src/internal/devices/cryptoService.ts +22 -17
  344. package/src/internal/devices/index.ts +17 -10
  345. package/src/internal/devices/interface.ts +21 -12
  346. package/src/internal/devices/manager.test.ts +40 -9
  347. package/src/internal/devices/manager.ts +3 -3
  348. package/src/internal/download/apiService.ts +66 -49
  349. package/src/internal/download/cryptoService.ts +34 -18
  350. package/src/internal/download/fileDownloader.test.ts +25 -9
  351. package/src/internal/download/fileDownloader.ts +36 -18
  352. package/src/internal/download/index.ts +19 -19
  353. package/src/internal/download/interface.ts +19 -20
  354. package/src/internal/download/queue.ts +3 -3
  355. package/src/internal/download/telemetry.test.ts +11 -11
  356. package/src/internal/download/telemetry.ts +24 -14
  357. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  358. package/src/internal/download/thumbnailDownloader.ts +43 -32
  359. package/src/internal/errors.ts +7 -5
  360. package/src/internal/events/apiService.ts +30 -17
  361. package/src/internal/events/coreEventManager.test.ts +18 -18
  362. package/src/internal/events/coreEventManager.ts +9 -6
  363. package/src/internal/events/eventManager.test.ts +51 -46
  364. package/src/internal/events/eventManager.ts +6 -5
  365. package/src/internal/events/index.ts +24 -14
  366. package/src/internal/events/interface.ts +47 -39
  367. package/src/internal/events/volumeEventManager.test.ts +61 -65
  368. package/src/internal/events/volumeEventManager.ts +18 -9
  369. package/src/internal/nodes/apiService.test.ts +197 -147
  370. package/src/internal/nodes/apiService.ts +288 -174
  371. package/src/internal/nodes/cache.test.ts +48 -20
  372. package/src/internal/nodes/cache.ts +60 -44
  373. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  374. package/src/internal/nodes/cryptoCache.ts +10 -5
  375. package/src/internal/nodes/cryptoService.test.ts +492 -351
  376. package/src/internal/nodes/cryptoService.ts +170 -88
  377. package/src/internal/nodes/events.test.ts +38 -28
  378. package/src/internal/nodes/events.ts +7 -5
  379. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  380. package/src/internal/nodes/extendedAttributes.ts +20 -15
  381. package/src/internal/nodes/index.test.ts +133 -0
  382. package/src/internal/nodes/index.ts +27 -15
  383. package/src/internal/nodes/interface.ts +42 -29
  384. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  385. package/src/internal/nodes/nodesAccess.ts +73 -49
  386. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  387. package/src/internal/nodes/nodesManagement.ts +39 -32
  388. package/src/internal/nodes/nodesRevisions.ts +7 -7
  389. package/src/internal/nodes/validations.ts +2 -2
  390. package/src/internal/photos/albums.ts +5 -5
  391. package/src/internal/photos/apiService.ts +4 -7
  392. package/src/internal/photos/cache.ts +1 -1
  393. package/src/internal/photos/index.ts +8 -8
  394. package/src/internal/photos/interface.ts +2 -2
  395. package/src/internal/photos/photosTimeline.ts +4 -5
  396. package/src/internal/sdkEvents.test.ts +10 -10
  397. package/src/internal/sdkEvents.ts +5 -13
  398. package/src/internal/shares/apiService.ts +44 -33
  399. package/src/internal/shares/cache.test.ts +6 -4
  400. package/src/internal/shares/cache.ts +21 -12
  401. package/src/internal/shares/cryptoCache.test.ts +17 -11
  402. package/src/internal/shares/cryptoCache.ts +4 -4
  403. package/src/internal/shares/cryptoService.test.ts +72 -74
  404. package/src/internal/shares/cryptoService.ts +48 -23
  405. package/src/internal/shares/index.ts +23 -11
  406. package/src/internal/shares/interface.ts +8 -8
  407. package/src/internal/shares/manager.test.ts +88 -80
  408. package/src/internal/shares/manager.ts +19 -19
  409. package/src/internal/sharing/apiService.ts +282 -175
  410. package/src/internal/sharing/cache.test.ts +35 -35
  411. package/src/internal/sharing/cache.ts +2 -2
  412. package/src/internal/sharing/cryptoService.test.ts +58 -46
  413. package/src/internal/sharing/cryptoService.ts +121 -84
  414. package/src/internal/sharing/events.test.ts +45 -49
  415. package/src/internal/sharing/events.ts +9 -6
  416. package/src/internal/sharing/index.ts +22 -11
  417. package/src/internal/sharing/interface.ts +40 -40
  418. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  419. package/src/internal/sharing/sharingAccess.ts +39 -21
  420. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  421. package/src/internal/sharing/sharingManagement.ts +138 -65
  422. package/src/internal/uids.ts +1 -1
  423. package/src/internal/upload/apiService.ts +167 -117
  424. package/src/internal/upload/blockVerifier.ts +8 -6
  425. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  426. package/src/internal/upload/cryptoService.ts +42 -36
  427. package/src/internal/upload/digests.ts +2 -2
  428. package/src/internal/upload/fileUploader.test.ts +15 -3
  429. package/src/internal/upload/fileUploader.ts +39 -17
  430. package/src/internal/upload/index.ts +13 -14
  431. package/src/internal/upload/interface.ts +78 -78
  432. package/src/internal/upload/manager.test.ts +170 -153
  433. package/src/internal/upload/manager.ts +59 -35
  434. package/src/internal/upload/queue.ts +3 -3
  435. package/src/internal/upload/streamUploader.test.ts +40 -26
  436. package/src/internal/upload/streamUploader.ts +87 -69
  437. package/src/internal/upload/telemetry.test.ts +11 -11
  438. package/src/internal/upload/telemetry.ts +25 -15
  439. package/src/internal/wait.test.ts +1 -1
  440. package/src/internal/wait.ts +3 -3
  441. package/src/protonDriveClient.ts +121 -39
  442. package/src/protonDrivePhotosClient.ts +16 -10
  443. package/src/telemetry.ts +60 -52
  444. package/src/tests/logger.ts +1 -1
  445. package/src/tests/telemetry.ts +2 -2
  446. package/src/transformers.ts +27 -21
  447. package/src/version.ts +0 -1
@@ -1,20 +1,29 @@
1
- import { DriveAPIService, drivePaths } from "../apiService";
2
- import { makeMemberUid } from "../uids";
3
- import { EncryptedShare, EncryptedRootShare, EncryptedShareCrypto, ShareType } from "./interface";
4
-
5
- type PostCreateVolumeRequest = Extract<drivePaths['/drive/volumes']['post']['requestBody'], { 'content': object }>['content']['application/json'];
1
+ import { DriveAPIService, drivePaths } from '../apiService';
2
+ import { makeMemberUid } from '../uids';
3
+ import { EncryptedShare, EncryptedRootShare, EncryptedShareCrypto, ShareType } from './interface';
4
+
5
+ type PostCreateVolumeRequest = Extract<
6
+ drivePaths['/drive/volumes']['post']['requestBody'],
7
+ { content: object }
8
+ >['content']['application/json'];
6
9
  type PostCreateVolumeResponse = drivePaths['/drive/volumes']['post']['responses']['200']['content']['application/json'];
7
10
 
8
- type PostCreateShareRequest = Extract<drivePaths['/drive/volumes/{volumeID}/shares']['post']['requestBody'], { 'content': object }>['content']['application/json'];
9
- type PostCreateShareResponse = drivePaths['/drive/volumes/{volumeID}/shares']['post']['responses']['200']['content']['application/json'];
10
-
11
- type GetMyFilesResponse = drivePaths['/drive/v2/shares/my-files']['get']['responses']['200']['content']['application/json'];
12
- type GetVolumeResponse = drivePaths['/drive/volumes/{volumeID}']['get']['responses']['200']['content']['application/json'];
11
+ type PostCreateShareRequest = Extract<
12
+ drivePaths['/drive/volumes/{volumeID}/shares']['post']['requestBody'],
13
+ { content: object }
14
+ >['content']['application/json'];
15
+ type PostCreateShareResponse =
16
+ drivePaths['/drive/volumes/{volumeID}/shares']['post']['responses']['200']['content']['application/json'];
17
+
18
+ type GetMyFilesResponse =
19
+ drivePaths['/drive/v2/shares/my-files']['get']['responses']['200']['content']['application/json'];
20
+ type GetVolumeResponse =
21
+ drivePaths['/drive/volumes/{volumeID}']['get']['responses']['200']['content']['application/json'];
13
22
  type GetShareResponse = drivePaths['/drive/shares/{shareID}']['get']['responses']['200']['content']['application/json'];
14
23
 
15
24
  /**
16
25
  * Provides API communication for fetching shares and creating volumes.
17
- *
26
+ *
18
27
  * The service is responsible for transforming local objects to API payloads
19
28
  * and vice versa. It should not contain any business logic.
20
29
  */
@@ -44,7 +53,7 @@ export class SharesAPIService {
44
53
  const response = await this.apiService.get<GetVolumeResponse>(`drive/volumes/${volumeId}`);
45
54
  return {
46
55
  shareId: response.Volume.Share.ShareID,
47
- }
56
+ };
48
57
  }
49
58
 
50
59
  async getShare(shareId: string): Promise<EncryptedShare> {
@@ -54,11 +63,11 @@ export class SharesAPIService {
54
63
 
55
64
  /**
56
65
  * Returns root share with address key.
57
- *
66
+ *
58
67
  * This function provides access to root shares that provides access
59
68
  * to node tree via address key. For this reason, caller must use this
60
69
  * only when it is clear the shareId is root share.
61
- *
70
+ *
62
71
  * @throws Error when share is not root share.
63
72
  */
64
73
  async getRootShare(shareId: string): Promise<EncryptedRootShare> {
@@ -76,17 +85,17 @@ export class SharesAPIService {
76
85
 
77
86
  async createVolume(
78
87
  share: {
79
- addressId: string,
80
- addressKeyId: string,
88
+ addressId: string;
89
+ addressKeyId: string;
81
90
  } & EncryptedShareCrypto,
82
91
  node: {
83
- encryptedName: string,
84
- armoredKey: string,
85
- armoredPassphrase: string,
86
- armoredPassphraseSignature: string,
87
- armoredHashKey: string,
92
+ encryptedName: string;
93
+ armoredKey: string;
94
+ armoredPassphrase: string;
95
+ armoredPassphraseSignature: string;
96
+ armoredHashKey: string;
88
97
  },
89
- ): Promise<{ volumeId: string, shareId: string, rootNodeId: string }> {
98
+ ): Promise<{ volumeId: string; shareId: string; rootNodeId: string }> {
90
99
  const response = await this.apiService.post<
91
100
  // Volume & share names are deprecated.
92
101
  Omit<PostCreateVolumeRequest, 'VolumeName' | 'ShareName'>,
@@ -108,19 +117,19 @@ export class SharesAPIService {
108
117
  volumeId: response.Volume.ID,
109
118
  shareId: response.Volume.Share.ShareID,
110
119
  rootNodeId: response.Volume.Share.LinkID,
111
- }
120
+ };
112
121
  }
113
122
 
114
123
  async createShare(
115
124
  volumeId: string,
116
125
  share: {
117
- addressId: string,
126
+ addressId: string;
118
127
  } & EncryptedShareCrypto,
119
128
  node: {
120
- nodeId: string,
121
- encryptedName: string,
122
- nameKeyPacket: string,
123
- passphraseKeyPacket: string,
129
+ nodeId: string;
130
+ encryptedName: string;
131
+ nameKeyPacket: string;
132
+ passphraseKeyPacket: string;
124
133
  },
125
134
  ): Promise<{ shareId: string }> {
126
135
  const response = await this.apiService.post<
@@ -139,7 +148,7 @@ export class SharesAPIService {
139
148
 
140
149
  return {
141
150
  shareId: response.Share.ID,
142
- }
151
+ };
143
152
  }
144
153
  }
145
154
 
@@ -149,15 +158,17 @@ function convertSharePayload(response: GetShareResponse): EncryptedShare {
149
158
  shareId: response.ShareID,
150
159
  rootNodeId: response.LinkID,
151
160
  creatorEmail: response.Creator,
152
- creationTime: response.CreateTime ? new Date(response.CreateTime*1000) : undefined,
161
+ creationTime: response.CreateTime ? new Date(response.CreateTime * 1000) : undefined,
153
162
  encryptedCrypto: {
154
163
  armoredKey: response.Key,
155
164
  armoredPassphrase: response.Passphrase,
156
165
  armoredPassphraseSignature: response.PassphraseSignature,
157
166
  },
158
- membership: response.Memberships?.[0] ? {
159
- memberUid: makeMemberUid(response.ShareID, response.Memberships[0].MemberID),
160
- } : undefined,
167
+ membership: response.Memberships?.[0]
168
+ ? {
169
+ memberUid: makeMemberUid(response.ShareID, response.Memberships[0].MemberID),
170
+ }
171
+ : undefined,
161
172
  type: convertShareTypeNumberToEnum(response.Type),
162
173
  };
163
174
  }
@@ -1,6 +1,6 @@
1
- import { MemoryCache } from "../../cache";
2
- import { getMockLogger } from "../../tests/logger";
3
- import { SharesCache } from "./cache";
1
+ import { MemoryCache } from '../../cache';
2
+ import { getMockLogger } from '../../tests/logger';
3
+ import { SharesCache } from './cache';
4
4
 
5
5
  describe('sharesCache', () => {
6
6
  let memoryCache: MemoryCache<string>;
@@ -45,7 +45,9 @@ describe('sharesCache', () => {
45
45
  await cache.getVolume('badObject');
46
46
  fail('Should have thrown an error');
47
47
  } catch (error) {
48
- expect(`${error}`).toBe('Error: Failed to deserialize volume: Unexpected token \'a\', \"aaa\" is not valid JSON');
48
+ expect(`${error}`).toBe(
49
+ 'Error: Failed to deserialize volume: Unexpected token \'a\', \"aaa\" is not valid JSON',
50
+ );
49
51
  }
50
52
 
51
53
  try {
@@ -1,6 +1,6 @@
1
- import { ProtonDriveEntitiesCache, Logger } from "../../interface";
2
- import { getErrorMessage } from "../errors";
3
- import { Volume } from "./interface";
1
+ import { ProtonDriveEntitiesCache, Logger } from '../../interface';
2
+ import { getErrorMessage } from '../errors';
3
+ import { Volume } from './interface';
4
4
 
5
5
  /**
6
6
  * Provides caching for shares and volume metadata.
@@ -10,7 +10,10 @@ import { Volume } from "./interface";
10
10
  * This is only intended for the owner's main volume. There is no cache invalidation.
11
11
  */
12
12
  export class SharesCache {
13
- constructor(private logger: Logger, private driveCache: ProtonDriveEntitiesCache) {
13
+ constructor(
14
+ private logger: Logger,
15
+ private driveCache: ProtonDriveEntitiesCache,
16
+ ) {
14
17
  this.logger = logger;
15
18
  this.driveCache = driveCache;
16
19
  }
@@ -51,14 +54,20 @@ function serializeVolume(volume: Volume) {
51
54
  }
52
55
 
53
56
  function deserializeVolume(shareData: string): Volume {
54
- const volume = JSON.parse(shareData);
55
- if (
56
- !volume || typeof volume !== 'object' ||
57
- !volume.volumeId || typeof volume.volumeId !== 'string' ||
58
- !volume.shareId || typeof volume.shareId !== 'string' ||
59
- !volume.rootNodeId || typeof volume.rootNodeId !== 'string' ||
60
- !volume.creatorEmail || typeof volume.creatorEmail !== 'string' ||
61
- !volume.addressId || typeof volume.addressId !== 'string'
57
+ const volume = JSON.parse(shareData);
58
+ if (
59
+ !volume ||
60
+ typeof volume !== 'object' ||
61
+ !volume.volumeId ||
62
+ typeof volume.volumeId !== 'string' ||
63
+ !volume.shareId ||
64
+ typeof volume.shareId !== 'string' ||
65
+ !volume.rootNodeId ||
66
+ typeof volume.rootNodeId !== 'string' ||
67
+ !volume.creatorEmail ||
68
+ typeof volume.creatorEmail !== 'string' ||
69
+ !volume.addressId ||
70
+ typeof volume.addressId !== 'string'
62
71
  ) {
63
72
  throw new Error('Invalid volume data');
64
73
  }
@@ -1,19 +1,19 @@
1
- import { PrivateKey, SessionKey } from "../../crypto";
2
- import { MemoryCache } from "../../cache";
3
- import { CachedCryptoMaterial } from "../../interface";
4
- import { SharesCryptoCache } from "./cryptoCache";
1
+ import { PrivateKey, SessionKey } from '../../crypto';
2
+ import { MemoryCache } from '../../cache';
3
+ import { CachedCryptoMaterial } from '../../interface';
4
+ import { SharesCryptoCache } from './cryptoCache';
5
5
 
6
6
  describe('sharesCryptoCache', () => {
7
7
  let memoryCache: MemoryCache<CachedCryptoMaterial>;
8
8
  let cache: SharesCryptoCache;
9
9
 
10
10
  const generatePrivateKey = (name: string) => {
11
- return name as unknown as PrivateKey
12
- }
11
+ return name as unknown as PrivateKey;
12
+ };
13
13
 
14
14
  const generateSessionKey = (name: string) => {
15
- return name as unknown as SessionKey
16
- }
15
+ return name as unknown as SessionKey;
16
+ };
17
17
 
18
18
  beforeEach(() => {
19
19
  memoryCache = new MemoryCache();
@@ -32,8 +32,14 @@ describe('sharesCryptoCache', () => {
32
32
 
33
33
  it('should replace and retrieve new keys', async () => {
34
34
  const shareId = 'newShareId';
35
- const keys1 = { key: generatePrivateKey('privateKey1'), passphraseSessionKey: generateSessionKey('sessionKey1') };
36
- const keys2 = { key: generatePrivateKey('privateKey2'), passphraseSessionKey: generateSessionKey('sessionKey2') };
35
+ const keys1 = {
36
+ key: generatePrivateKey('privateKey1'),
37
+ passphraseSessionKey: generateSessionKey('sessionKey1'),
38
+ };
39
+ const keys2 = {
40
+ key: generatePrivateKey('privateKey2'),
41
+ passphraseSessionKey: generateSessionKey('sessionKey2'),
42
+ };
37
43
 
38
44
  await cache.setShareKey(shareId, keys1);
39
45
  await cache.setShareKey(shareId, keys2);
@@ -67,4 +73,4 @@ describe('sharesCryptoCache', () => {
67
73
  expect(`${error}`).toBe('Error: Entity not found');
68
74
  }
69
75
  });
70
- });
76
+ });
@@ -1,12 +1,12 @@
1
- import { ProtonDriveCryptoCache } from "../../interface";
2
- import { DecryptedShareKey } from "./interface";
1
+ import { ProtonDriveCryptoCache } from '../../interface';
2
+ import { DecryptedShareKey } from './interface';
3
3
 
4
4
  /**
5
5
  * Provides caching for share crypto material.
6
- *
6
+ *
7
7
  * The cache is responsible for serialising and deserialising share
8
8
  * crypto material.
9
- *
9
+ *
10
10
  * The share crypto materials are cached so the updates to the root
11
11
  * nodes can be decrypted without the need to fetch the share keys
12
12
  * from the server again. Otherwise the rest of the tree requires
@@ -1,10 +1,10 @@
1
- import { DriveCrypto, PrivateKey, SessionKey, VERIFICATION_STATUS } from "../../crypto";
2
- import { ProtonDriveAccount, ProtonDriveTelemetry } from "../../interface";
3
- import { getMockTelemetry } from "../../tests/telemetry";
4
- import { EncryptedRootShare, ShareType } from "./interface";
5
- import { SharesCryptoService } from "./cryptoService";
1
+ import { DriveCrypto, PrivateKey, SessionKey, VERIFICATION_STATUS } from '../../crypto';
2
+ import { ProtonDriveAccount, ProtonDriveTelemetry } from '../../interface';
3
+ import { getMockTelemetry } from '../../tests/telemetry';
4
+ import { EncryptedRootShare, ShareType } from './interface';
5
+ import { SharesCryptoService } from './cryptoService';
6
6
 
7
- describe("SharesCryptoService", () => {
7
+ describe('SharesCryptoService', () => {
8
8
  let telemetry: ProtonDriveTelemetry;
9
9
  let driveCrypto: DriveCrypto;
10
10
  let account: ProtonDriveAccount;
@@ -14,89 +14,89 @@ describe("SharesCryptoService", () => {
14
14
  telemetry = getMockTelemetry();
15
15
  // @ts-expect-error No need to implement all methods for mocking
16
16
  driveCrypto = {
17
- decryptKey: jest.fn(async () => Promise.resolve({
18
- passphrase: "pass",
19
- key: "decryptedKey" as unknown as PrivateKey,
20
- passphraseSessionKey: "sessionKey" as unknown as SessionKey,
21
- verified: VERIFICATION_STATUS.SIGNED_AND_VALID,
22
- })),
17
+ decryptKey: jest.fn(async () =>
18
+ Promise.resolve({
19
+ passphrase: 'pass',
20
+ key: 'decryptedKey' as unknown as PrivateKey,
21
+ passphraseSessionKey: 'sessionKey' as unknown as SessionKey,
22
+ verified: VERIFICATION_STATUS.SIGNED_AND_VALID,
23
+ }),
24
+ ),
23
25
  };
24
26
  account = {
25
27
  // @ts-expect-error No need to implement full response for mocking
26
28
  getOwnAddress: jest.fn(async () => ({
27
- keys: [{ key: "addressKey" as unknown as PrivateKey }],
29
+ keys: [{ key: 'addressKey' as unknown as PrivateKey }],
28
30
  })),
29
31
  getPublicKeys: jest.fn(async () => []),
30
32
  };
31
33
  cryptoService = new SharesCryptoService(telemetry, driveCrypto, account);
32
34
  });
33
35
 
34
- it("should decrypt root share", async () => {
35
- const result = await cryptoService.decryptRootShare(
36
- {
37
- shareId: "shareId",
38
- addressId: "addressId",
39
- creatorEmail: "signatureEmail",
40
- encryptedCrypto: {
41
- armoredKey: "armoredKey",
42
- armoredPassphrase: "armoredPassphrase",
43
- armoredPassphraseSignature: "armoredPassphraseSignature",
44
- },
45
- type: ShareType.Main,
46
- } as EncryptedRootShare,
47
- );
36
+ it('should decrypt root share', async () => {
37
+ const result = await cryptoService.decryptRootShare({
38
+ shareId: 'shareId',
39
+ addressId: 'addressId',
40
+ creatorEmail: 'signatureEmail',
41
+ encryptedCrypto: {
42
+ armoredKey: 'armoredKey',
43
+ armoredPassphrase: 'armoredPassphrase',
44
+ armoredPassphraseSignature: 'armoredPassphraseSignature',
45
+ },
46
+ type: ShareType.Main,
47
+ } as EncryptedRootShare);
48
48
 
49
49
  expect(result).toMatchObject({
50
50
  share: {
51
- shareId: "shareId",
52
- author: { ok: true, value: "signatureEmail" },
51
+ shareId: 'shareId',
52
+ author: { ok: true, value: 'signatureEmail' },
53
53
  },
54
54
  key: {
55
- key: "decryptedKey",
56
- passphraseSessionKey: "sessionKey",
55
+ key: 'decryptedKey',
56
+ passphraseSessionKey: 'sessionKey',
57
57
  },
58
58
  });
59
59
 
60
- expect(account.getOwnAddress).toHaveBeenCalledWith("addressId");
61
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
60
+ expect(account.getOwnAddress).toHaveBeenCalledWith('addressId');
61
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
62
62
  expect(telemetry.logEvent).not.toHaveBeenCalled();
63
63
  });
64
64
 
65
- it("should decrypt root share with signiture verification error", async () => {
66
- driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
67
- passphrase: "pass",
68
- key: "decryptedKey" as unknown as PrivateKey,
69
- passphraseSessionKey: "sessionKey" as unknown as SessionKey,
70
- verified: VERIFICATION_STATUS.NOT_SIGNED,
71
- }));
72
-
73
- const result = await cryptoService.decryptRootShare(
74
- {
75
- shareId: "shareId",
76
- addressId: "addressId",
77
- creatorEmail: "signatureEmail",
78
- encryptedCrypto: {
79
- armoredKey: "armoredKey",
80
- armoredPassphrase: "armoredPassphrase",
81
- armoredPassphraseSignature: "armoredPassphraseSignature",
82
- },
83
- type: ShareType.Main,
84
- } as EncryptedRootShare,
65
+ it('should decrypt root share with signiture verification error', async () => {
66
+ driveCrypto.decryptKey = jest.fn(async () =>
67
+ Promise.resolve({
68
+ passphrase: 'pass',
69
+ key: 'decryptedKey' as unknown as PrivateKey,
70
+ passphraseSessionKey: 'sessionKey' as unknown as SessionKey,
71
+ verified: VERIFICATION_STATUS.NOT_SIGNED,
72
+ }),
85
73
  );
86
74
 
75
+ const result = await cryptoService.decryptRootShare({
76
+ shareId: 'shareId',
77
+ addressId: 'addressId',
78
+ creatorEmail: 'signatureEmail',
79
+ encryptedCrypto: {
80
+ armoredKey: 'armoredKey',
81
+ armoredPassphrase: 'armoredPassphrase',
82
+ armoredPassphraseSignature: 'armoredPassphraseSignature',
83
+ },
84
+ type: ShareType.Main,
85
+ } as EncryptedRootShare);
86
+
87
87
  expect(result).toMatchObject({
88
88
  share: {
89
- shareId: "shareId",
90
- author: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Missing signature" } },
89
+ shareId: 'shareId',
90
+ author: { ok: false, error: { claimedAuthor: 'signatureEmail', error: 'Missing signature' } },
91
91
  },
92
92
  key: {
93
- key: "decryptedKey",
94
- passphraseSessionKey: "sessionKey",
93
+ key: 'decryptedKey',
94
+ passphraseSessionKey: 'sessionKey',
95
95
  },
96
96
  });
97
97
 
98
- expect(account.getOwnAddress).toHaveBeenCalledWith("addressId");
99
- expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
98
+ expect(account.getOwnAddress).toHaveBeenCalledWith('addressId');
99
+ expect(account.getPublicKeys).toHaveBeenCalledWith('signatureEmail');
100
100
  expect(telemetry.logEvent).toHaveBeenCalledWith({
101
101
  eventName: 'verificationError',
102
102
  volumeType: 'own_volume',
@@ -106,23 +106,21 @@ describe("SharesCryptoService", () => {
106
106
  });
107
107
  });
108
108
 
109
- it("should handle decrypt issue of root share", async () => {
110
- const error = new Error("Decryption error");
109
+ it('should handle decrypt issue of root share', async () => {
110
+ const error = new Error('Decryption error');
111
111
  driveCrypto.decryptKey = jest.fn(async () => Promise.reject(error));
112
112
 
113
- const result = cryptoService.decryptRootShare(
114
- {
115
- shareId: "shareId",
116
- addressId: "addressId",
117
- creatorEmail: "signatureEmail",
118
- encryptedCrypto: {
119
- armoredKey: "armoredKey",
120
- armoredPassphrase: "armoredPassphrase",
121
- armoredPassphraseSignature: "armoredPassphraseSignature",
122
- },
123
- type: ShareType.Main,
124
- } as EncryptedRootShare,
125
- );
113
+ const result = cryptoService.decryptRootShare({
114
+ shareId: 'shareId',
115
+ addressId: 'addressId',
116
+ creatorEmail: 'signatureEmail',
117
+ encryptedCrypto: {
118
+ armoredKey: 'armoredKey',
119
+ armoredPassphrase: 'armoredPassphrase',
120
+ armoredPassphraseSignature: 'armoredPassphraseSignature',
121
+ },
122
+ type: ShareType.Main,
123
+ } as EncryptedRootShare);
126
124
 
127
125
  await expect(result).rejects.toThrow(error);
128
126
 
@@ -1,16 +1,31 @@
1
- import { ProtonDriveAccount, resultOk, resultError, Result, UnverifiedAuthorError, ProtonDriveTelemetry, Logger, MetricVolumeType } from "../../interface";
2
- import { DriveCrypto, PrivateKey, VERIFICATION_STATUS } from "../../crypto";
3
- import { getVerificationMessage } from "../errors";
4
- import { EncryptedRootShare, DecryptedRootShare, EncryptedShareCrypto, DecryptedShareKey, ShareType } from "./interface";
1
+ import {
2
+ ProtonDriveAccount,
3
+ resultOk,
4
+ resultError,
5
+ Result,
6
+ UnverifiedAuthorError,
7
+ ProtonDriveTelemetry,
8
+ Logger,
9
+ MetricVolumeType,
10
+ } from '../../interface';
11
+ import { DriveCrypto, PrivateKey, VERIFICATION_STATUS } from '../../crypto';
12
+ import { getVerificationMessage } from '../errors';
13
+ import {
14
+ EncryptedRootShare,
15
+ DecryptedRootShare,
16
+ EncryptedShareCrypto,
17
+ DecryptedShareKey,
18
+ ShareType,
19
+ } from './interface';
5
20
 
6
21
  /**
7
22
  * Provides crypto operations for share keys.
8
- *
23
+ *
9
24
  * The share crypto service is responsible for encrypting and decrypting share
10
25
  * keys. It should export high-level actions only, such as "decrypt share"
11
26
  * instead of low-level operations like "decrypt share passphrase". Low-level
12
27
  * operations should be kept private to the module.
13
- *
28
+ *
14
29
  * The service owns the logic to switch between old and new crypto model.
15
30
  */
16
31
  export class SharesCryptoService {
@@ -19,7 +34,11 @@ export class SharesCryptoService {
19
34
  private reportedDecryptionErrors = new Set<string>();
20
35
  private reportedVerificationErrors = new Set<string>();
21
36
 
22
- constructor(private telemetry: ProtonDriveTelemetry, private driveCrypto: DriveCrypto, private account: ProtonDriveAccount) {
37
+ constructor(
38
+ private telemetry: ProtonDriveTelemetry,
39
+ private driveCrypto: DriveCrypto,
40
+ private account: ProtonDriveAccount,
41
+ ) {
23
42
  this.telemetry = telemetry;
24
43
  this.logger = telemetry.getLogger('shares-crypto');
25
44
  this.driveCrypto = driveCrypto;
@@ -27,16 +46,21 @@ export class SharesCryptoService {
27
46
  }
28
47
 
29
48
  async generateVolumeBootstrap(addressKey: PrivateKey): Promise<{
30
- shareKey: { encrypted: EncryptedShareCrypto, decrypted: DecryptedShareKey },
49
+ shareKey: { encrypted: EncryptedShareCrypto; decrypted: DecryptedShareKey };
31
50
  rootNode: {
32
- key: { encrypted: EncryptedShareCrypto, decrypted: DecryptedShareKey },
33
- encryptedName: string,
34
- armoredHashKey: string,
35
- }
51
+ key: { encrypted: EncryptedShareCrypto; decrypted: DecryptedShareKey };
52
+ encryptedName: string;
53
+ armoredHashKey: string;
54
+ };
36
55
  }> {
37
56
  const shareKey = await this.driveCrypto.generateKey([addressKey], addressKey);
38
57
  const rootNodeKey = await this.driveCrypto.generateKey([shareKey.decrypted.key], addressKey);
39
- const { armoredNodeName } = await this.driveCrypto.encryptNodeName('root', undefined, shareKey.decrypted.key, addressKey);
58
+ const { armoredNodeName } = await this.driveCrypto.encryptNodeName(
59
+ 'root',
60
+ undefined,
61
+ shareKey.decrypted.key,
62
+ addressKey,
63
+ );
40
64
  const { armoredHashKey } = await this.driveCrypto.generateHashKey(rootNodeKey.decrypted.key);
41
65
  return {
42
66
  shareKey,
@@ -45,10 +69,10 @@ export class SharesCryptoService {
45
69
  encryptedName: armoredNodeName,
46
70
  armoredHashKey,
47
71
  },
48
- }
72
+ };
49
73
  }
50
74
 
51
- async decryptRootShare(share: EncryptedRootShare): Promise<{ share: DecryptedRootShare, key: DecryptedShareKey }> {
75
+ async decryptRootShare(share: EncryptedRootShare): Promise<{ share: DecryptedRootShare; key: DecryptedShareKey }> {
52
76
  const { keys: addressKeys } = await this.account.getOwnAddress(share.addressId);
53
77
  const addressPublicKeys = await this.account.getPublicKeys(share.creatorEmail);
54
78
 
@@ -60,7 +84,7 @@ export class SharesCryptoService {
60
84
  share.encryptedCrypto.armoredPassphraseSignature,
61
85
  addressKeys.map(({ key }) => key),
62
86
  addressPublicKeys,
63
- )
87
+ );
64
88
  key = result.key;
65
89
  passphraseSessionKey = result.passphraseSessionKey;
66
90
  verified = result.verified;
@@ -69,12 +93,13 @@ export class SharesCryptoService {
69
93
  throw error;
70
94
  }
71
95
 
72
- const author: Result<string, UnverifiedAuthorError> = verified === VERIFICATION_STATUS.SIGNED_AND_VALID
73
- ? resultOk(share.creatorEmail)
74
- : resultError({
75
- claimedAuthor: share.creatorEmail,
76
- error: getVerificationMessage(verified),
77
- });
96
+ const author: Result<string, UnverifiedAuthorError> =
97
+ verified === VERIFICATION_STATUS.SIGNED_AND_VALID
98
+ ? resultOk(share.creatorEmail)
99
+ : resultError({
100
+ claimedAuthor: share.creatorEmail,
101
+ error: getVerificationMessage(verified),
102
+ });
78
103
 
79
104
  if (!author.ok) {
80
105
  await this.reportVerificationError(share);
@@ -89,7 +114,7 @@ export class SharesCryptoService {
89
114
  key,
90
115
  passphraseSessionKey,
91
116
  },
92
- }
117
+ };
93
118
  }
94
119
 
95
120
  private reportDecryptionError(share: EncryptedRootShare, error?: unknown) {