@protontech/drive-sdk 0.0.13 → 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 (496) hide show
  1. package/dist/cache/index.d.ts +1 -0
  2. package/dist/cache/index.js +3 -1
  3. package/dist/cache/index.js.map +1 -1
  4. package/dist/cache/memoryCache.d.ts +1 -1
  5. package/dist/cache/memoryCache.js +0 -1
  6. package/dist/cache/memoryCache.js.map +1 -1
  7. package/dist/cache/memoryCache.test.js +2 -4
  8. package/dist/cache/memoryCache.test.js.map +1 -1
  9. package/dist/cache/nullCache.d.ts +14 -0
  10. package/dist/cache/nullCache.js +36 -0
  11. package/dist/cache/nullCache.js.map +1 -0
  12. package/dist/config.d.ts +16 -1
  13. package/dist/config.js +1 -1
  14. package/dist/config.js.map +1 -1
  15. package/dist/crypto/driveCrypto.d.ts +2 -5
  16. package/dist/crypto/driveCrypto.js +7 -12
  17. package/dist/crypto/driveCrypto.js.map +1 -1
  18. package/dist/crypto/driveCrypto.test.js +14 -14
  19. package/dist/crypto/openPGPCrypto.js +5 -3
  20. package/dist/crypto/openPGPCrypto.js.map +1 -1
  21. package/dist/diagnostic/eventsGenerator.d.ts +14 -0
  22. package/dist/diagnostic/eventsGenerator.js +49 -0
  23. package/dist/diagnostic/eventsGenerator.js.map +1 -0
  24. package/dist/diagnostic/httpClient.d.ts +16 -0
  25. package/dist/diagnostic/httpClient.js +81 -0
  26. package/dist/diagnostic/httpClient.js.map +1 -0
  27. package/dist/diagnostic/index.d.ts +10 -0
  28. package/dist/diagnostic/index.js +35 -0
  29. package/dist/diagnostic/index.js.map +1 -0
  30. package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
  31. package/dist/diagnostic/integrityVerificationStream.js +56 -0
  32. package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
  33. package/dist/diagnostic/interface.d.ts +102 -0
  34. package/dist/diagnostic/interface.js +3 -0
  35. package/dist/diagnostic/interface.js.map +1 -0
  36. package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
  37. package/dist/diagnostic/sdkDiagnostic.js +222 -0
  38. package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
  39. package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
  40. package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
  41. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
  42. package/dist/diagnostic/telemetry.d.ts +25 -0
  43. package/dist/diagnostic/telemetry.js +70 -0
  44. package/dist/diagnostic/telemetry.js.map +1 -0
  45. package/dist/diagnostic/zipGenerators.d.ts +9 -0
  46. package/dist/diagnostic/zipGenerators.js +64 -0
  47. package/dist/diagnostic/zipGenerators.js.map +1 -0
  48. package/dist/diagnostic/zipGenerators.test.js +144 -0
  49. package/dist/diagnostic/zipGenerators.test.js.map +1 -0
  50. package/dist/errors.d.ts +2 -1
  51. package/dist/errors.js +3 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/interface/config.d.ts +26 -0
  54. package/dist/interface/config.js +3 -0
  55. package/dist/interface/config.js.map +1 -0
  56. package/dist/interface/download.d.ts +2 -2
  57. package/dist/interface/events.d.ts +58 -20
  58. package/dist/interface/events.js +11 -1
  59. package/dist/interface/events.js.map +1 -1
  60. package/dist/interface/httpClient.d.ts +0 -14
  61. package/dist/interface/index.d.ts +11 -7
  62. package/dist/interface/index.js +2 -2
  63. package/dist/interface/index.js.map +1 -1
  64. package/dist/interface/nodes.d.ts +9 -0
  65. package/dist/interface/nodes.js.map +1 -1
  66. package/dist/interface/result.js.map +1 -1
  67. package/dist/interface/sharing.d.ts +2 -0
  68. package/dist/interface/sharing.js.map +1 -1
  69. package/dist/interface/telemetry.js +0 -8
  70. package/dist/interface/telemetry.js.map +1 -1
  71. package/dist/interface/thumbnail.js.map +1 -1
  72. package/dist/interface/upload.d.ts +7 -1
  73. package/dist/internal/apiService/apiService.d.ts +1 -1
  74. package/dist/internal/apiService/apiService.js +7 -11
  75. package/dist/internal/apiService/apiService.js.map +1 -1
  76. package/dist/internal/apiService/apiService.test.js +55 -48
  77. package/dist/internal/apiService/apiService.test.js.map +1 -1
  78. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  79. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  80. package/dist/internal/apiService/errors.js +14 -8
  81. package/dist/internal/apiService/errors.js.map +1 -1
  82. package/dist/internal/apiService/errors.test.js +17 -12
  83. package/dist/internal/apiService/errors.test.js.map +1 -1
  84. package/dist/internal/apiService/transformers.d.ts +1 -1
  85. package/dist/internal/apiService/transformers.js +1 -1
  86. package/dist/internal/asyncIteratorMap.test.js +2 -2
  87. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  88. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  89. package/dist/internal/asyncIteratorRace.js +59 -0
  90. package/dist/internal/asyncIteratorRace.js.map +1 -0
  91. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  92. package/dist/internal/asyncIteratorRace.test.js +119 -0
  93. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  94. package/dist/internal/batch.d.ts +1 -0
  95. package/dist/internal/batch.js +12 -0
  96. package/dist/internal/batch.js.map +1 -0
  97. package/dist/internal/batch.test.d.ts +1 -0
  98. package/dist/internal/batch.test.js +41 -0
  99. package/dist/internal/batch.test.js.map +1 -0
  100. package/dist/internal/batchLoading.js.map +1 -1
  101. package/dist/internal/batchLoading.test.js +13 -13
  102. package/dist/internal/batchLoading.test.js.map +1 -1
  103. package/dist/internal/devices/apiService.d.ts +3 -3
  104. package/dist/internal/devices/apiService.js +2 -2
  105. package/dist/internal/devices/apiService.js.map +1 -1
  106. package/dist/internal/devices/cryptoService.js +1 -2
  107. package/dist/internal/devices/cryptoService.js.map +1 -1
  108. package/dist/internal/devices/index.d.ts +5 -5
  109. package/dist/internal/devices/index.js.map +1 -1
  110. package/dist/internal/devices/interface.d.ts +3 -3
  111. package/dist/internal/devices/manager.js +2 -2
  112. package/dist/internal/devices/manager.js.map +1 -1
  113. package/dist/internal/devices/manager.test.js +38 -7
  114. package/dist/internal/devices/manager.test.js.map +1 -1
  115. package/dist/internal/download/apiService.d.ts +4 -4
  116. package/dist/internal/download/apiService.js +32 -32
  117. package/dist/internal/download/apiService.js.map +1 -1
  118. package/dist/internal/download/cryptoService.d.ts +4 -4
  119. package/dist/internal/download/cryptoService.js +6 -5
  120. package/dist/internal/download/cryptoService.js.map +1 -1
  121. package/dist/internal/download/fileDownloader.d.ts +6 -6
  122. package/dist/internal/download/fileDownloader.js +3 -2
  123. package/dist/internal/download/fileDownloader.js.map +1 -1
  124. package/dist/internal/download/fileDownloader.test.js +1 -1
  125. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  126. package/dist/internal/download/index.d.ts +5 -5
  127. package/dist/internal/download/index.js +5 -5
  128. package/dist/internal/download/index.js.map +1 -1
  129. package/dist/internal/download/interface.d.ts +3 -4
  130. package/dist/internal/download/telemetry.d.ts +3 -3
  131. package/dist/internal/download/telemetry.js +4 -2
  132. package/dist/internal/download/telemetry.js.map +1 -1
  133. package/dist/internal/download/telemetry.test.js +8 -8
  134. package/dist/internal/download/telemetry.test.js.map +1 -1
  135. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  136. package/dist/internal/download/thumbnailDownloader.js +6 -6
  137. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  138. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  139. package/dist/internal/errors.d.ts +1 -1
  140. package/dist/internal/errors.js +1 -3
  141. package/dist/internal/errors.js.map +1 -1
  142. package/dist/internal/events/apiService.d.ts +5 -7
  143. package/dist/internal/events/apiService.js +19 -22
  144. package/dist/internal/events/apiService.js.map +1 -1
  145. package/dist/internal/events/coreEventManager.d.ts +9 -12
  146. package/dist/internal/events/coreEventManager.js +19 -36
  147. package/dist/internal/events/coreEventManager.js.map +1 -1
  148. package/dist/internal/events/coreEventManager.test.d.ts +1 -0
  149. package/dist/internal/events/coreEventManager.test.js +87 -0
  150. package/dist/internal/events/coreEventManager.test.js.map +1 -0
  151. package/dist/internal/events/eventManager.d.ts +11 -36
  152. package/dist/internal/events/eventManager.js +59 -106
  153. package/dist/internal/events/eventManager.js.map +1 -1
  154. package/dist/internal/events/eventManager.test.js +177 -83
  155. package/dist/internal/events/eventManager.test.js.map +1 -1
  156. package/dist/internal/events/index.d.ts +16 -36
  157. package/dist/internal/events/index.js +56 -72
  158. package/dist/internal/events/index.js.map +1 -1
  159. package/dist/internal/events/interface.d.ts +59 -14
  160. package/dist/internal/events/interface.js +12 -3
  161. package/dist/internal/events/interface.js.map +1 -1
  162. package/dist/internal/events/volumeEventManager.d.ts +9 -19
  163. package/dist/internal/events/volumeEventManager.js +58 -45
  164. package/dist/internal/events/volumeEventManager.js.map +1 -1
  165. package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
  166. package/dist/internal/events/volumeEventManager.test.js +203 -0
  167. package/dist/internal/events/volumeEventManager.test.js.map +1 -0
  168. package/dist/internal/nodes/apiService.d.ts +4 -3
  169. package/dist/internal/nodes/apiService.js +36 -15
  170. package/dist/internal/nodes/apiService.js.map +1 -1
  171. package/dist/internal/nodes/apiService.test.js +60 -41
  172. package/dist/internal/nodes/apiService.test.js.map +1 -1
  173. package/dist/internal/nodes/cache.d.ts +14 -5
  174. package/dist/internal/nodes/cache.js +31 -7
  175. package/dist/internal/nodes/cache.js.map +1 -1
  176. package/dist/internal/nodes/cache.test.js +31 -9
  177. package/dist/internal/nodes/cache.test.js.map +1 -1
  178. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  179. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  180. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  181. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  182. package/dist/internal/nodes/cryptoService.d.ts +4 -4
  183. package/dist/internal/nodes/cryptoService.js +11 -17
  184. package/dist/internal/nodes/cryptoService.js.map +1 -1
  185. package/dist/internal/nodes/cryptoService.test.js +320 -241
  186. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  187. package/dist/internal/nodes/events.d.ts +8 -84
  188. package/dist/internal/nodes/events.js +43 -217
  189. package/dist/internal/nodes/events.js.map +1 -1
  190. package/dist/internal/nodes/events.test.js +35 -279
  191. package/dist/internal/nodes/events.test.js.map +1 -1
  192. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  193. package/dist/internal/nodes/extendedAttributes.js +3 -1
  194. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  195. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  196. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  197. package/dist/internal/nodes/index.d.ts +12 -13
  198. package/dist/internal/nodes/index.js +5 -5
  199. package/dist/internal/nodes/index.js.map +1 -1
  200. package/dist/internal/nodes/index.test.js +24 -32
  201. package/dist/internal/nodes/index.test.js.map +1 -1
  202. package/dist/internal/nodes/interface.d.ts +2 -2
  203. package/dist/internal/nodes/nodesAccess.d.ts +22 -7
  204. package/dist/internal/nodes/nodesAccess.js +65 -16
  205. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  206. package/dist/internal/nodes/nodesAccess.test.js +165 -101
  207. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  208. package/dist/internal/nodes/nodesManagement.d.ts +7 -9
  209. package/dist/internal/nodes/nodesManagement.js +21 -33
  210. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  211. package/dist/internal/nodes/nodesManagement.test.js +42 -21
  212. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  213. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  214. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  215. package/dist/internal/photos/albums.d.ts +3 -3
  216. package/dist/internal/photos/albums.js.map +1 -1
  217. package/dist/internal/photos/apiService.d.ts +1 -1
  218. package/dist/internal/photos/apiService.js +3 -6
  219. package/dist/internal/photos/apiService.js.map +1 -1
  220. package/dist/internal/photos/cache.d.ts +1 -1
  221. package/dist/internal/photos/index.d.ts +5 -5
  222. package/dist/internal/photos/index.js.map +1 -1
  223. package/dist/internal/photos/interface.d.ts +2 -2
  224. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  225. package/dist/internal/photos/photosTimeline.js +1 -2
  226. package/dist/internal/photos/photosTimeline.js.map +1 -1
  227. package/dist/internal/sdkEvents.d.ts +1 -1
  228. package/dist/internal/sdkEvents.js +2 -7
  229. package/dist/internal/sdkEvents.js.map +1 -1
  230. package/dist/internal/sdkEvents.test.js +8 -8
  231. package/dist/internal/shares/apiService.d.ts +2 -2
  232. package/dist/internal/shares/apiService.js +5 -3
  233. package/dist/internal/shares/apiService.js.map +1 -1
  234. package/dist/internal/shares/cache.d.ts +4 -2
  235. package/dist/internal/shares/cache.js +14 -6
  236. package/dist/internal/shares/cache.js.map +1 -1
  237. package/dist/internal/shares/cache.test.js.map +1 -1
  238. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  239. package/dist/internal/shares/cryptoCache.test.js +8 -2
  240. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  241. package/dist/internal/shares/cryptoService.d.ts +3 -3
  242. package/dist/internal/shares/cryptoService.js.map +1 -1
  243. package/dist/internal/shares/cryptoService.test.js +42 -42
  244. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  245. package/dist/internal/shares/index.d.ts +4 -4
  246. package/dist/internal/shares/index.js.map +1 -1
  247. package/dist/internal/shares/interface.d.ts +2 -2
  248. package/dist/internal/shares/manager.d.ts +8 -7
  249. package/dist/internal/shares/manager.js +3 -0
  250. package/dist/internal/shares/manager.js.map +1 -1
  251. package/dist/internal/shares/manager.test.js +71 -63
  252. package/dist/internal/shares/manager.test.js.map +1 -1
  253. package/dist/internal/sharing/apiService.d.ts +4 -4
  254. package/dist/internal/sharing/apiService.js +5 -3
  255. package/dist/internal/sharing/apiService.js.map +1 -1
  256. package/dist/internal/sharing/cache.d.ts +1 -1
  257. package/dist/internal/sharing/cache.test.js +33 -33
  258. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  259. package/dist/internal/sharing/cryptoService.js +3 -4
  260. package/dist/internal/sharing/cryptoService.js.map +1 -1
  261. package/dist/internal/sharing/cryptoService.test.js +39 -39
  262. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  263. package/dist/internal/sharing/events.d.ts +24 -56
  264. package/dist/internal/sharing/events.js +45 -138
  265. package/dist/internal/sharing/events.js.map +1 -1
  266. package/dist/internal/sharing/events.test.js +85 -189
  267. package/dist/internal/sharing/events.test.js.map +1 -1
  268. package/dist/internal/sharing/index.d.ts +8 -9
  269. package/dist/internal/sharing/index.js +5 -5
  270. package/dist/internal/sharing/index.js.map +1 -1
  271. package/dist/internal/sharing/interface.d.ts +8 -4
  272. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  273. package/dist/internal/sharing/sharingAccess.js +8 -4
  274. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  275. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  276. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  277. package/dist/internal/sharing/sharingManagement.d.ts +5 -6
  278. package/dist/internal/sharing/sharingManagement.js +12 -16
  279. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  280. package/dist/internal/sharing/sharingManagement.test.js +305 -286
  281. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  282. package/dist/internal/uids.js.map +1 -1
  283. package/dist/internal/upload/apiService.d.ts +5 -6
  284. package/dist/internal/upload/apiService.js +8 -5
  285. package/dist/internal/upload/apiService.js.map +1 -1
  286. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  287. package/dist/internal/upload/blockVerifier.js +1 -1
  288. package/dist/internal/upload/blockVerifier.js.map +1 -1
  289. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  290. package/dist/internal/upload/cryptoService.d.ts +4 -4
  291. package/dist/internal/upload/cryptoService.js +4 -4
  292. package/dist/internal/upload/cryptoService.js.map +1 -1
  293. package/dist/internal/upload/digests.js.map +1 -1
  294. package/dist/internal/upload/fileUploader.d.ts +6 -6
  295. package/dist/internal/upload/fileUploader.js.map +1 -1
  296. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  297. package/dist/internal/upload/index.d.ts +6 -6
  298. package/dist/internal/upload/index.js +3 -3
  299. package/dist/internal/upload/index.js.map +1 -1
  300. package/dist/internal/upload/interface.d.ts +5 -3
  301. package/dist/internal/upload/manager.d.ts +8 -8
  302. package/dist/internal/upload/manager.js +23 -52
  303. package/dist/internal/upload/manager.js.map +1 -1
  304. package/dist/internal/upload/manager.test.js +185 -147
  305. package/dist/internal/upload/manager.test.js.map +1 -1
  306. package/dist/internal/upload/streamUploader.d.ts +6 -6
  307. package/dist/internal/upload/streamUploader.js +9 -8
  308. package/dist/internal/upload/streamUploader.js.map +1 -1
  309. package/dist/internal/upload/streamUploader.test.js +17 -12
  310. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  311. package/dist/internal/upload/telemetry.d.ts +3 -3
  312. package/dist/internal/upload/telemetry.js +5 -3
  313. package/dist/internal/upload/telemetry.js.map +1 -1
  314. package/dist/internal/upload/telemetry.test.js +8 -8
  315. package/dist/internal/upload/telemetry.test.js.map +1 -1
  316. package/dist/protonDriveClient.d.ts +27 -170
  317. package/dist/protonDriveClient.js +37 -198
  318. package/dist/protonDriveClient.js.map +1 -1
  319. package/dist/protonDrivePhotosClient.js +3 -2
  320. package/dist/protonDrivePhotosClient.js.map +1 -1
  321. package/dist/telemetry.js +18 -15
  322. package/dist/telemetry.js.map +1 -1
  323. package/dist/tests/logger.js.map +1 -1
  324. package/dist/tests/telemetry.d.ts +1 -1
  325. package/dist/transformers.js +4 -2
  326. package/dist/transformers.js.map +1 -1
  327. package/package.json +3 -3
  328. package/src/cache/index.ts +1 -0
  329. package/src/cache/interface.ts +22 -22
  330. package/src/cache/memoryCache.test.ts +7 -7
  331. package/src/cache/memoryCache.ts +5 -5
  332. package/src/cache/nullCache.ts +38 -0
  333. package/src/config.ts +17 -2
  334. package/src/crypto/driveCrypto.test.ts +15 -15
  335. package/src/crypto/driveCrypto.ts +120 -156
  336. package/src/crypto/hmac.ts +1 -1
  337. package/src/crypto/interface.ts +63 -72
  338. package/src/crypto/openPGPCrypto.ts +76 -94
  339. package/src/crypto/utils.ts +1 -1
  340. package/src/diagnostic/eventsGenerator.ts +48 -0
  341. package/src/diagnostic/httpClient.ts +84 -0
  342. package/src/diagnostic/index.ts +40 -0
  343. package/src/diagnostic/integrityVerificationStream.ts +55 -0
  344. package/src/diagnostic/interface.ts +158 -0
  345. package/src/diagnostic/sdkDiagnostic.ts +249 -0
  346. package/src/diagnostic/sdkDiagnosticFull.ts +37 -0
  347. package/src/diagnostic/telemetry.ts +74 -0
  348. package/src/diagnostic/zipGenerators.test.ts +177 -0
  349. package/src/diagnostic/zipGenerators.ts +70 -0
  350. package/src/errors.ts +25 -22
  351. package/src/index.ts +3 -3
  352. package/src/interface/account.ts +10 -10
  353. package/src/interface/author.ts +6 -6
  354. package/src/interface/config.ts +28 -0
  355. package/src/interface/devices.ts +6 -6
  356. package/src/interface/download.ts +12 -9
  357. package/src/interface/events.ts +76 -25
  358. package/src/interface/httpClient.ts +11 -27
  359. package/src/interface/index.ts +81 -20
  360. package/src/interface/nodes.ts +67 -60
  361. package/src/interface/result.ts +1 -3
  362. package/src/interface/sharing.ts +60 -56
  363. package/src/interface/telemetry.ts +74 -74
  364. package/src/interface/thumbnail.ts +5 -6
  365. package/src/interface/upload.ts +25 -11
  366. package/src/internal/apiService/apiService.test.ts +109 -76
  367. package/src/internal/apiService/apiService.ts +40 -26
  368. package/src/internal/apiService/coreTypes.ts +2474 -2463
  369. package/src/internal/apiService/driveTypes.ts +1868 -1822
  370. package/src/internal/apiService/errorCodes.ts +4 -4
  371. package/src/internal/apiService/errors.test.ts +25 -23
  372. package/src/internal/apiService/errors.ts +15 -9
  373. package/src/internal/apiService/index.ts +1 -1
  374. package/src/internal/apiService/transformers.ts +2 -2
  375. package/src/internal/asyncIteratorMap.test.ts +4 -4
  376. package/src/internal/asyncIteratorMap.ts +1 -1
  377. package/src/internal/asyncIteratorRace.test.ts +149 -0
  378. package/src/internal/asyncIteratorRace.ts +79 -0
  379. package/src/internal/batch.test.ts +50 -0
  380. package/src/internal/batch.ts +9 -0
  381. package/src/internal/batchLoading.test.ts +13 -14
  382. package/src/internal/batchLoading.ts +8 -8
  383. package/src/internal/devices/apiService.ts +58 -51
  384. package/src/internal/devices/cryptoService.ts +22 -17
  385. package/src/internal/devices/index.ts +17 -10
  386. package/src/internal/devices/interface.ts +21 -12
  387. package/src/internal/devices/manager.test.ts +40 -9
  388. package/src/internal/devices/manager.ts +3 -3
  389. package/src/internal/download/apiService.ts +72 -52
  390. package/src/internal/download/cryptoService.ts +34 -18
  391. package/src/internal/download/fileDownloader.test.ts +25 -9
  392. package/src/internal/download/fileDownloader.ts +38 -20
  393. package/src/internal/download/index.ts +19 -19
  394. package/src/internal/download/interface.ts +19 -20
  395. package/src/internal/download/queue.ts +3 -3
  396. package/src/internal/download/telemetry.test.ts +11 -11
  397. package/src/internal/download/telemetry.ts +24 -14
  398. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  399. package/src/internal/download/thumbnailDownloader.ts +43 -32
  400. package/src/internal/errors.ts +7 -5
  401. package/src/internal/events/apiService.ts +46 -36
  402. package/src/internal/events/coreEventManager.test.ts +101 -0
  403. package/src/internal/events/coreEventManager.ts +26 -48
  404. package/src/internal/events/eventManager.test.ts +211 -93
  405. package/src/internal/events/eventManager.ts +72 -117
  406. package/src/internal/events/index.ts +71 -91
  407. package/src/internal/events/interface.ts +92 -29
  408. package/src/internal/events/volumeEventManager.test.ts +239 -0
  409. package/src/internal/events/volumeEventManager.ts +68 -57
  410. package/src/internal/nodes/apiService.test.ts +197 -147
  411. package/src/internal/nodes/apiService.ts +288 -174
  412. package/src/internal/nodes/cache.test.ts +48 -20
  413. package/src/internal/nodes/cache.ts +79 -45
  414. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  415. package/src/internal/nodes/cryptoCache.ts +10 -5
  416. package/src/internal/nodes/cryptoService.test.ts +492 -351
  417. package/src/internal/nodes/cryptoService.ts +171 -89
  418. package/src/internal/nodes/events.test.ts +48 -344
  419. package/src/internal/nodes/events.ts +48 -254
  420. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  421. package/src/internal/nodes/extendedAttributes.ts +20 -15
  422. package/src/internal/nodes/index.test.ts +51 -55
  423. package/src/internal/nodes/index.ts +32 -22
  424. package/src/internal/nodes/interface.ts +44 -31
  425. package/src/internal/nodes/nodesAccess.test.ts +237 -130
  426. package/src/internal/nodes/nodesAccess.ts +113 -50
  427. package/src/internal/nodes/nodesManagement.test.ts +64 -39
  428. package/src/internal/nodes/nodesManagement.ts +51 -62
  429. package/src/internal/nodes/nodesRevisions.ts +7 -7
  430. package/src/internal/nodes/validations.ts +2 -2
  431. package/src/internal/photos/albums.ts +5 -5
  432. package/src/internal/photos/apiService.ts +4 -7
  433. package/src/internal/photos/cache.ts +1 -1
  434. package/src/internal/photos/index.ts +8 -8
  435. package/src/internal/photos/interface.ts +2 -2
  436. package/src/internal/photos/photosTimeline.ts +4 -5
  437. package/src/internal/sdkEvents.test.ts +10 -10
  438. package/src/internal/sdkEvents.ts +5 -13
  439. package/src/internal/shares/apiService.ts +44 -33
  440. package/src/internal/shares/cache.test.ts +6 -4
  441. package/src/internal/shares/cache.ts +25 -14
  442. package/src/internal/shares/cryptoCache.test.ts +17 -11
  443. package/src/internal/shares/cryptoCache.ts +4 -4
  444. package/src/internal/shares/cryptoService.test.ts +72 -74
  445. package/src/internal/shares/cryptoService.ts +48 -23
  446. package/src/internal/shares/index.ts +23 -11
  447. package/src/internal/shares/interface.ts +8 -8
  448. package/src/internal/shares/manager.test.ts +88 -80
  449. package/src/internal/shares/manager.ts +27 -23
  450. package/src/internal/sharing/apiService.ts +283 -175
  451. package/src/internal/sharing/cache.test.ts +35 -35
  452. package/src/internal/sharing/cache.ts +3 -3
  453. package/src/internal/sharing/cryptoService.test.ts +58 -46
  454. package/src/internal/sharing/cryptoService.ts +121 -83
  455. package/src/internal/sharing/events.test.ts +97 -207
  456. package/src/internal/sharing/events.ts +46 -157
  457. package/src/internal/sharing/index.ts +24 -16
  458. package/src/internal/sharing/interface.ts +46 -42
  459. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  460. package/src/internal/sharing/sharingAccess.ts +39 -21
  461. package/src/internal/sharing/sharingManagement.test.ts +405 -335
  462. package/src/internal/sharing/sharingManagement.ts +144 -75
  463. package/src/internal/uids.ts +1 -1
  464. package/src/internal/upload/apiService.ts +168 -119
  465. package/src/internal/upload/blockVerifier.ts +8 -6
  466. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  467. package/src/internal/upload/cryptoService.ts +42 -36
  468. package/src/internal/upload/digests.ts +2 -2
  469. package/src/internal/upload/fileUploader.test.ts +15 -3
  470. package/src/internal/upload/fileUploader.ts +39 -17
  471. package/src/internal/upload/index.ts +17 -18
  472. package/src/internal/upload/interface.ts +79 -77
  473. package/src/internal/upload/manager.test.ts +222 -175
  474. package/src/internal/upload/manager.ts +74 -80
  475. package/src/internal/upload/queue.ts +3 -3
  476. package/src/internal/upload/streamUploader.test.ts +40 -27
  477. package/src/internal/upload/streamUploader.ts +87 -71
  478. package/src/internal/upload/telemetry.test.ts +11 -11
  479. package/src/internal/upload/telemetry.ts +25 -15
  480. package/src/internal/wait.test.ts +1 -1
  481. package/src/internal/wait.ts +3 -3
  482. package/src/protonDriveClient.ts +189 -276
  483. package/src/protonDrivePhotosClient.ts +20 -13
  484. package/src/telemetry.ts +60 -52
  485. package/src/tests/logger.ts +1 -1
  486. package/src/tests/telemetry.ts +2 -2
  487. package/src/transformers.ts +27 -21
  488. package/src/version.ts +0 -1
  489. package/dist/internal/events/cache.d.ts +0 -28
  490. package/dist/internal/events/cache.js +0 -67
  491. package/dist/internal/events/cache.js.map +0 -1
  492. package/dist/internal/events/cache.test.js +0 -43
  493. package/dist/internal/events/cache.test.js.map +0 -1
  494. package/src/internal/events/cache.test.ts +0 -47
  495. package/src/internal/events/cache.ts +0 -80
  496. /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
@@ -1,53 +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) {
55
+ constructor(
56
+ private apiService: DriveAPIService,
57
+ private clientUid: string | undefined,
58
+ ) {
31
59
  this.apiService = apiService;
60
+ this.clientUid = clientUid;
32
61
  }
33
62
 
34
- async checkAvailableHashes(parentNodeUid: string, hashes: string[]): Promise<{
35
- availalbleHashes: string[],
63
+ async checkAvailableHashes(
64
+ parentNodeUid: string,
65
+ hashes: string[],
66
+ ): Promise<{
67
+ availalbleHashes: string[];
36
68
  pendingHashes: {
37
- hash: string,
38
- nodeUid: string,
39
- revisionUid: string,
40
- clientUid?: string,
41
- }[],
69
+ hash: string;
70
+ nodeUid: string;
71
+ revisionUid: string;
72
+ clientUid?: string;
73
+ }[];
42
74
  }> {
43
75
  const { volumeId, nodeId: parentNodeId } = splitNodeUid(parentNodeUid);
44
- const result = await this.apiService.post<
45
- PostCheckAvailableHashesRequest,
46
- PostCheckAvailableHashesResponse
47
- >(`drive/v2/volumes/${volumeId}/links/${parentNodeId}/checkAvailableHashes`, {
48
- Hashes: hashes,
49
- ClientUID: null,
50
- });
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
+ );
51
83
 
52
84
  return {
53
85
  availalbleHashes: result.AvailableHashes,
@@ -57,103 +89,111 @@ export class UploadAPIService {
57
89
  revisionUid: makeNodeRevisionUid(volumeId, hash.LinkID, hash.RevisionID),
58
90
  clientUid: hash.ClientUID || undefined,
59
91
  })),
60
- }
92
+ };
61
93
  }
62
94
 
63
- async createDraft(parentNodeUid: string, node: {
64
- armoredEncryptedName: string,
65
- hash: string,
66
- mediaType: string,
67
- clientUID?: 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: node.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
- clientUID?: string,
107
- intendedUploadSize?: number,
108
- }): Promise<{
109
- nodeRevisionUid: string,
138
+ async createDraftRevision(
139
+ nodeUid: string,
140
+ revision: {
141
+ currentRevisionUid: string;
142
+ intendedUploadSize?: number;
143
+ },
144
+ ): Promise<{
145
+ nodeRevisionUid: string;
110
146
  }> {
111
147
  const { volumeId, nodeId } = splitNodeUid(nodeUid);
112
148
  const { revisionId: currentRevisionId } = splitNodeRevisionUid(revision.currentRevisionUid);
113
-
114
- const result = await this.apiService.post<
115
- PostCreateDraftRevisionRequest,
116
- PostCreateDraftRevisionResponse
117
- >(`drive/v2/volumes/${volumeId}/files/${nodeId}/revisions`, {
118
- CurrentRevisionID: currentRevisionId,
119
- ClientUID: revision.clientUID || null,
120
- IntendedUploadSize: revision.intendedUploadSize || null,
121
- });
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
+ );
122
158
 
123
159
  return {
124
160
  nodeRevisionUid: makeNodeRevisionUid(volumeId, nodeId, result.Revision.ID),
125
- }
161
+ };
126
162
  }
127
163
 
128
164
  async getVerificationData(draftNodeRevisionUid: string): Promise<{
129
- verificationCode: Uint8Array,
130
- base64ContentKeyPacket: string,
165
+ verificationCode: Uint8Array;
166
+ base64ContentKeyPacket: string;
131
167
  }> {
132
168
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
133
- const result = await this.apiService.get<
134
- GetVerificationDataResponse
135
- >(`drive/v2/volumes/${volumeId}/links/${nodeId}/revisions/${revisionId}/verification`);
136
-
169
+ const result = await this.apiService.get<GetVerificationDataResponse>(
170
+ `drive/v2/volumes/${volumeId}/links/${nodeId}/revisions/${revisionId}/verification`,
171
+ );
172
+
137
173
  return {
138
174
  verificationCode: base64StringToUint8Array(result.VerificationCode),
139
175
  base64ContentKeyPacket: result.ContentKeyPacket,
140
- }
176
+ };
141
177
  }
142
178
 
143
- async requestBlockUpload(draftNodeRevisionUid: string, addressId: string, blocks: {
144
- contentBlocks: {
145
- index: number,
146
- hash: Uint8Array,
147
- encryptedSize: number,
148
- armoredSignature: string,
149
- verificationToken: Uint8Array,
150
- }[],
151
- thumbnails?: {
152
- type: ThumbnailType,
153
- hash: Uint8Array,
154
- encryptedSize: number,
155
- }[],
156
- }): 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> {
157
197
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
158
198
  const result = await this.apiService.post<
159
199
  // TODO: Deprected fields but not properly marked in the types.
@@ -195,11 +235,14 @@ export class UploadAPIService {
195
235
  };
196
236
  }
197
237
 
198
- async commitDraftRevision(draftNodeRevisionUid: string, options: {
199
- armoredManifestSignature: string,
200
- signatureEmail: string,
201
- armoredExtendedAttributes?: string,
202
- }): Promise<void> {
238
+ async commitDraftRevision(
239
+ draftNodeRevisionUid: string,
240
+ options: {
241
+ armoredManifestSignature: string;
242
+ signatureEmail: string;
243
+ armoredExtendedAttributes?: string;
244
+ },
245
+ ): Promise<void> {
203
246
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(draftNodeRevisionUid);
204
247
  await this.apiService.put<
205
248
  // TODO: Deprected fields but not properly marked in the types.
@@ -216,16 +259,16 @@ export class UploadAPIService {
216
259
  async deleteDraft(draftNodeUid: string): Promise<void> {
217
260
  const { volumeId, nodeId } = splitNodeUid(draftNodeUid);
218
261
 
219
- const response = await this.apiService.post<
220
- PostDeleteNodesRequest,
221
- PostDeleteNodesResponse
222
- >(`drive/v2/volumes/${volumeId}/delete_multiple`, {
223
- LinkIDs: [nodeId],
224
- });
262
+ const response = await this.apiService.post<PostDeleteNodesRequest, PostDeleteNodesResponse>(
263
+ `drive/v2/volumes/${volumeId}/delete_multiple`,
264
+ {
265
+ LinkIDs: [nodeId],
266
+ },
267
+ );
225
268
 
226
269
  const code = response.Responses?.[0].Response.Code || 0;
227
270
  if (!isCodeOk(code)) {
228
- throw new APICodeError(c('Error').t`Unknown error ${code}`, code)
271
+ throw new APICodeError(c('Error').t`Unknown error ${code}`, code);
229
272
  }
230
273
  }
231
274
 
@@ -234,9 +277,15 @@ export class UploadAPIService {
234
277
  await this.apiService.delete(`/drive/v2/volumes/${volumeId}/files/${nodeId}/revisions/${revisionId}`);
235
278
  }
236
279
 
237
- 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> {
238
287
  const formData = new FormData();
239
- formData.append("Block", new Blob([block]), "blob");
288
+ formData.append('Block', new Blob([block]), 'blob');
240
289
 
241
290
  await this.apiService.postBlockStream(url, token, formData, onProgress, signal);
242
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
  }