@protontech/drive-sdk 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +2 -1
  120. package/dist/internal/events/eventManager.js +9 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +84 -60
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +10 -9
  125. package/dist/internal/events/index.js +38 -32
  126. package/dist/internal/events/index.js.map +1 -1
  127. package/dist/internal/events/interface.d.ts +1 -1
  128. package/dist/internal/events/interface.js +0 -1
  129. package/dist/internal/events/interface.js.map +1 -1
  130. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  131. package/dist/internal/events/volumeEventManager.js.map +1 -1
  132. package/dist/internal/events/volumeEventManager.test.js +55 -55
  133. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  134. package/dist/internal/nodes/apiService.d.ts +4 -3
  135. package/dist/internal/nodes/apiService.js +36 -15
  136. package/dist/internal/nodes/apiService.js.map +1 -1
  137. package/dist/internal/nodes/apiService.test.js +60 -41
  138. package/dist/internal/nodes/apiService.test.js.map +1 -1
  139. package/dist/internal/nodes/cache.d.ts +5 -5
  140. package/dist/internal/nodes/cache.js +14 -7
  141. package/dist/internal/nodes/cache.js.map +1 -1
  142. package/dist/internal/nodes/cache.test.js +31 -9
  143. package/dist/internal/nodes/cache.test.js.map +1 -1
  144. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  145. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  146. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  147. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  148. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  149. package/dist/internal/nodes/cryptoService.js +11 -17
  150. package/dist/internal/nodes/cryptoService.js.map +1 -1
  151. package/dist/internal/nodes/cryptoService.test.js +320 -241
  152. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  153. package/dist/internal/nodes/events.d.ts +3 -3
  154. package/dist/internal/nodes/events.js +7 -7
  155. package/dist/internal/nodes/events.js.map +1 -1
  156. package/dist/internal/nodes/events.test.js +27 -21
  157. package/dist/internal/nodes/events.test.js.map +1 -1
  158. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  159. package/dist/internal/nodes/extendedAttributes.js +3 -1
  160. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  161. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  162. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  163. package/dist/internal/nodes/index.d.ts +10 -10
  164. package/dist/internal/nodes/index.js.map +1 -1
  165. package/dist/internal/nodes/index.test.d.ts +1 -0
  166. package/dist/internal/nodes/index.test.js +106 -0
  167. package/dist/internal/nodes/index.test.js.map +1 -0
  168. package/dist/internal/nodes/interface.d.ts +2 -2
  169. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  170. package/dist/internal/nodes/nodesAccess.js +28 -16
  171. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  172. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  173. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  174. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  175. package/dist/internal/nodes/nodesManagement.js +9 -7
  176. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  177. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  178. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  179. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  180. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  181. package/dist/internal/photos/albums.d.ts +3 -3
  182. package/dist/internal/photos/albums.js.map +1 -1
  183. package/dist/internal/photos/apiService.d.ts +1 -1
  184. package/dist/internal/photos/apiService.js +3 -6
  185. package/dist/internal/photos/apiService.js.map +1 -1
  186. package/dist/internal/photos/cache.d.ts +1 -1
  187. package/dist/internal/photos/index.d.ts +5 -5
  188. package/dist/internal/photos/index.js.map +1 -1
  189. package/dist/internal/photos/interface.d.ts +2 -2
  190. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  191. package/dist/internal/photos/photosTimeline.js +1 -2
  192. package/dist/internal/photos/photosTimeline.js.map +1 -1
  193. package/dist/internal/sdkEvents.d.ts +1 -1
  194. package/dist/internal/sdkEvents.js +2 -7
  195. package/dist/internal/sdkEvents.js.map +1 -1
  196. package/dist/internal/sdkEvents.test.js +8 -8
  197. package/dist/internal/shares/apiService.d.ts +2 -2
  198. package/dist/internal/shares/apiService.js +5 -3
  199. package/dist/internal/shares/apiService.js.map +1 -1
  200. package/dist/internal/shares/cache.d.ts +2 -2
  201. package/dist/internal/shares/cache.js +12 -6
  202. package/dist/internal/shares/cache.js.map +1 -1
  203. package/dist/internal/shares/cache.test.js.map +1 -1
  204. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  205. package/dist/internal/shares/cryptoCache.test.js +8 -2
  206. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.d.ts +3 -3
  208. package/dist/internal/shares/cryptoService.js.map +1 -1
  209. package/dist/internal/shares/cryptoService.test.js +42 -42
  210. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  211. package/dist/internal/shares/index.d.ts +4 -4
  212. package/dist/internal/shares/index.js.map +1 -1
  213. package/dist/internal/shares/interface.d.ts +2 -2
  214. package/dist/internal/shares/manager.d.ts +7 -7
  215. package/dist/internal/shares/manager.js.map +1 -1
  216. package/dist/internal/shares/manager.test.js +71 -63
  217. package/dist/internal/shares/manager.test.js.map +1 -1
  218. package/dist/internal/sharing/apiService.d.ts +4 -4
  219. package/dist/internal/sharing/apiService.js +4 -3
  220. package/dist/internal/sharing/apiService.js.map +1 -1
  221. package/dist/internal/sharing/cache.d.ts +2 -1
  222. package/dist/internal/sharing/cache.js +9 -0
  223. package/dist/internal/sharing/cache.js.map +1 -1
  224. package/dist/internal/sharing/cache.test.js +33 -33
  225. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  226. package/dist/internal/sharing/cryptoService.js +3 -5
  227. package/dist/internal/sharing/cryptoService.js.map +1 -1
  228. package/dist/internal/sharing/cryptoService.test.js +39 -39
  229. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  230. package/dist/internal/sharing/events.d.ts +5 -4
  231. package/dist/internal/sharing/events.js +28 -19
  232. package/dist/internal/sharing/events.js.map +1 -1
  233. package/dist/internal/sharing/events.test.js +101 -88
  234. package/dist/internal/sharing/events.test.js.map +1 -1
  235. package/dist/internal/sharing/index.d.ts +6 -6
  236. package/dist/internal/sharing/index.js.map +1 -1
  237. package/dist/internal/sharing/interface.d.ts +5 -4
  238. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  239. package/dist/internal/sharing/sharingAccess.js +8 -4
  240. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  241. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  242. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  243. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  244. package/dist/internal/sharing/sharingManagement.js +5 -7
  245. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  246. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  247. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  248. package/dist/internal/uids.js.map +1 -1
  249. package/dist/internal/upload/apiService.d.ts +3 -3
  250. package/dist/internal/upload/apiService.js +1 -1
  251. package/dist/internal/upload/apiService.js.map +1 -1
  252. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  253. package/dist/internal/upload/blockVerifier.js +1 -1
  254. package/dist/internal/upload/blockVerifier.js.map +1 -1
  255. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  256. package/dist/internal/upload/cryptoService.d.ts +4 -4
  257. package/dist/internal/upload/cryptoService.js +4 -4
  258. package/dist/internal/upload/cryptoService.js.map +1 -1
  259. package/dist/internal/upload/digests.js.map +1 -1
  260. package/dist/internal/upload/fileUploader.d.ts +6 -6
  261. package/dist/internal/upload/fileUploader.js.map +1 -1
  262. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  263. package/dist/internal/upload/index.d.ts +5 -5
  264. package/dist/internal/upload/index.js.map +1 -1
  265. package/dist/internal/upload/interface.d.ts +4 -3
  266. package/dist/internal/upload/manager.d.ts +5 -5
  267. package/dist/internal/upload/manager.js +15 -9
  268. package/dist/internal/upload/manager.js.map +1 -1
  269. package/dist/internal/upload/manager.test.js +139 -128
  270. package/dist/internal/upload/manager.test.js.map +1 -1
  271. package/dist/internal/upload/streamUploader.d.ts +6 -6
  272. package/dist/internal/upload/streamUploader.js +9 -7
  273. package/dist/internal/upload/streamUploader.js.map +1 -1
  274. package/dist/internal/upload/streamUploader.test.js +17 -12
  275. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  276. package/dist/internal/upload/telemetry.d.ts +3 -3
  277. package/dist/internal/upload/telemetry.js +5 -3
  278. package/dist/internal/upload/telemetry.js.map +1 -1
  279. package/dist/internal/upload/telemetry.test.js +8 -8
  280. package/dist/internal/upload/telemetry.test.js.map +1 -1
  281. package/dist/protonDriveClient.d.ts +8 -8
  282. package/dist/protonDriveClient.js +12 -9
  283. package/dist/protonDriveClient.js.map +1 -1
  284. package/dist/protonDrivePhotosClient.js.map +1 -1
  285. package/dist/telemetry.js +18 -15
  286. package/dist/telemetry.js.map +1 -1
  287. package/dist/tests/logger.js.map +1 -1
  288. package/dist/tests/telemetry.d.ts +1 -1
  289. package/dist/transformers.d.ts +1 -1
  290. package/dist/transformers.js +5 -2
  291. package/dist/transformers.js.map +1 -1
  292. package/package.json +1 -1
  293. package/src/cache/interface.ts +22 -22
  294. package/src/cache/memoryCache.test.ts +7 -7
  295. package/src/cache/memoryCache.ts +4 -4
  296. package/src/cache/nullCache.ts +1 -1
  297. package/src/config.ts +5 -5
  298. package/src/crypto/driveCrypto.test.ts +15 -15
  299. package/src/crypto/driveCrypto.ts +120 -156
  300. package/src/crypto/hmac.ts +1 -1
  301. package/src/crypto/interface.ts +63 -72
  302. package/src/crypto/openPGPCrypto.ts +74 -94
  303. package/src/crypto/utils.ts +1 -1
  304. package/src/diagnostic/eventsGenerator.ts +2 -2
  305. package/src/diagnostic/httpClient.ts +6 -2
  306. package/src/diagnostic/index.ts +12 -10
  307. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  308. package/src/diagnostic/interface.ts +81 -81
  309. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  310. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  311. package/src/diagnostic/telemetry.ts +4 -1
  312. package/src/diagnostic/zipGenerators.test.ts +1 -1
  313. package/src/diagnostic/zipGenerators.ts +3 -3
  314. package/src/errors.ts +21 -21
  315. package/src/index.ts +3 -3
  316. package/src/interface/account.ts +10 -10
  317. package/src/interface/author.ts +6 -6
  318. package/src/interface/config.ts +4 -4
  319. package/src/interface/devices.ts +6 -6
  320. package/src/interface/download.ts +12 -9
  321. package/src/interface/events.ts +45 -39
  322. package/src/interface/httpClient.ts +11 -11
  323. package/src/interface/index.ts +76 -19
  324. package/src/interface/nodes.ts +47 -49
  325. package/src/interface/result.ts +1 -3
  326. package/src/interface/sharing.ts +60 -57
  327. package/src/interface/telemetry.ts +74 -74
  328. package/src/interface/thumbnail.ts +5 -6
  329. package/src/interface/upload.ts +20 -12
  330. package/src/internal/apiService/apiService.test.ts +109 -76
  331. package/src/internal/apiService/apiService.ts +40 -26
  332. package/src/internal/apiService/coreTypes.ts +2474 -2463
  333. package/src/internal/apiService/driveTypes.ts +1868 -1822
  334. package/src/internal/apiService/errorCodes.ts +4 -4
  335. package/src/internal/apiService/errors.test.ts +25 -23
  336. package/src/internal/apiService/errors.ts +15 -9
  337. package/src/internal/apiService/index.ts +1 -1
  338. package/src/internal/apiService/transformers.ts +2 -2
  339. package/src/internal/asyncIteratorMap.test.ts +4 -4
  340. package/src/internal/asyncIteratorMap.ts +1 -1
  341. package/src/internal/asyncIteratorRace.test.ts +149 -0
  342. package/src/internal/asyncIteratorRace.ts +79 -0
  343. package/src/internal/batch.test.ts +50 -0
  344. package/src/internal/batch.ts +9 -0
  345. package/src/internal/batchLoading.test.ts +13 -14
  346. package/src/internal/batchLoading.ts +8 -8
  347. package/src/internal/devices/apiService.ts +58 -51
  348. package/src/internal/devices/cryptoService.ts +22 -17
  349. package/src/internal/devices/index.ts +17 -10
  350. package/src/internal/devices/interface.ts +21 -12
  351. package/src/internal/devices/manager.test.ts +40 -9
  352. package/src/internal/devices/manager.ts +3 -3
  353. package/src/internal/download/apiService.ts +66 -49
  354. package/src/internal/download/cryptoService.ts +34 -18
  355. package/src/internal/download/fileDownloader.test.ts +25 -9
  356. package/src/internal/download/fileDownloader.ts +36 -18
  357. package/src/internal/download/index.ts +19 -19
  358. package/src/internal/download/interface.ts +19 -20
  359. package/src/internal/download/queue.ts +3 -3
  360. package/src/internal/download/telemetry.test.ts +11 -11
  361. package/src/internal/download/telemetry.ts +24 -14
  362. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  363. package/src/internal/download/thumbnailDownloader.ts +43 -32
  364. package/src/internal/errors.ts +7 -5
  365. package/src/internal/events/apiService.ts +30 -17
  366. package/src/internal/events/coreEventManager.test.ts +18 -18
  367. package/src/internal/events/coreEventManager.ts +9 -6
  368. package/src/internal/events/eventManager.test.ts +108 -82
  369. package/src/internal/events/eventManager.ts +16 -5
  370. package/src/internal/events/index.ts +75 -47
  371. package/src/internal/events/interface.ts +47 -39
  372. package/src/internal/events/volumeEventManager.test.ts +61 -65
  373. package/src/internal/events/volumeEventManager.ts +18 -9
  374. package/src/internal/nodes/apiService.test.ts +197 -147
  375. package/src/internal/nodes/apiService.ts +288 -174
  376. package/src/internal/nodes/cache.test.ts +48 -20
  377. package/src/internal/nodes/cache.ts +60 -44
  378. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  379. package/src/internal/nodes/cryptoCache.ts +10 -5
  380. package/src/internal/nodes/cryptoService.test.ts +492 -351
  381. package/src/internal/nodes/cryptoService.ts +170 -88
  382. package/src/internal/nodes/events.test.ts +38 -28
  383. package/src/internal/nodes/events.ts +13 -12
  384. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  385. package/src/internal/nodes/extendedAttributes.ts +20 -15
  386. package/src/internal/nodes/index.test.ts +133 -0
  387. package/src/internal/nodes/index.ts +27 -15
  388. package/src/internal/nodes/interface.ts +42 -29
  389. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  390. package/src/internal/nodes/nodesAccess.ts +73 -49
  391. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  392. package/src/internal/nodes/nodesManagement.ts +39 -32
  393. package/src/internal/nodes/nodesRevisions.ts +7 -7
  394. package/src/internal/nodes/validations.ts +2 -2
  395. package/src/internal/photos/albums.ts +5 -5
  396. package/src/internal/photos/apiService.ts +4 -7
  397. package/src/internal/photos/cache.ts +1 -1
  398. package/src/internal/photos/index.ts +8 -8
  399. package/src/internal/photos/interface.ts +2 -2
  400. package/src/internal/photos/photosTimeline.ts +4 -5
  401. package/src/internal/sdkEvents.test.ts +10 -10
  402. package/src/internal/sdkEvents.ts +5 -13
  403. package/src/internal/shares/apiService.ts +44 -33
  404. package/src/internal/shares/cache.test.ts +6 -4
  405. package/src/internal/shares/cache.ts +21 -12
  406. package/src/internal/shares/cryptoCache.test.ts +17 -11
  407. package/src/internal/shares/cryptoCache.ts +4 -4
  408. package/src/internal/shares/cryptoService.test.ts +72 -74
  409. package/src/internal/shares/cryptoService.ts +48 -23
  410. package/src/internal/shares/index.ts +23 -11
  411. package/src/internal/shares/interface.ts +8 -8
  412. package/src/internal/shares/manager.test.ts +88 -80
  413. package/src/internal/shares/manager.ts +19 -19
  414. package/src/internal/sharing/apiService.ts +282 -175
  415. package/src/internal/sharing/cache.test.ts +35 -35
  416. package/src/internal/sharing/cache.ts +11 -2
  417. package/src/internal/sharing/cryptoService.test.ts +58 -46
  418. package/src/internal/sharing/cryptoService.ts +121 -84
  419. package/src/internal/sharing/events.test.ts +113 -102
  420. package/src/internal/sharing/events.ts +42 -24
  421. package/src/internal/sharing/index.ts +22 -11
  422. package/src/internal/sharing/interface.ts +40 -40
  423. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  424. package/src/internal/sharing/sharingAccess.ts +39 -21
  425. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  426. package/src/internal/sharing/sharingManagement.ts +138 -65
  427. package/src/internal/uids.ts +1 -1
  428. package/src/internal/upload/apiService.ts +167 -117
  429. package/src/internal/upload/blockVerifier.ts +8 -6
  430. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  431. package/src/internal/upload/cryptoService.ts +42 -36
  432. package/src/internal/upload/digests.ts +2 -2
  433. package/src/internal/upload/fileUploader.test.ts +15 -3
  434. package/src/internal/upload/fileUploader.ts +39 -17
  435. package/src/internal/upload/index.ts +13 -14
  436. package/src/internal/upload/interface.ts +79 -78
  437. package/src/internal/upload/manager.test.ts +170 -156
  438. package/src/internal/upload/manager.ts +66 -39
  439. package/src/internal/upload/queue.ts +3 -3
  440. package/src/internal/upload/streamUploader.test.ts +40 -26
  441. package/src/internal/upload/streamUploader.ts +87 -69
  442. package/src/internal/upload/telemetry.test.ts +11 -11
  443. package/src/internal/upload/telemetry.ts +25 -15
  444. package/src/internal/wait.test.ts +1 -1
  445. package/src/internal/wait.ts +3 -3
  446. package/src/protonDriveClient.ts +121 -39
  447. package/src/protonDrivePhotosClient.ts +16 -10
  448. package/src/telemetry.ts +60 -52
  449. package/src/tests/logger.ts +1 -1
  450. package/src/tests/telemetry.ts +2 -2
  451. package/src/transformers.ts +29 -21
  452. package/src/version.ts +0 -1
@@ -1,19 +1,26 @@
1
- import { DeviceType } from "../../interface";
2
- import { DriveAPIService, drivePaths } from "../apiService";
3
- import { makeDeviceUid, makeNodeUid, splitDeviceUid } from "../uids";
4
- import { DeviceMetadata } from "./interface";
1
+ import { DeviceType } from '../../interface';
2
+ import { DriveAPIService, drivePaths } from '../apiService';
3
+ import { makeDeviceUid, makeNodeUid, splitDeviceUid } from '../uids';
4
+ import { DeviceMetadata } from './interface';
5
5
 
6
6
  type GetDevicesResponse = drivePaths['/drive/devices']['get']['responses']['200']['content']['application/json'];
7
7
 
8
- type PostCreateDeviceRequest = Extract<drivePaths['/drive/devices']['post']['requestBody'], { 'content': object }>['content']['application/json'];
8
+ type PostCreateDeviceRequest = Extract<
9
+ drivePaths['/drive/devices']['post']['requestBody'],
10
+ { content: object }
11
+ >['content']['application/json'];
9
12
  type PostCreateDeviceResponse = drivePaths['/drive/devices']['post']['responses']['200']['content']['application/json'];
10
13
 
11
- type PutUpdateDeviceRequest = Extract<drivePaths['/drive/devices/{deviceID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
12
- type PutUpdateDeviceResponse = drivePaths['/drive/devices/{deviceID}']['put']['responses']['200']['content']['application/json'];
14
+ type PutUpdateDeviceRequest = Extract<
15
+ drivePaths['/drive/devices/{deviceID}']['put']['requestBody'],
16
+ { content: object }
17
+ >['content']['application/json'];
18
+ type PutUpdateDeviceResponse =
19
+ drivePaths['/drive/devices/{deviceID}']['put']['responses']['200']['content']['application/json'];
13
20
 
14
21
  /**
15
22
  * Provides API communication for managing devices.
16
- *
23
+ *
17
24
  * The service is responsible for transforming local objects to API payloads
18
25
  * and vice versa. It should not contain any business logic.
19
26
  */
@@ -28,8 +35,8 @@ export class DevicesAPIService {
28
35
  uid: makeDeviceUid(device.Device.VolumeID, device.Device.DeviceID),
29
36
  type: deviceTypeNumberToEnum(device.Device.Type),
30
37
  rootFolderUid: makeNodeUid(device.Device.VolumeID, device.Share.LinkID),
31
- creationTime: new Date(device.Device.CreateTime*1000),
32
- lastSyncTime: device.Device.LastSyncTime ? new Date(device.Device.LastSyncTime*1000) : undefined,
38
+ creationTime: new Date(device.Device.CreateTime * 1000),
39
+ lastSyncTime: device.Device.LastSyncTime ? new Date(device.Device.LastSyncTime * 1000) : undefined,
33
40
  hasDeprecatedName: !!device.Share.Name,
34
41
  /** @deprecated to be removed once Volume-based navigation is implemented in web */
35
42
  shareId: device.Share.ShareID,
@@ -48,56 +55,56 @@ export class DevicesAPIService {
48
55
  // Web clients do not update Device fields, that is only for desktop clients.
49
56
  Omit<PutUpdateDeviceRequest, 'Device'>,
50
57
  PutUpdateDeviceResponse
51
- >(
52
- `drive/devices/${deviceId}`,
53
- {
54
- Share: { Name: "" },
55
- },
56
- );
58
+ >(`drive/devices/${deviceId}`, {
59
+ Share: { Name: '' },
60
+ });
57
61
  }
58
62
 
59
63
  async createDevice(
60
64
  device: {
61
- volumeId: string,
62
- type: DeviceType,
65
+ volumeId: string;
66
+ type: DeviceType;
63
67
  },
64
68
  share: {
65
- addressId: string,
66
- addressKeyId: string,
67
- armoredKey: string,
68
- armoredSharePassphrase: string,
69
- armoredSharePassphraseSignature: string,
69
+ addressId: string;
70
+ addressKeyId: string;
71
+ armoredKey: string;
72
+ armoredSharePassphrase: string;
73
+ armoredSharePassphraseSignature: string;
70
74
  },
71
75
  node: {
72
- encryptedName: string,
73
- armoredKey: string,
74
- armoredNodePassphrase: string,
75
- armoredNodePassphraseSignature: string,
76
- armoredHashKey: string,
77
- }
76
+ encryptedName: string;
77
+ armoredKey: string;
78
+ armoredNodePassphrase: string;
79
+ armoredNodePassphraseSignature: string;
80
+ armoredHashKey: string;
81
+ },
78
82
  ): Promise<DeviceMetadata> {
79
- const response = await this.apiService.post<PostCreateDeviceRequest, PostCreateDeviceResponse>('drive/devices', {
80
- // @ts-expect-error VolumeID is deprecated.
81
- Device: {
82
- Type: deviceTypeEnumToNumber(device.type),
83
- SyncState: 0,
84
- },
85
- // @ts-expect-error Name is deprecated.
86
- Share: {
87
- AddressID: share.addressId,
88
- AddressKeyID: share.addressKeyId,
89
- Key: share.armoredKey,
90
- Passphrase: share.armoredSharePassphrase,
91
- PassphraseSignature: share.armoredSharePassphraseSignature,
83
+ const response = await this.apiService.post<PostCreateDeviceRequest, PostCreateDeviceResponse>(
84
+ 'drive/devices',
85
+ {
86
+ // @ts-expect-error VolumeID is deprecated.
87
+ Device: {
88
+ Type: deviceTypeEnumToNumber(device.type),
89
+ SyncState: 0,
90
+ },
91
+ // @ts-expect-error Name is deprecated.
92
+ Share: {
93
+ AddressID: share.addressId,
94
+ AddressKeyID: share.addressKeyId,
95
+ Key: share.armoredKey,
96
+ Passphrase: share.armoredSharePassphrase,
97
+ PassphraseSignature: share.armoredSharePassphraseSignature,
98
+ },
99
+ Link: {
100
+ Name: node.encryptedName,
101
+ NodeKey: node.armoredKey,
102
+ NodePassphrase: node.armoredNodePassphrase,
103
+ NodePassphraseSignature: node.armoredNodePassphraseSignature,
104
+ NodeHashKey: node.armoredHashKey,
105
+ },
92
106
  },
93
- Link: {
94
- Name: node.encryptedName,
95
- NodeKey: node.armoredKey,
96
- NodePassphrase: node.armoredNodePassphrase,
97
- NodePassphraseSignature: node.armoredNodePassphraseSignature,
98
- NodeHashKey: node.armoredHashKey,
99
- }
100
- });
107
+ );
101
108
 
102
109
  return {
103
110
  uid: makeDeviceUid(device.volumeId, response.Device.DeviceID),
@@ -106,7 +113,7 @@ export class DevicesAPIService {
106
113
  creationTime: new Date(),
107
114
  hasDeprecatedName: false,
108
115
  shareId: response.Device.ShareID,
109
- }
116
+ };
110
117
  }
111
118
 
112
119
  async deleteDevice(deviceUid: string): Promise<void> {
@@ -15,30 +15,35 @@ export class DevicesCryptoService {
15
15
 
16
16
  async createDevice(deviceName: string): Promise<{
17
17
  address: {
18
- addressId: string,
19
- addressKeyId: string,
20
- },
18
+ addressId: string;
19
+ addressKeyId: string;
20
+ };
21
21
  shareKey: {
22
- armoredKey: string,
23
- armoredPassphrase: string,
24
- armoredPassphraseSignature: string,
25
- },
22
+ armoredKey: string;
23
+ armoredPassphrase: string;
24
+ armoredPassphraseSignature: string;
25
+ };
26
26
  node: {
27
27
  key: {
28
- armoredKey: string,
29
- armoredPassphrase: string,
30
- armoredPassphraseSignature: string,
31
- },
32
- encryptedName: string,
33
- armoredHashKey: string,
34
- }
28
+ armoredKey: string;
29
+ armoredPassphrase: string;
30
+ armoredPassphraseSignature: string;
31
+ };
32
+ encryptedName: string;
33
+ armoredHashKey: string;
34
+ };
35
35
  }> {
36
36
  const address = await this.sharesService.getMyFilesShareMemberEmailKey();
37
37
  const addressKey = address.addressKey;
38
38
 
39
39
  const shareKey = await this.driveCrypto.generateKey([addressKey], addressKey);
40
40
  const rootNodeKey = await this.driveCrypto.generateKey([shareKey.decrypted.key], addressKey);
41
- const { armoredNodeName } = await this.driveCrypto.encryptNodeName(deviceName, undefined, shareKey.decrypted.key, addressKey);
41
+ const { armoredNodeName } = await this.driveCrypto.encryptNodeName(
42
+ deviceName,
43
+ undefined,
44
+ shareKey.decrypted.key,
45
+ addressKey,
46
+ );
42
47
  const { armoredHashKey } = await this.driveCrypto.generateHashKey(rootNodeKey.decrypted.key);
43
48
 
44
49
  return {
@@ -59,7 +64,7 @@ export class DevicesCryptoService {
59
64
  },
60
65
  encryptedName: armoredNodeName,
61
66
  armoredHashKey,
62
- }
67
+ },
63
68
  };
64
- };
69
+ }
65
70
  }
@@ -1,17 +1,17 @@
1
- import { DriveCrypto } from "../../crypto";
2
- import { ProtonDriveTelemetry } from "../../interface";
3
- import { DriveAPIService } from "../apiService";
4
- import { DevicesAPIService } from "./apiService";
5
- import { DevicesCryptoService } from "./cryptoService";
6
- import { SharesService, NodesService, NodesManagementService } from "./interface";
7
- import { DevicesManager } from "./manager";
1
+ import { DriveCrypto } from '../../crypto';
2
+ import { ProtonDriveTelemetry } from '../../interface';
3
+ import { DriveAPIService } from '../apiService';
4
+ import { DevicesAPIService } from './apiService';
5
+ import { DevicesCryptoService } from './cryptoService';
6
+ import { SharesService, NodesService, NodesManagementService } from './interface';
7
+ import { DevicesManager } from './manager';
8
8
 
9
9
  /**
10
10
  * Provides facade for the whole devices module.
11
- *
11
+ *
12
12
  * The devices module is responsible for handling devices metadata, including
13
13
  * API communication, encryption, decryption, caching, and event handling.
14
- *
14
+ *
15
15
  * This facade provides internal interface that other modules can use to
16
16
  * interact with the devices.
17
17
  */
@@ -25,7 +25,14 @@ export function initDevicesModule(
25
25
  ) {
26
26
  const api = new DevicesAPIService(apiService);
27
27
  const cryptoService = new DevicesCryptoService(driveCrypto, sharesService);
28
- const manager = new DevicesManager(telemetry.getLogger('devices'), api, cryptoService, sharesService, nodesService, nodesManagementService);
28
+ const manager = new DevicesManager(
29
+ telemetry.getLogger('devices'),
30
+ api,
31
+ cryptoService,
32
+ sharesService,
33
+ nodesService,
34
+ nodesManagementService,
35
+ );
29
36
 
30
37
  return manager;
31
38
  }
@@ -1,20 +1,25 @@
1
- import { PrivateKey } from "../../crypto";
2
- import { DeviceType, MissingNode } from "../../interface";
3
- import { DecryptedNode } from "../nodes";
1
+ import { PrivateKey } from '../../crypto';
2
+ import { DeviceType, MissingNode } from '../../interface';
3
+ import { DecryptedNode } from '../nodes';
4
4
 
5
5
  export type DeviceMetadata = {
6
- uid: string,
7
- type: DeviceType
8
- rootFolderUid: string,
9
- creationTime: Date,
6
+ uid: string;
7
+ type: DeviceType;
8
+ rootFolderUid: string;
9
+ creationTime: Date;
10
10
  lastSyncTime?: Date;
11
11
  hasDeprecatedName: boolean;
12
12
  shareId: string;
13
- }
13
+ };
14
14
 
15
15
  export interface SharesService {
16
16
  getMyFilesIDs(): Promise<{ volumeId: string }>;
17
- getMyFilesShareMemberEmailKey(): Promise<{ addressId: string, email: string, addressKey: PrivateKey, addressKeyId: string }>,
17
+ getMyFilesShareMemberEmailKey(): Promise<{
18
+ addressId: string;
19
+ email: string;
20
+ addressKey: PrivateKey;
21
+ addressKeyId: string;
22
+ }>;
18
23
  }
19
24
 
20
25
  export interface NodesService {
@@ -22,7 +27,11 @@ export interface NodesService {
22
27
  }
23
28
 
24
29
  export interface NodesManagementService {
25
- renameNode(nodeUid: string, newName: string, options: {
26
- allowRenameRootNode: boolean,
27
- }): Promise<DecryptedNode>;
30
+ renameNode(
31
+ nodeUid: string,
32
+ newName: string,
33
+ options: {
34
+ allowRenameRootNode: boolean;
35
+ },
36
+ ): Promise<DecryptedNode>;
28
37
  }
@@ -53,9 +53,26 @@ describe('DevicesManager', () => {
53
53
  const name = 'Test Device';
54
54
  const deviceType = DeviceType.Linux;
55
55
  const address = { addressId: 'address123', addressKeyId: 'key123' };
56
- const shareKey = { armoredKey: 'armoredKey', armoredPassphrase: 'passphrase', armoredPassphraseSignature: 'signature' };
57
- const node = { encryptedName: 'encryptedName', key: { armoredKey: 'nodeKey', armoredPassphrase: 'nodePassphrase', armoredPassphraseSignature: 'nodeSignature' }, armoredHashKey: 'hashKey' };
58
- const createdDevice = { uid: 'device123', rootFolderUid: 'rootFolder123', type: deviceType, shareId: 'shareid' } as DeviceMetadata;
56
+ const shareKey = {
57
+ armoredKey: 'armoredKey',
58
+ armoredPassphrase: 'passphrase',
59
+ armoredPassphraseSignature: 'signature',
60
+ };
61
+ const node = {
62
+ encryptedName: 'encryptedName',
63
+ key: {
64
+ armoredKey: 'nodeKey',
65
+ armoredPassphrase: 'nodePassphrase',
66
+ armoredPassphraseSignature: 'nodeSignature',
67
+ },
68
+ armoredHashKey: 'hashKey',
69
+ };
70
+ const createdDevice = {
71
+ uid: 'device123',
72
+ rootFolderUid: 'rootFolder123',
73
+ type: deviceType,
74
+ shareId: 'shareid',
75
+ } as DeviceMetadata;
59
76
 
60
77
  sharesService.getMyFilesIDs.mockResolvedValue({ volumeId });
61
78
  cryptoService.createDevice.mockResolvedValue({ address, shareKey, node });
@@ -80,7 +97,7 @@ describe('DevicesManager', () => {
80
97
  armoredNodePassphrase: node.key.armoredPassphrase,
81
98
  armoredNodePassphraseSignature: node.key.armoredPassphraseSignature,
82
99
  armoredHashKey: node.armoredHashKey,
83
- }
100
+ },
84
101
  );
85
102
  expect(result).toEqual({ ...createdDevice, name: { ok: true, value: name } });
86
103
  });
@@ -88,7 +105,12 @@ describe('DevicesManager', () => {
88
105
  it('renames device with deprecated name', async () => {
89
106
  const deviceUid = 'device123';
90
107
  const name = 'New Device Name';
91
- const device = { uid: deviceUid, rootFolderUid: 'rootFolder123', hasDeprecatedName: true, shareId: 'shareid' } as DeviceMetadata;
108
+ const device = {
109
+ uid: deviceUid,
110
+ rootFolderUid: 'rootFolder123',
111
+ hasDeprecatedName: true,
112
+ shareId: 'shareid',
113
+ } as DeviceMetadata;
92
114
 
93
115
  apiService.getDevices.mockResolvedValue([device]);
94
116
 
@@ -96,14 +118,21 @@ describe('DevicesManager', () => {
96
118
 
97
119
  expect(apiService.getDevices).toHaveBeenCalled();
98
120
  expect(apiService.removeNameFromDevice).toHaveBeenCalledWith(deviceUid);
99
- expect(nodesManagementService.renameNode).toHaveBeenCalledWith(device.rootFolderUid, name, { allowRenameRootNode: true });
121
+ expect(nodesManagementService.renameNode).toHaveBeenCalledWith(device.rootFolderUid, name, {
122
+ allowRenameRootNode: true,
123
+ });
100
124
  expect(result).toEqual({ ...device, name: { ok: true, value: name } });
101
125
  });
102
126
 
103
127
  it('renames device without deprecated name', async () => {
104
128
  const deviceUid = 'device123';
105
129
  const name = 'New Device Name';
106
- const device = { uid: deviceUid, rootFolderUid: 'rootFolder123', hasDeprecatedName: false, shareId: 'shareid' } as DeviceMetadata;
130
+ const device = {
131
+ uid: deviceUid,
132
+ rootFolderUid: 'rootFolder123',
133
+ hasDeprecatedName: false,
134
+ shareId: 'shareid',
135
+ } as DeviceMetadata;
107
136
 
108
137
  apiService.getDevices.mockResolvedValue([device]);
109
138
 
@@ -111,7 +140,9 @@ describe('DevicesManager', () => {
111
140
 
112
141
  expect(apiService.getDevices).toHaveBeenCalled();
113
142
  expect(apiService.removeNameFromDevice).not.toHaveBeenCalled();
114
- expect(nodesManagementService.renameNode).toHaveBeenCalledWith(device.rootFolderUid, name, { allowRenameRootNode: true });
143
+ expect(nodesManagementService.renameNode).toHaveBeenCalledWith(device.rootFolderUid, name, {
144
+ allowRenameRootNode: true,
145
+ });
115
146
  expect(result).toEqual({ ...device, name: { ok: true, value: name } });
116
147
  });
117
148
 
@@ -126,4 +157,4 @@ describe('DevicesManager', () => {
126
157
  expect(apiService.removeNameFromDevice).not.toHaveBeenCalled();
127
158
  expect(nodesManagementService.renameNode).not.toHaveBeenCalled();
128
159
  });
129
- });
160
+ });
@@ -80,7 +80,7 @@ export class DevicesManager {
80
80
  const device = await this.getDeviceMetadata(deviceUid);
81
81
 
82
82
  if (device.hasDeprecatedName) {
83
- this.logger.info("Removing deprecated name from device");
83
+ this.logger.info('Removing deprecated name from device');
84
84
  try {
85
85
  await this.apiService.removeNameFromDevice(deviceUid);
86
86
  } catch (error: unknown) {
@@ -95,12 +95,12 @@ export class DevicesManager {
95
95
  return {
96
96
  ...device,
97
97
  name: resultOk(name),
98
- }
98
+ };
99
99
  }
100
100
 
101
101
  private async getDeviceMetadata(deviceUid: string): Promise<DeviceMetadata> {
102
102
  const devices = await this.apiService.getDevices();
103
- const device = devices.find(device => device.uid === deviceUid);
103
+ const device = devices.find((device) => device.uid === deviceUid);
104
104
  if (!device) {
105
105
  throw new ValidationError(c('Error').t`Device not found`);
106
106
  }
@@ -1,23 +1,32 @@
1
- import { DriveAPIService, drivePaths, ObserverStream } from "../apiService";
2
- import { makeNodeThumbnailUid, splitNodeRevisionUid, splitNodeThumbnailUid } from "../uids";
3
- import { BlockMetadata } from "./interface";
1
+ import { DriveAPIService, drivePaths, ObserverStream } from '../apiService';
2
+ import { makeNodeThumbnailUid, splitNodeRevisionUid, splitNodeThumbnailUid } from '../uids';
3
+ import { BlockMetadata } from './interface';
4
4
 
5
5
  const BLOCKS_PAGE_SIZE = 20;
6
6
 
7
- type GetRevisionResponse = drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['get']['responses']['200']['content']['application/json'];
7
+ type GetRevisionResponse =
8
+ drivePaths['/drive/v2/volumes/{volumeID}/files/{linkID}/revisions/{revisionID}']['get']['responses']['200']['content']['application/json'];
8
9
 
9
- type PostGetThumbnailsRequest = Extract<drivePaths['/drive/volumes/{volumeID}/thumbnails']['post']['requestBody'], { 'content': object }>['content']['application/json'];
10
- type PostGetThumbnailsResponse = drivePaths['/drive/volumes/{volumeID}/thumbnails']['post']['responses']['200']['content']['application/json'];
10
+ type PostGetThumbnailsRequest = Extract<
11
+ drivePaths['/drive/volumes/{volumeID}/thumbnails']['post']['requestBody'],
12
+ { content: object }
13
+ >['content']['application/json'];
14
+ type PostGetThumbnailsResponse =
15
+ drivePaths['/drive/volumes/{volumeID}/thumbnails']['post']['responses']['200']['content']['application/json'];
11
16
 
12
17
  export class DownloadAPIService {
13
18
  constructor(private apiService: DriveAPIService) {
14
19
  this.apiService = apiService;
15
20
  }
16
21
 
17
- async* iterateRevisionBlocks(nodeRevisionUid: string, signal?: AbortSignal, fromBlockIndex = 1): AsyncGenerator<
18
- { type: 'manifestSignature', armoredManifestSignature?: string } |
19
- { type: 'thumbnail', base64sha256Hash: string } |
20
- { type: 'block' } & BlockMetadata
22
+ async *iterateRevisionBlocks(
23
+ nodeRevisionUid: string,
24
+ signal?: AbortSignal,
25
+ fromBlockIndex = 1,
26
+ ): AsyncGenerator<
27
+ | { type: 'manifestSignature'; armoredManifestSignature?: string }
28
+ | { type: 'thumbnail'; base64sha256Hash: string }
29
+ | ({ type: 'block' } & BlockMetadata)
21
30
  > {
22
31
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(nodeRevisionUid);
23
32
 
@@ -42,7 +51,7 @@ export class DownloadAPIService {
42
51
  yield {
43
52
  type: 'thumbnail',
44
53
  base64sha256Hash: block.Hash,
45
- }
54
+ };
46
55
  }
47
56
  }
48
57
  }
@@ -61,7 +70,11 @@ export class DownloadAPIService {
61
70
  }
62
71
  }
63
72
 
64
- async getRevisionBlockToken(nodeRevisionUid: string, blockIndex: number, signal?: AbortSignal): Promise<BlockMetadata> {
73
+ async getRevisionBlockToken(
74
+ nodeRevisionUid: string,
75
+ blockIndex: number,
76
+ signal?: AbortSignal,
77
+ ): Promise<BlockMetadata> {
65
78
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(nodeRevisionUid);
66
79
 
67
80
  const result = await this.apiService.get<GetRevisionResponse>(
@@ -73,7 +86,12 @@ export class DownloadAPIService {
73
86
  return transformBlock(block);
74
87
  }
75
88
 
76
- async downloadBlock(baseUrl: string, token: string, onProgress?: (downloadedBytes: number) => void, signal?: AbortSignal): Promise<Uint8Array> {
89
+ async downloadBlock(
90
+ baseUrl: string,
91
+ token: string,
92
+ onProgress?: (downloadedBytes: number) => void,
93
+ signal?: AbortSignal,
94
+ ): Promise<Uint8Array> {
77
95
  const rawBlockStream = await this.apiService.getBlockStream(baseUrl, token, signal);
78
96
  const progressStream = new ObserverStream((value) => {
79
97
  onProgress?.(value.length);
@@ -83,13 +101,15 @@ export class DownloadAPIService {
83
101
  return encryptedBlock;
84
102
  }
85
103
 
86
- async* iterateThumbnails(thumbnailUids: string[], signal?: AbortSignal): AsyncGenerator<
87
- { uid: string, ok: true, bareUrl: string, token: string } |
88
- { uid: string, ok: false, error: string }
104
+ async *iterateThumbnails(
105
+ thumbnailUids: string[],
106
+ signal?: AbortSignal,
107
+ ): AsyncGenerator<
108
+ { uid: string; ok: true; bareUrl: string; token: string } | { uid: string; ok: false; error: string }
89
109
  > {
90
110
  const splitedThumbnailsIds = thumbnailUids.map(splitNodeThumbnailUid);
91
111
 
92
- const thumbnailIdsByVolumeId = new Map<string, { volumeId: string, thumbnailId: string, nodeId: string }[]>();
112
+ const thumbnailIdsByVolumeId = new Map<string, { volumeId: string; thumbnailId: string; nodeId: string }[]>();
93
113
  for (const { volumeId, thumbnailId, nodeId } of splitedThumbnailsIds) {
94
114
  if (!thumbnailIdsByVolumeId.has(volumeId)) {
95
115
  thumbnailIdsByVolumeId.set(volumeId, []);
@@ -97,42 +117,40 @@ export class DownloadAPIService {
97
117
  thumbnailIdsByVolumeId.get(volumeId)?.push({ volumeId, thumbnailId, nodeId });
98
118
  }
99
119
 
120
+ for (const [volumeId, thumbnailIds] of thumbnailIdsByVolumeId.entries()) {
121
+ const result = await this.apiService.post<PostGetThumbnailsRequest, PostGetThumbnailsResponse>(
122
+ `drive/volumes/${volumeId}/thumbnails`,
123
+ {
124
+ ThumbnailIDs: thumbnailIds.map(({ thumbnailId }) => thumbnailId),
125
+ },
126
+ signal,
127
+ );
100
128
 
101
- for (const [volumeId, thumbnailIds] of thumbnailIdsByVolumeId.entries()) {
102
- const result = await this.apiService.post<PostGetThumbnailsRequest, PostGetThumbnailsResponse>(
103
- `drive/volumes/${volumeId}/thumbnails`,
104
- {
105
- ThumbnailIDs: thumbnailIds.map(({ thumbnailId }) => thumbnailId),
106
- },
107
- signal,
108
- );
109
-
110
- for (const thumbnail of result.Thumbnails) {
111
- const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === thumbnail.ThumbnailID);
112
- if (!id) {
113
- continue;
129
+ for (const thumbnail of result.Thumbnails) {
130
+ const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === thumbnail.ThumbnailID);
131
+ if (!id) {
132
+ continue;
133
+ }
134
+ yield {
135
+ uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, thumbnail.ThumbnailID),
136
+ ok: true,
137
+ bareUrl: thumbnail.BareURL,
138
+ token: thumbnail.Token,
139
+ };
114
140
  }
115
- yield {
116
- uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, thumbnail.ThumbnailID),
117
- ok: true,
118
- bareUrl: thumbnail.BareURL,
119
- token: thumbnail.Token,
120
- };
121
- }
122
141
 
123
- for (const error of result.Errors) {
124
- const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === error.ThumbnailID);
125
- if (!id) {
126
- continue;
142
+ for (const error of result.Errors) {
143
+ const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === error.ThumbnailID);
144
+ if (!id) {
145
+ continue;
146
+ }
147
+ yield {
148
+ uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, error.ThumbnailID),
149
+ ok: false,
150
+ error: error.Error,
151
+ };
127
152
  }
128
- yield {
129
- uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, error.ThumbnailID),
130
- ok: false,
131
- error: error.Error,
132
- };
133
153
  }
134
-
135
- }
136
154
  }
137
155
  }
138
156
 
@@ -143,6 +161,5 @@ function transformBlock(block: GetRevisionResponse['Revision']['Blocks'][0]): Bl
143
161
  token: block.Token as string,
144
162
  base64sha256Hash: block.Hash,
145
163
  signatureEmail: block.SignatureEmail || undefined,
146
- armoredSignature: block.EncSignature || undefined,
147
164
  };
148
165
  }