@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,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,25 +1,32 @@
1
- import { c } from "ttag";
2
- import { ValidationError } from "../../errors";
3
- import { DriveAPIService, drivePaths, ObserverStream } from "../apiService";
4
- import { makeNodeThumbnailUid, splitNodeRevisionUid, splitNodeThumbnailUid } from "../uids";
5
- import { BlockMetadata } from "./interface";
1
+ import { DriveAPIService, drivePaths, ObserverStream } from '../apiService';
2
+ import { makeNodeThumbnailUid, splitNodeRevisionUid, splitNodeThumbnailUid } from '../uids';
3
+ import { BlockMetadata } from './interface';
6
4
 
7
5
  const BLOCKS_PAGE_SIZE = 20;
8
6
 
9
- 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'];
10
9
 
11
- type PostGetThumbnailsRequest = Extract<drivePaths['/drive/volumes/{volumeID}/thumbnails']['post']['requestBody'], { 'content': object }>['content']['application/json'];
12
- 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'];
13
16
 
14
17
  export class DownloadAPIService {
15
18
  constructor(private apiService: DriveAPIService) {
16
19
  this.apiService = apiService;
17
20
  }
18
21
 
19
- async* iterateRevisionBlocks(nodeRevisionUid: string, signal?: AbortSignal, fromBlockIndex = 1): AsyncGenerator<
20
- { type: 'manifestSignature', armoredManifestSignature?: string } |
21
- { type: 'thumbnail', base64sha256Hash: string } |
22
- { 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)
23
30
  > {
24
31
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(nodeRevisionUid);
25
32
 
@@ -44,7 +51,7 @@ export class DownloadAPIService {
44
51
  yield {
45
52
  type: 'thumbnail',
46
53
  base64sha256Hash: block.Hash,
47
- }
54
+ };
48
55
  }
49
56
  }
50
57
  }
@@ -63,7 +70,11 @@ export class DownloadAPIService {
63
70
  }
64
71
  }
65
72
 
66
- 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> {
67
78
  const { volumeId, nodeId, revisionId } = splitNodeRevisionUid(nodeRevisionUid);
68
79
 
69
80
  const result = await this.apiService.get<GetRevisionResponse>(
@@ -75,7 +86,12 @@ export class DownloadAPIService {
75
86
  return transformBlock(block);
76
87
  }
77
88
 
78
- 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> {
79
95
  const rawBlockStream = await this.apiService.getBlockStream(baseUrl, token, signal);
80
96
  const progressStream = new ObserverStream((value) => {
81
97
  onProgress?.(value.length);
@@ -85,50 +101,55 @@ export class DownloadAPIService {
85
101
  return encryptedBlock;
86
102
  }
87
103
 
88
- // Improvement requested: support multiple volumes.
89
- async* iterateThumbnails(thumbnailUids: string[], signal?: AbortSignal): AsyncGenerator<
90
- { uid: string, ok: true, bareUrl: string, token: string } |
91
- { 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 }
92
109
  > {
93
- const thumbnailIds = thumbnailUids.map(splitNodeThumbnailUid);
110
+ const splitedThumbnailsIds = thumbnailUids.map(splitNodeThumbnailUid);
94
111
 
95
- const uniqueVolumeIds = new Set(thumbnailIds.map(({ volumeId }) => volumeId));
96
- if (uniqueVolumeIds.size !== 1) {
97
- throw new ValidationError(c('Error').t`Loading thumbnails from multiple sections is not allowed`);
112
+ const thumbnailIdsByVolumeId = new Map<string, { volumeId: string; thumbnailId: string; nodeId: string }[]>();
113
+ for (const { volumeId, thumbnailId, nodeId } of splitedThumbnailsIds) {
114
+ if (!thumbnailIdsByVolumeId.has(volumeId)) {
115
+ thumbnailIdsByVolumeId.set(volumeId, []);
116
+ }
117
+ thumbnailIdsByVolumeId.get(volumeId)?.push({ volumeId, thumbnailId, nodeId });
98
118
  }
99
- const volumeId = thumbnailIds[0].volumeId;
100
119
 
101
- const result = await this.apiService.post<PostGetThumbnailsRequest, PostGetThumbnailsResponse>(
102
- `drive/volumes/${volumeId}/thumbnails`,
103
- {
104
- ThumbnailIDs: thumbnailIds.map(({ thumbnailId }) => thumbnailId),
105
- },
106
- signal,
107
- );
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
+ );
108
128
 
109
- for (const thumbnail of result.Thumbnails) {
110
- const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === thumbnail.ThumbnailID);
111
- if (!id) {
112
- 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
+ };
113
140
  }
114
- yield {
115
- uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, thumbnail.ThumbnailID),
116
- ok: true,
117
- bareUrl: thumbnail.BareURL,
118
- token: thumbnail.Token,
119
- };
120
- }
121
141
 
122
- for (const error of result.Errors) {
123
- const id = thumbnailIds.find(({ thumbnailId }) => thumbnailId === error.ThumbnailID);
124
- if (!id) {
125
- 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
+ };
126
152
  }
127
- yield {
128
- uid: makeNodeThumbnailUid(id.volumeId, id.nodeId, error.ThumbnailID),
129
- ok: false,
130
- error: error.Error,
131
- };
132
153
  }
133
154
  }
134
155
  }
@@ -140,6 +161,5 @@ function transformBlock(block: GetRevisionResponse['Revision']['Blocks'][0]): Bl
140
161
  token: block.Token as string,
141
162
  base64sha256Hash: block.Hash,
142
163
  signatureEmail: block.SignatureEmail || undefined,
143
- armoredSignature: block.EncSignature || undefined,
144
164
  };
145
165
  }