@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,54 +1,85 @@
1
- import { c } from "ttag";
1
+ import { c } from 'ttag';
2
2
 
3
- import { base64StringToUint8Array, uint8ArrayToBase64String } from "../../crypto";
4
- import { APICodeError, DriveAPIService, drivePaths, isCodeOk } from "../apiService";
5
- import { splitNodeUid, makeNodeUid, splitNodeRevisionUid, makeNodeRevisionUid } from "../uids";
6
- import { UploadTokens } from "./interface";
7
- import { ThumbnailType } from "../../interface";
3
+ import { base64StringToUint8Array, uint8ArrayToBase64String } from '../../crypto';
4
+ import { APICodeError, DriveAPIService, drivePaths, isCodeOk } from '../apiService';
5
+ import { splitNodeUid, makeNodeUid, splitNodeRevisionUid, makeNodeRevisionUid } from '../uids';
6
+ import { UploadTokens } from './interface';
7
+ import { ThumbnailType } from '../../interface';
8
8
 
9
- type PostCheckAvailableHashesRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/checkAvailableHashes']['post']['requestBody'], { 'content': object }>['content']['application/json'];
10
- type PostCheckAvailableHashesResponse = drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/checkAvailableHashes']['post']['responses']['200']['content']['application/json'];
9
+ type PostCheckAvailableHashesRequest = Extract<
10
+ drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/checkAvailableHashes']['post']['requestBody'],
11
+ { content: object }
12
+ >['content']['application/json'];
13
+ type PostCheckAvailableHashesResponse =
14
+ drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/checkAvailableHashes']['post']['responses']['200']['content']['application/json'];
11
15
 
12
- type PostCreateDraftRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/files']['post']['requestBody'], { 'content': object }>['content']['application/json'];
13
- type PostCreateDraftResponse = drivePaths['/drive/v2/volumes/{volumeID}/files']['post']['responses']['200']['content']['application/json'];
16
+ type PostCreateDraftRequest = Extract<
17
+ drivePaths['/drive/v2/volumes/{volumeID}/files']['post']['requestBody'],
18
+ { content: object }
19
+ >['content']['application/json'];
20
+ type PostCreateDraftResponse =
21
+ drivePaths['/drive/v2/volumes/{volumeID}/files']['post']['responses']['200']['content']['application/json'];
14
22
 
15
- type PostCreateDraftRevisionRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions']['post']['requestBody'], { 'content': object }>['content']['application/json'];
16
- type PostCreateDraftRevisionResponse = drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions']['post']['responses']['200']['content']['application/json'];
23
+ type PostCreateDraftRevisionRequest = Extract<
24
+ drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions']['post']['requestBody'],
25
+ { content: object }
26
+ >['content']['application/json'];
27
+ type PostCreateDraftRevisionResponse =
28
+ drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions']['post']['responses']['200']['content']['application/json'];
17
29
 
18
- type GetVerificationDataResponse = drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/revisions/{revisionID}/verification']['get']['responses']['200']['content']['application/json'];
30
+ type GetVerificationDataResponse =
31
+ drivePaths['/drive/v2/volumes/{volumeID}/links/{linkID}/revisions/{revisionID}/verification']['get']['responses']['200']['content']['application/json'];
19
32
 
20
- type PostRequestBlockUploadRequest = Extract<drivePaths['/drive/blocks']['post']['requestBody'], { 'content': object }>['content']['application/json'];
21
- type PostRequestBlockUploadResponse = drivePaths['/drive/blocks']['post']['responses']['200']['content']['application/json'];
33
+ type PostRequestBlockUploadRequest = Extract<
34
+ drivePaths['/drive/blocks']['post']['requestBody'],
35
+ { content: object }
36
+ >['content']['application/json'];
37
+ type PostRequestBlockUploadResponse =
38
+ drivePaths['/drive/blocks']['post']['responses']['200']['content']['application/json'];
22
39
 
23
- type PostCommitRevisionRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
24
- type PostCommitRevisionResponse = drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['put']['responses']['200']['content']['application/json'];
40
+ type PostCommitRevisionRequest = Extract<
41
+ drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['put']['requestBody'],
42
+ { content: object }
43
+ >['content']['application/json'];
44
+ type PostCommitRevisionResponse =
45
+ drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['put']['responses']['200']['content']['application/json'];
25
46
 
26
- type PostDeleteNodesRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/delete_multiple']['post']['requestBody'], { 'content': object }>['content']['application/json'];
27
- type PostDeleteNodesResponse = drivePaths['/drive/v2/volumes/{volumeID}/delete_multiple']['post']['responses']['200']['content']['application/json'];
47
+ type PostDeleteNodesRequest = Extract<
48
+ drivePaths['/drive/v2/volumes/{volumeID}/delete_multiple']['post']['requestBody'],
49
+ { content: object }
50
+ >['content']['application/json'];
51
+ type PostDeleteNodesResponse =
52
+ drivePaths['/drive/v2/volumes/{volumeID}/delete_multiple']['post']['responses']['200']['content']['application/json'];
28
53
 
29
54
  export class UploadAPIService {
30
- constructor(private apiService: DriveAPIService, private clientUid: string | undefined) {
55
+ constructor(
56
+ private apiService: DriveAPIService,
57
+ private clientUid: string | undefined,
58
+ ) {
31
59
  this.apiService = apiService;
32
60
  this.clientUid = clientUid;
33
61
  }
34
62
 
35
- async checkAvailableHashes(parentNodeUid: string, hashes: string[]): Promise<{
36
- availalbleHashes: string[],
63
+ async checkAvailableHashes(
64
+ parentNodeUid: string,
65
+ hashes: string[],
66
+ ): Promise<{
67
+ availalbleHashes: string[];
37
68
  pendingHashes: {
38
- hash: string,
39
- nodeUid: string,
40
- revisionUid: string,
41
- clientUid?: string,
42
- }[],
69
+ hash: string;
70
+ nodeUid: string;
71
+ revisionUid: string;
72
+ clientUid?: string;
73
+ }[];
43
74
  }> {
44
75
  const { volumeId, nodeId: parentNodeId } = splitNodeUid(parentNodeUid);
45
- const result = await this.apiService.post<
46
- PostCheckAvailableHashesRequest,
47
- PostCheckAvailableHashesResponse
48
- >(`drive/v2/volumes/${volumeId}/links/${parentNodeId}/checkAvailableHashes`, {
49
- Hashes: hashes,
50
- ClientUID: this.clientUid ? [this.clientUid] : null,
51
- });
76
+ const result = await this.apiService.post<PostCheckAvailableHashesRequest, PostCheckAvailableHashesResponse>(
77
+ `drive/v2/volumes/${volumeId}/links/${parentNodeId}/checkAvailableHashes`,
78
+ {
79
+ Hashes: hashes,
80
+ ClientUID: this.clientUid ? [this.clientUid] : null,
81
+ },
82
+ );
52
83
 
53
84
  return {
54
85
  availalbleHashes: result.AvailableHashes,
@@ -58,101 +89,111 @@ export class UploadAPIService {
58
89
  revisionUid: makeNodeRevisionUid(volumeId, hash.LinkID, hash.RevisionID),
59
90
  clientUid: hash.ClientUID || undefined,
60
91
  })),
61
- }
92
+ };
62
93
  }
63
94
 
64
- async createDraft(parentNodeUid: string, node: {
65
- armoredEncryptedName: string,
66
- hash: string,
67
- mediaType: string,
68
- intendedUploadSize?: number,
69
- armoredNodeKey: string,
70
- armoredNodePassphrase: string,
71
- armoredNodePassphraseSignature: string,
72
- base64ContentKeyPacket: string,
73
- armoredContentKeyPacketSignature: string,
74
- signatureEmail: string,
75
- }): Promise<{
76
- nodeUid: string,
77
- nodeRevisionUid: string,
95
+ async createDraft(
96
+ parentNodeUid: string,
97
+ node: {
98
+ armoredEncryptedName: string;
99
+ hash: string;
100
+ mediaType: string;
101
+ intendedUploadSize?: number;
102
+ armoredNodeKey: string;
103
+ armoredNodePassphrase: string;
104
+ armoredNodePassphraseSignature: string;
105
+ base64ContentKeyPacket: string;
106
+ armoredContentKeyPacketSignature: string;
107
+ signatureEmail: string;
108
+ },
109
+ ): Promise<{
110
+ nodeUid: string;
111
+ nodeRevisionUid: string;
78
112
  }> {
79
113
  const { volumeId, nodeId: parentNodeId } = splitNodeUid(parentNodeUid);
80
- const result = await this.apiService.post<
81
- PostCreateDraftRequest,
82
- PostCreateDraftResponse
83
- >(`drive/v2/volumes/${volumeId}/files`, {
84
- ParentLinkID: parentNodeId,
85
- Name: node.armoredEncryptedName,
86
- Hash: node.hash,
87
- MIMEType: node.mediaType,
88
- ClientUID: this.clientUid || null,
89
- IntendedUploadSize: node.intendedUploadSize || null,
90
- NodeKey: node.armoredNodeKey,
91
- NodePassphrase: node.armoredNodePassphrase,
92
- NodePassphraseSignature: node.armoredNodePassphraseSignature,
93
- ContentKeyPacket: node.base64ContentKeyPacket,
94
- ContentKeyPacketSignature: node.armoredContentKeyPacketSignature,
95
- SignatureAddress: node.signatureEmail,
96
- });
114
+ const result = await this.apiService.post<PostCreateDraftRequest, PostCreateDraftResponse>(
115
+ `drive/v2/volumes/${volumeId}/files`,
116
+ {
117
+ ParentLinkID: parentNodeId,
118
+ Name: node.armoredEncryptedName,
119
+ Hash: node.hash,
120
+ MIMEType: node.mediaType,
121
+ ClientUID: this.clientUid || null,
122
+ IntendedUploadSize: node.intendedUploadSize || null,
123
+ NodeKey: node.armoredNodeKey,
124
+ NodePassphrase: node.armoredNodePassphrase,
125
+ NodePassphraseSignature: node.armoredNodePassphraseSignature,
126
+ ContentKeyPacket: node.base64ContentKeyPacket,
127
+ ContentKeyPacketSignature: node.armoredContentKeyPacketSignature,
128
+ SignatureAddress: node.signatureEmail,
129
+ },
130
+ );
97
131
 
98
132
  return {
99
133
  nodeUid: makeNodeUid(volumeId, result.File.ID),
100
134
  nodeRevisionUid: makeNodeRevisionUid(volumeId, result.File.ID, result.File.RevisionID),
101
- }
135
+ };
102
136
  }
103
137
 
104
- async createDraftRevision(nodeUid: string, revision: {
105
- currentRevisionUid: string,
106
- intendedUploadSize?: number,
107
- }): Promise<{
108
- nodeRevisionUid: string,
138
+ async createDraftRevision(
139
+ nodeUid: string,
140
+ revision: {
141
+ currentRevisionUid: string;
142
+ intendedUploadSize?: number;
143
+ },
144
+ ): Promise<{
145
+ nodeRevisionUid: string;
109
146
  }> {
110
147
  const { volumeId, nodeId } = splitNodeUid(nodeUid);
111
148
  const { revisionId: currentRevisionId } = splitNodeRevisionUid(revision.currentRevisionUid);
112
-
113
- const result = await this.apiService.post<
114
- PostCreateDraftRevisionRequest,
115
- PostCreateDraftRevisionResponse
116
- >(`drive/v2/volumes/${volumeId}/files/${nodeId}/revisions`, {
117
- CurrentRevisionID: currentRevisionId,
118
- ClientUID: this.clientUid || null,
119
- IntendedUploadSize: revision.intendedUploadSize || null,
120
- });
149
+
150
+ const result = await this.apiService.post<PostCreateDraftRevisionRequest, PostCreateDraftRevisionResponse>(
151
+ `drive/v2/volumes/${volumeId}/files/${nodeId}/revisions`,
152
+ {
153
+ CurrentRevisionID: currentRevisionId,
154
+ ClientUID: this.clientUid || null,
155
+ IntendedUploadSize: revision.intendedUploadSize || null,
156
+ },
157
+ );
121
158
 
122
159
  return {
123
160
  nodeRevisionUid: makeNodeRevisionUid(volumeId, nodeId, result.Revision.ID),
124
- }
161
+ };
125
162
  }
126
163
 
127
164
  async getVerificationData(draftNodeRevisionUid: string): Promise<{
128
- verificationCode: Uint8Array,
129
- base64ContentKeyPacket: string,
165
+ verificationCode: Uint8Array;
166
+ base64ContentKeyPacket: string;
130
167
  }> {
131
168
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
132
- const result = await this.apiService.get<
133
- GetVerificationDataResponse
134
- >(`drive/v2/volumes/${volumeId}/links/${nodeId}/revisions/${revisionId}/verification`);
135
-
169
+ const result = await this.apiService.get<GetVerificationDataResponse>(
170
+ `drive/v2/volumes/${volumeId}/links/${nodeId}/revisions/${revisionId}/verification`,
171
+ );
172
+
136
173
  return {
137
174
  verificationCode: base64StringToUint8Array(result.VerificationCode),
138
175
  base64ContentKeyPacket: result.ContentKeyPacket,
139
- }
176
+ };
140
177
  }
141
178
 
142
- async requestBlockUpload(draftNodeRevisionUid: string, addressId: string, blocks: {
143
- contentBlocks: {
144
- index: number,
145
- hash: Uint8Array,
146
- encryptedSize: number,
147
- armoredSignature: string,
148
- verificationToken: Uint8Array,
149
- }[],
150
- thumbnails?: {
151
- type: ThumbnailType,
152
- hash: Uint8Array,
153
- encryptedSize: number,
154
- }[],
155
- }): Promise<UploadTokens> {
179
+ async requestBlockUpload(
180
+ draftNodeRevisionUid: string,
181
+ addressId: string,
182
+ blocks: {
183
+ contentBlocks: {
184
+ index: number;
185
+ hash: Uint8Array;
186
+ encryptedSize: number;
187
+ armoredSignature: string;
188
+ verificationToken: Uint8Array;
189
+ }[];
190
+ thumbnails?: {
191
+ type: ThumbnailType;
192
+ hash: Uint8Array;
193
+ encryptedSize: number;
194
+ }[];
195
+ },
196
+ ): Promise<UploadTokens> {
156
197
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
157
198
  const result = await this.apiService.post<
158
199
  // TODO: Deprected fields but not properly marked in the types.
@@ -194,11 +235,14 @@ export class UploadAPIService {
194
235
  };
195
236
  }
196
237
 
197
- async commitDraftRevision(draftNodeRevisionUid: string, options: {
198
- armoredManifestSignature: string,
199
- signatureEmail: string,
200
- armoredExtendedAttributes?: string,
201
- }): Promise<void> {
238
+ async commitDraftRevision(
239
+ draftNodeRevisionUid: string,
240
+ options: {
241
+ armoredManifestSignature: string;
242
+ signatureEmail: string;
243
+ armoredExtendedAttributes?: string;
244
+ },
245
+ ): Promise<void> {
202
246
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
203
247
  await this.apiService.put<
204
248
  // TODO: Deprected fields but not properly marked in the types.
@@ -215,16 +259,16 @@ export class UploadAPIService {
215
259
  async deleteDraft(draftNodeUid: string): Promise<void> {
216
260
  const { volumeId, nodeId } = splitNodeUid(draftNodeUid);
217
261
 
218
- const response = await this.apiService.post<
219
- PostDeleteNodesRequest,
220
- PostDeleteNodesResponse
221
- >(`drive/v2/volumes/${volumeId}/delete_multiple`, {
222
- LinkIDs: [nodeId],
223
- });
262
+ const response = await this.apiService.post<PostDeleteNodesRequest, PostDeleteNodesResponse>(
263
+ `drive/v2/volumes/${volumeId}/delete_multiple`,
264
+ {
265
+ LinkIDs: [nodeId],
266
+ },
267
+ );
224
268
 
225
269
  const code = response.Responses?.[0].Response.Code || 0;
226
270
  if (!isCodeOk(code)) {
227
- throw new APICodeError(c('Error').t`Unknown error ${code}`, code)
271
+ throw new APICodeError(c('Error').t`Unknown error ${code}`, code);
228
272
  }
229
273
  }
230
274
 
@@ -233,9 +277,15 @@ export class UploadAPIService {
233
277
  await this.apiService.delete(`/drive/v2/volumes/${volumeId}/files/${nodeId}/revisions/${revisionId}`);
234
278
  }
235
279
 
236
- async uploadBlock(url: string, token: string, block: Uint8Array, onProgress?: (uploadedBytes: number) => void, signal?: AbortSignal): Promise<void> {
280
+ async uploadBlock(
281
+ url: string,
282
+ token: string,
283
+ block: Uint8Array,
284
+ onProgress?: (uploadedBytes: number) => void,
285
+ signal?: AbortSignal,
286
+ ): Promise<void> {
237
287
  const formData = new FormData();
238
- formData.append("Block", new Blob([block]), "blob");
288
+ formData.append('Block', new Blob([block]), 'blob');
239
289
 
240
290
  await this.apiService.postBlockStream(url, token, formData, onProgress, signal);
241
291
  }
@@ -1,6 +1,6 @@
1
- import { PrivateKey, SessionKey } from "../../crypto";
2
- import { UploadAPIService } from "./apiService";
3
- import { UploadCryptoService } from "./cryptoService";
1
+ import { PrivateKey, SessionKey } from '../../crypto';
2
+ import { UploadAPIService } from './apiService';
3
+ import { UploadCryptoService } from './cryptoService';
4
4
 
5
5
  export class BlockVerifier {
6
6
  private verificationCode?: Uint8Array;
@@ -20,18 +20,20 @@ export class BlockVerifier {
20
20
  async loadVerificationData() {
21
21
  const result = await this.apiService.getVerificationData(this.draftNodeRevisionUid);
22
22
  this.verificationCode = result.verificationCode;
23
- this.contentKeyPacketSessionKey = await this.cryptoService.getContentKeyPacketSessionKey(this.nodeKey, result.base64ContentKeyPacket);
23
+ this.contentKeyPacketSessionKey = await this.cryptoService.getContentKeyPacketSessionKey(
24
+ this.nodeKey,
25
+ result.base64ContentKeyPacket,
26
+ );
24
27
  }
25
28
 
26
29
  async verifyBlock(encryptedBlock: Uint8Array): Promise<{
27
- verificationToken: Uint8Array,
30
+ verificationToken: Uint8Array;
28
31
  }> {
29
32
  if (!this.verificationCode || !this.contentKeyPacketSessionKey) {
30
33
  throw new Error('Verifying block before loading verification data');
31
34
  }
32
35
 
33
36
  return this.cryptoService.verifyBlock(
34
- this.nodeKey,
35
37
  this.contentKeyPacketSessionKey,
36
38
  this.verificationCode,
37
39
  encryptedBlock,
@@ -1,6 +1,6 @@
1
- import { ChunkStreamReader } from "./chunkStreamReader";
1
+ import { ChunkStreamReader } from './chunkStreamReader';
2
2
 
3
- describe("ChunkStreamReader", () => {
3
+ describe('ChunkStreamReader', () => {
4
4
  let stream: ReadableStream<Uint8Array>;
5
5
 
6
6
  beforeEach(() => {
@@ -15,7 +15,7 @@ describe("ChunkStreamReader", () => {
15
15
  });
16
16
  });
17
17
 
18
- it("should yield chunks as enqueued if matching the size", async () => {
18
+ it('should yield chunks as enqueued if matching the size', async () => {
19
19
  const reader = new ChunkStreamReader(stream, 3);
20
20
 
21
21
  const chunks: Uint8Array[] = [];
@@ -30,7 +30,7 @@ describe("ChunkStreamReader", () => {
30
30
  expect(chunks[3]).toEqual(new Uint8Array([10, 11, 12]));
31
31
  });
32
32
 
33
- it("should yield smaller chunks than enqueued chunks", async () => {
33
+ it('should yield smaller chunks than enqueued chunks', async () => {
34
34
  const reader = new ChunkStreamReader(stream, 2);
35
35
 
36
36
  const chunks: Uint8Array[] = [];
@@ -47,7 +47,7 @@ describe("ChunkStreamReader", () => {
47
47
  expect(chunks[5]).toEqual(new Uint8Array([11, 12]));
48
48
  });
49
49
 
50
- it("should yield bigger chunks than enqueued chunks", async () => {
50
+ it('should yield bigger chunks than enqueued chunks', async () => {
51
51
  const reader = new ChunkStreamReader(stream, 4);
52
52
 
53
53
  const chunks: Uint8Array[] = [];
@@ -61,7 +61,7 @@ describe("ChunkStreamReader", () => {
61
61
  expect(chunks[2]).toEqual(new Uint8Array([9, 10, 11, 12]));
62
62
  });
63
63
 
64
- it("should yield last incomplete chunk", async () => {
64
+ it('should yield last incomplete chunk', async () => {
65
65
  const reader = new ChunkStreamReader(stream, 5);
66
66
 
67
67
  const chunks: Uint8Array[] = [];
@@ -75,7 +75,7 @@ describe("ChunkStreamReader", () => {
75
75
  expect(chunks[2]).toEqual(new Uint8Array([11, 12]));
76
76
  });
77
77
 
78
- it("should yield as one big chunk", async () => {
78
+ it('should yield as one big chunk', async () => {
79
79
  const reader = new ChunkStreamReader(stream, 100);
80
80
 
81
81
  const chunks: Uint8Array[] = [];
@@ -1,9 +1,9 @@
1
- import { c } from "ttag";
1
+ import { c } from 'ttag';
2
2
 
3
- import { DriveCrypto, PrivateKey, SessionKey } from "../../crypto";
4
- import { IntegrityError } from "../../errors";
5
- import { Thumbnail } from "../../interface";
6
- import { EncryptedBlock, EncryptedThumbnail, NodeCrypto, NodeRevisionDraftKeys, NodesService } from "./interface";
3
+ import { DriveCrypto, PrivateKey, SessionKey } from '../../crypto';
4
+ import { IntegrityError } from '../../errors';
5
+ import { Thumbnail } from '../../interface';
6
+ import { EncryptedBlock, EncryptedThumbnail, NodeCrypto, NodeRevisionDraftKeys, NodesService } from './interface';
7
7
 
8
8
  export class UploadCryptoService {
9
9
  constructor(
@@ -16,16 +16,12 @@ export class UploadCryptoService {
16
16
 
17
17
  async generateFileCrypto(
18
18
  parentUid: string,
19
- parentKeys: { key: PrivateKey, hashKey: Uint8Array },
19
+ parentKeys: { key: PrivateKey; hashKey: Uint8Array },
20
20
  name: string,
21
21
  ): Promise<NodeCrypto> {
22
22
  const signatureAddress = await this.nodesService.getRootNodeEmailKey(parentUid);
23
23
 
24
- const [
25
- nodeKeys,
26
- { armoredNodeName },
27
- hash,
28
- ] = await Promise.all([
24
+ const [nodeKeys, { armoredNodeName }, hash] = await Promise.all([
29
25
  this.driveCrypto.generateKey([parentKeys.key], signatureAddress.addressKey),
30
26
  this.driveCrypto.encryptNodeName(name, undefined, parentKeys.key, signatureAddress.addressKey),
31
27
  this.driveCrypto.generateLookupHash(name, parentKeys.hashKey),
@@ -44,19 +40,24 @@ export class UploadCryptoService {
44
40
  };
45
41
  }
46
42
 
47
- async generateNameHashes(parentHashKey: Uint8Array, names: string[]): Promise<{ name: string, hash: string }[]> {
48
- return Promise.all(names.map(async (name) => ({
49
- name,
50
- hash: await this.driveCrypto.generateLookupHash(name, parentHashKey)
51
- })));
43
+ async generateNameHashes(parentHashKey: Uint8Array, names: string[]): Promise<{ name: string; hash: string }[]> {
44
+ return Promise.all(
45
+ names.map(async (name) => ({
46
+ name,
47
+ hash: await this.driveCrypto.generateLookupHash(name, parentHashKey),
48
+ })),
49
+ );
52
50
  }
53
51
 
54
- async encryptThumbnail(nodeRevisionDraftKeys: NodeRevisionDraftKeys, thumbnail: Thumbnail): Promise<EncryptedThumbnail> {
52
+ async encryptThumbnail(
53
+ nodeRevisionDraftKeys: NodeRevisionDraftKeys,
54
+ thumbnail: Thumbnail,
55
+ ): Promise<EncryptedThumbnail> {
55
56
  const { encryptedData } = await this.driveCrypto.encryptThumbnailBlock(
56
57
  thumbnail.thumbnail,
57
58
  nodeRevisionDraftKeys.contentKeyPacketSessionKey,
58
59
  nodeRevisionDraftKeys.signatureAddress.addressKey,
59
- )
60
+ );
60
61
 
61
62
  const digest = await crypto.subtle.digest('SHA-256', encryptedData);
62
63
 
@@ -66,7 +67,7 @@ export class UploadCryptoService {
66
67
  originalSize: thumbnail.thumbnail.length,
67
68
  encryptedSize: encryptedData.length,
68
69
  hash: new Uint8Array(digest),
69
- }
70
+ };
70
71
  }
71
72
 
72
73
  async encryptBlock(
@@ -93,25 +94,36 @@ export class UploadCryptoService {
93
94
  originalSize: block.length,
94
95
  encryptedSize: encryptedData.length,
95
96
  hash: new Uint8Array(digest),
96
- }
97
+ };
97
98
  }
98
99
 
99
- async commitFile(nodeRevisionDraftKeys: NodeRevisionDraftKeys, manifest: Uint8Array, extendedAttributes?: string): Promise<{
100
- armoredManifestSignature: string,
101
- signatureEmail: string,
102
- armoredExtendedAttributes?: string,
100
+ async commitFile(
101
+ nodeRevisionDraftKeys: NodeRevisionDraftKeys,
102
+ manifest: Uint8Array,
103
+ extendedAttributes?: string,
104
+ ): Promise<{
105
+ armoredManifestSignature: string;
106
+ signatureEmail: string;
107
+ armoredExtendedAttributes?: string;
103
108
  }> {
104
- const { armoredManifestSignature } = await this.driveCrypto.signManifest(manifest, nodeRevisionDraftKeys.signatureAddress.addressKey);
109
+ const { armoredManifestSignature } = await this.driveCrypto.signManifest(
110
+ manifest,
111
+ nodeRevisionDraftKeys.signatureAddress.addressKey,
112
+ );
105
113
 
106
114
  const { armoredExtendedAttributes } = extendedAttributes
107
- ? await this.driveCrypto.encryptExtendedAttributes(extendedAttributes, nodeRevisionDraftKeys.key, nodeRevisionDraftKeys.signatureAddress.addressKey)
115
+ ? await this.driveCrypto.encryptExtendedAttributes(
116
+ extendedAttributes,
117
+ nodeRevisionDraftKeys.key,
118
+ nodeRevisionDraftKeys.signatureAddress.addressKey,
119
+ )
108
120
  : { armoredExtendedAttributes: undefined };
109
121
 
110
122
  return {
111
123
  armoredManifestSignature,
112
124
  signatureEmail: nodeRevisionDraftKeys.signatureAddress.email,
113
125
  armoredExtendedAttributes,
114
- }
126
+ };
115
127
  }
116
128
 
117
129
  async getContentKeyPacketSessionKey(nodeKey: PrivateKey, base64ContentKeyPacket: string): Promise<SessionKey> {
@@ -125,12 +137,11 @@ export class UploadCryptoService {
125
137
  }
126
138
 
127
139
  async verifyBlock(
128
- nodeKey: PrivateKey,
129
140
  contentKeyPacketSessionKey: SessionKey,
130
141
  verificationCode: Uint8Array,
131
142
  encryptedData: Uint8Array,
132
143
  ): Promise<{
133
- verificationToken: Uint8Array,
144
+ verificationToken: Uint8Array;
134
145
  }> {
135
146
  // Attempt to decrypt data block, to try to detect bitflips / bad hardware
136
147
  //
@@ -140,12 +151,7 @@ export class UploadCryptoService {
140
151
  // Additionally, we use the key provided by the verification endpoint, to
141
152
  // ensure the correct key was used to encrypt the data
142
153
  try {
143
- await this.driveCrypto.decryptBlock(
144
- encryptedData,
145
- undefined,
146
- nodeKey,
147
- contentKeyPacketSessionKey,
148
- );
154
+ await this.driveCrypto.decryptBlock(encryptedData, contentKeyPacketSessionKey);
149
155
  } catch (error) {
150
156
  throw new IntegrityError(c('Error').t`Data integrity check of one part failed`, {
151
157
  error,
@@ -157,6 +163,6 @@ export class UploadCryptoService {
157
163
  const verificationToken = verificationCode.map((value, index) => value ^ (encryptedData[index] || 0));
158
164
  return {
159
165
  verificationToken,
160
- }
166
+ };
161
167
  }
162
168
  }
@@ -1,4 +1,4 @@
1
- import { sha1 } from "@noble/hashes/legacy";
1
+ import { sha1 } from '@noble/hashes/legacy';
2
2
  import { bytesToHex } from '@noble/hashes/utils';
3
3
 
4
4
  export class UploadDigests {
@@ -13,6 +13,6 @@ export class UploadDigests {
13
13
  digests(): { sha1: string } {
14
14
  return {
15
15
  sha1: bytesToHex(this.digestSha1.digest()),
16
- }
16
+ };
17
17
  }
18
18
  }