@protontech/drive-sdk 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +1 -1
  120. package/dist/internal/events/eventManager.js +0 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +34 -25
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +6 -6
  125. package/dist/internal/events/index.js.map +1 -1
  126. package/dist/internal/events/interface.d.ts +1 -1
  127. package/dist/internal/events/interface.js +0 -1
  128. package/dist/internal/events/interface.js.map +1 -1
  129. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  130. package/dist/internal/events/volumeEventManager.js.map +1 -1
  131. package/dist/internal/events/volumeEventManager.test.js +55 -55
  132. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  133. package/dist/internal/nodes/apiService.d.ts +4 -3
  134. package/dist/internal/nodes/apiService.js +36 -15
  135. package/dist/internal/nodes/apiService.js.map +1 -1
  136. package/dist/internal/nodes/apiService.test.js +60 -41
  137. package/dist/internal/nodes/apiService.test.js.map +1 -1
  138. package/dist/internal/nodes/cache.d.ts +5 -5
  139. package/dist/internal/nodes/cache.js +14 -7
  140. package/dist/internal/nodes/cache.js.map +1 -1
  141. package/dist/internal/nodes/cache.test.js +31 -9
  142. package/dist/internal/nodes/cache.test.js.map +1 -1
  143. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  144. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  145. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  146. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  147. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  148. package/dist/internal/nodes/cryptoService.js +11 -17
  149. package/dist/internal/nodes/cryptoService.js.map +1 -1
  150. package/dist/internal/nodes/cryptoService.test.js +320 -241
  151. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  152. package/dist/internal/nodes/events.d.ts +3 -3
  153. package/dist/internal/nodes/events.js.map +1 -1
  154. package/dist/internal/nodes/events.test.js +27 -21
  155. package/dist/internal/nodes/events.test.js.map +1 -1
  156. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  157. package/dist/internal/nodes/extendedAttributes.js +3 -1
  158. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  159. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  160. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  161. package/dist/internal/nodes/index.d.ts +10 -10
  162. package/dist/internal/nodes/index.js.map +1 -1
  163. package/dist/internal/nodes/index.test.d.ts +1 -0
  164. package/dist/internal/nodes/index.test.js +106 -0
  165. package/dist/internal/nodes/index.test.js.map +1 -0
  166. package/dist/internal/nodes/interface.d.ts +2 -2
  167. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  168. package/dist/internal/nodes/nodesAccess.js +28 -16
  169. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  170. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  171. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  172. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  173. package/dist/internal/nodes/nodesManagement.js +9 -7
  174. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  175. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  176. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  177. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  178. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  179. package/dist/internal/photos/albums.d.ts +3 -3
  180. package/dist/internal/photos/albums.js.map +1 -1
  181. package/dist/internal/photos/apiService.d.ts +1 -1
  182. package/dist/internal/photos/apiService.js +3 -6
  183. package/dist/internal/photos/apiService.js.map +1 -1
  184. package/dist/internal/photos/cache.d.ts +1 -1
  185. package/dist/internal/photos/index.d.ts +5 -5
  186. package/dist/internal/photos/index.js.map +1 -1
  187. package/dist/internal/photos/interface.d.ts +2 -2
  188. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  189. package/dist/internal/photos/photosTimeline.js +1 -2
  190. package/dist/internal/photos/photosTimeline.js.map +1 -1
  191. package/dist/internal/sdkEvents.d.ts +1 -1
  192. package/dist/internal/sdkEvents.js +2 -7
  193. package/dist/internal/sdkEvents.js.map +1 -1
  194. package/dist/internal/sdkEvents.test.js +8 -8
  195. package/dist/internal/shares/apiService.d.ts +2 -2
  196. package/dist/internal/shares/apiService.js +5 -3
  197. package/dist/internal/shares/apiService.js.map +1 -1
  198. package/dist/internal/shares/cache.d.ts +2 -2
  199. package/dist/internal/shares/cache.js +12 -6
  200. package/dist/internal/shares/cache.js.map +1 -1
  201. package/dist/internal/shares/cache.test.js.map +1 -1
  202. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  203. package/dist/internal/shares/cryptoCache.test.js +8 -2
  204. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  205. package/dist/internal/shares/cryptoService.d.ts +3 -3
  206. package/dist/internal/shares/cryptoService.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.test.js +42 -42
  208. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  209. package/dist/internal/shares/index.d.ts +4 -4
  210. package/dist/internal/shares/index.js.map +1 -1
  211. package/dist/internal/shares/interface.d.ts +2 -2
  212. package/dist/internal/shares/manager.d.ts +7 -7
  213. package/dist/internal/shares/manager.js.map +1 -1
  214. package/dist/internal/shares/manager.test.js +71 -63
  215. package/dist/internal/shares/manager.test.js.map +1 -1
  216. package/dist/internal/sharing/apiService.d.ts +4 -4
  217. package/dist/internal/sharing/apiService.js +4 -3
  218. package/dist/internal/sharing/apiService.js.map +1 -1
  219. package/dist/internal/sharing/cache.d.ts +1 -1
  220. package/dist/internal/sharing/cache.test.js +33 -33
  221. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  222. package/dist/internal/sharing/cryptoService.js +3 -5
  223. package/dist/internal/sharing/cryptoService.js.map +1 -1
  224. package/dist/internal/sharing/cryptoService.test.js +39 -39
  225. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  226. package/dist/internal/sharing/events.d.ts +4 -4
  227. package/dist/internal/sharing/events.js +0 -1
  228. package/dist/internal/sharing/events.js.map +1 -1
  229. package/dist/internal/sharing/events.test.js +39 -40
  230. package/dist/internal/sharing/events.test.js.map +1 -1
  231. package/dist/internal/sharing/index.d.ts +6 -6
  232. package/dist/internal/sharing/index.js.map +1 -1
  233. package/dist/internal/sharing/interface.d.ts +5 -4
  234. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  235. package/dist/internal/sharing/sharingAccess.js +8 -4
  236. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  237. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  238. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  239. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  240. package/dist/internal/sharing/sharingManagement.js +5 -7
  241. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  242. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  243. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  244. package/dist/internal/uids.js.map +1 -1
  245. package/dist/internal/upload/apiService.d.ts +3 -3
  246. package/dist/internal/upload/apiService.js +1 -1
  247. package/dist/internal/upload/apiService.js.map +1 -1
  248. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  249. package/dist/internal/upload/blockVerifier.js +1 -1
  250. package/dist/internal/upload/blockVerifier.js.map +1 -1
  251. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  252. package/dist/internal/upload/cryptoService.d.ts +4 -4
  253. package/dist/internal/upload/cryptoService.js +4 -4
  254. package/dist/internal/upload/cryptoService.js.map +1 -1
  255. package/dist/internal/upload/digests.js.map +1 -1
  256. package/dist/internal/upload/fileUploader.d.ts +6 -6
  257. package/dist/internal/upload/fileUploader.js.map +1 -1
  258. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  259. package/dist/internal/upload/index.d.ts +5 -5
  260. package/dist/internal/upload/index.js.map +1 -1
  261. package/dist/internal/upload/interface.d.ts +3 -3
  262. package/dist/internal/upload/manager.d.ts +4 -4
  263. package/dist/internal/upload/manager.js +7 -5
  264. package/dist/internal/upload/manager.js.map +1 -1
  265. package/dist/internal/upload/manager.test.js +137 -123
  266. package/dist/internal/upload/manager.test.js.map +1 -1
  267. package/dist/internal/upload/streamUploader.d.ts +6 -6
  268. package/dist/internal/upload/streamUploader.js +8 -6
  269. package/dist/internal/upload/streamUploader.js.map +1 -1
  270. package/dist/internal/upload/streamUploader.test.js +16 -11
  271. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  272. package/dist/internal/upload/telemetry.d.ts +3 -3
  273. package/dist/internal/upload/telemetry.js +5 -3
  274. package/dist/internal/upload/telemetry.js.map +1 -1
  275. package/dist/internal/upload/telemetry.test.js +8 -8
  276. package/dist/internal/upload/telemetry.test.js.map +1 -1
  277. package/dist/protonDriveClient.d.ts +8 -8
  278. package/dist/protonDriveClient.js +12 -9
  279. package/dist/protonDriveClient.js.map +1 -1
  280. package/dist/protonDrivePhotosClient.js.map +1 -1
  281. package/dist/telemetry.js +18 -15
  282. package/dist/telemetry.js.map +1 -1
  283. package/dist/tests/logger.js.map +1 -1
  284. package/dist/tests/telemetry.d.ts +1 -1
  285. package/dist/transformers.js +4 -2
  286. package/dist/transformers.js.map +1 -1
  287. package/package.json +1 -1
  288. package/src/cache/interface.ts +22 -22
  289. package/src/cache/memoryCache.test.ts +7 -7
  290. package/src/cache/memoryCache.ts +4 -4
  291. package/src/cache/nullCache.ts +1 -1
  292. package/src/config.ts +5 -5
  293. package/src/crypto/driveCrypto.test.ts +15 -15
  294. package/src/crypto/driveCrypto.ts +120 -156
  295. package/src/crypto/hmac.ts +1 -1
  296. package/src/crypto/interface.ts +63 -72
  297. package/src/crypto/openPGPCrypto.ts +74 -94
  298. package/src/crypto/utils.ts +1 -1
  299. package/src/diagnostic/eventsGenerator.ts +2 -2
  300. package/src/diagnostic/httpClient.ts +6 -2
  301. package/src/diagnostic/index.ts +12 -10
  302. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  303. package/src/diagnostic/interface.ts +81 -81
  304. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  305. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  306. package/src/diagnostic/telemetry.ts +4 -1
  307. package/src/diagnostic/zipGenerators.test.ts +1 -1
  308. package/src/diagnostic/zipGenerators.ts +3 -3
  309. package/src/errors.ts +21 -21
  310. package/src/index.ts +3 -3
  311. package/src/interface/account.ts +10 -10
  312. package/src/interface/author.ts +6 -6
  313. package/src/interface/config.ts +4 -4
  314. package/src/interface/devices.ts +6 -6
  315. package/src/interface/download.ts +12 -9
  316. package/src/interface/events.ts +45 -39
  317. package/src/interface/httpClient.ts +11 -11
  318. package/src/interface/index.ts +76 -19
  319. package/src/interface/nodes.ts +47 -49
  320. package/src/interface/result.ts +1 -3
  321. package/src/interface/sharing.ts +60 -57
  322. package/src/interface/telemetry.ts +74 -74
  323. package/src/interface/thumbnail.ts +5 -6
  324. package/src/interface/upload.ts +20 -12
  325. package/src/internal/apiService/apiService.test.ts +109 -76
  326. package/src/internal/apiService/apiService.ts +40 -26
  327. package/src/internal/apiService/coreTypes.ts +2474 -2463
  328. package/src/internal/apiService/driveTypes.ts +1868 -1822
  329. package/src/internal/apiService/errorCodes.ts +4 -4
  330. package/src/internal/apiService/errors.test.ts +25 -23
  331. package/src/internal/apiService/errors.ts +15 -9
  332. package/src/internal/apiService/index.ts +1 -1
  333. package/src/internal/apiService/transformers.ts +2 -2
  334. package/src/internal/asyncIteratorMap.test.ts +4 -4
  335. package/src/internal/asyncIteratorMap.ts +1 -1
  336. package/src/internal/asyncIteratorRace.test.ts +149 -0
  337. package/src/internal/asyncIteratorRace.ts +79 -0
  338. package/src/internal/batch.test.ts +50 -0
  339. package/src/internal/batch.ts +9 -0
  340. package/src/internal/batchLoading.test.ts +13 -14
  341. package/src/internal/batchLoading.ts +8 -8
  342. package/src/internal/devices/apiService.ts +58 -51
  343. package/src/internal/devices/cryptoService.ts +22 -17
  344. package/src/internal/devices/index.ts +17 -10
  345. package/src/internal/devices/interface.ts +21 -12
  346. package/src/internal/devices/manager.test.ts +40 -9
  347. package/src/internal/devices/manager.ts +3 -3
  348. package/src/internal/download/apiService.ts +66 -49
  349. package/src/internal/download/cryptoService.ts +34 -18
  350. package/src/internal/download/fileDownloader.test.ts +25 -9
  351. package/src/internal/download/fileDownloader.ts +36 -18
  352. package/src/internal/download/index.ts +19 -19
  353. package/src/internal/download/interface.ts +19 -20
  354. package/src/internal/download/queue.ts +3 -3
  355. package/src/internal/download/telemetry.test.ts +11 -11
  356. package/src/internal/download/telemetry.ts +24 -14
  357. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  358. package/src/internal/download/thumbnailDownloader.ts +43 -32
  359. package/src/internal/errors.ts +7 -5
  360. package/src/internal/events/apiService.ts +30 -17
  361. package/src/internal/events/coreEventManager.test.ts +18 -18
  362. package/src/internal/events/coreEventManager.ts +9 -6
  363. package/src/internal/events/eventManager.test.ts +51 -46
  364. package/src/internal/events/eventManager.ts +6 -5
  365. package/src/internal/events/index.ts +24 -14
  366. package/src/internal/events/interface.ts +47 -39
  367. package/src/internal/events/volumeEventManager.test.ts +61 -65
  368. package/src/internal/events/volumeEventManager.ts +18 -9
  369. package/src/internal/nodes/apiService.test.ts +197 -147
  370. package/src/internal/nodes/apiService.ts +288 -174
  371. package/src/internal/nodes/cache.test.ts +48 -20
  372. package/src/internal/nodes/cache.ts +60 -44
  373. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  374. package/src/internal/nodes/cryptoCache.ts +10 -5
  375. package/src/internal/nodes/cryptoService.test.ts +492 -351
  376. package/src/internal/nodes/cryptoService.ts +170 -88
  377. package/src/internal/nodes/events.test.ts +38 -28
  378. package/src/internal/nodes/events.ts +7 -5
  379. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  380. package/src/internal/nodes/extendedAttributes.ts +20 -15
  381. package/src/internal/nodes/index.test.ts +133 -0
  382. package/src/internal/nodes/index.ts +27 -15
  383. package/src/internal/nodes/interface.ts +42 -29
  384. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  385. package/src/internal/nodes/nodesAccess.ts +73 -49
  386. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  387. package/src/internal/nodes/nodesManagement.ts +39 -32
  388. package/src/internal/nodes/nodesRevisions.ts +7 -7
  389. package/src/internal/nodes/validations.ts +2 -2
  390. package/src/internal/photos/albums.ts +5 -5
  391. package/src/internal/photos/apiService.ts +4 -7
  392. package/src/internal/photos/cache.ts +1 -1
  393. package/src/internal/photos/index.ts +8 -8
  394. package/src/internal/photos/interface.ts +2 -2
  395. package/src/internal/photos/photosTimeline.ts +4 -5
  396. package/src/internal/sdkEvents.test.ts +10 -10
  397. package/src/internal/sdkEvents.ts +5 -13
  398. package/src/internal/shares/apiService.ts +44 -33
  399. package/src/internal/shares/cache.test.ts +6 -4
  400. package/src/internal/shares/cache.ts +21 -12
  401. package/src/internal/shares/cryptoCache.test.ts +17 -11
  402. package/src/internal/shares/cryptoCache.ts +4 -4
  403. package/src/internal/shares/cryptoService.test.ts +72 -74
  404. package/src/internal/shares/cryptoService.ts +48 -23
  405. package/src/internal/shares/index.ts +23 -11
  406. package/src/internal/shares/interface.ts +8 -8
  407. package/src/internal/shares/manager.test.ts +88 -80
  408. package/src/internal/shares/manager.ts +19 -19
  409. package/src/internal/sharing/apiService.ts +282 -175
  410. package/src/internal/sharing/cache.test.ts +35 -35
  411. package/src/internal/sharing/cache.ts +2 -2
  412. package/src/internal/sharing/cryptoService.test.ts +58 -46
  413. package/src/internal/sharing/cryptoService.ts +121 -84
  414. package/src/internal/sharing/events.test.ts +45 -49
  415. package/src/internal/sharing/events.ts +9 -6
  416. package/src/internal/sharing/index.ts +22 -11
  417. package/src/internal/sharing/interface.ts +40 -40
  418. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  419. package/src/internal/sharing/sharingAccess.ts +39 -21
  420. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  421. package/src/internal/sharing/sharingManagement.ts +138 -65
  422. package/src/internal/uids.ts +1 -1
  423. package/src/internal/upload/apiService.ts +167 -117
  424. package/src/internal/upload/blockVerifier.ts +8 -6
  425. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  426. package/src/internal/upload/cryptoService.ts +42 -36
  427. package/src/internal/upload/digests.ts +2 -2
  428. package/src/internal/upload/fileUploader.test.ts +15 -3
  429. package/src/internal/upload/fileUploader.ts +39 -17
  430. package/src/internal/upload/index.ts +13 -14
  431. package/src/internal/upload/interface.ts +78 -78
  432. package/src/internal/upload/manager.test.ts +170 -153
  433. package/src/internal/upload/manager.ts +59 -35
  434. package/src/internal/upload/queue.ts +3 -3
  435. package/src/internal/upload/streamUploader.test.ts +40 -26
  436. package/src/internal/upload/streamUploader.ts +87 -69
  437. package/src/internal/upload/telemetry.test.ts +11 -11
  438. package/src/internal/upload/telemetry.ts +25 -15
  439. package/src/internal/wait.test.ts +1 -1
  440. package/src/internal/wait.ts +3 -3
  441. package/src/protonDriveClient.ts +121 -39
  442. package/src/protonDrivePhotosClient.ts +16 -10
  443. package/src/telemetry.ts +60 -52
  444. package/src/tests/logger.ts +1 -1
  445. package/src/tests/telemetry.ts +2 -2
  446. package/src/transformers.ts +27 -21
  447. package/src/version.ts +0 -1
@@ -1,6 +1,6 @@
1
- import { ProtonDriveHTTPClient, SDKEvent } from "../../interface";
2
- import { getMockTelemetry } from "../../tests/telemetry";
3
- import { SDKEvents } from "../sdkEvents";
1
+ import { ProtonDriveHTTPClient, SDKEvent } from '../../interface';
2
+ import { getMockTelemetry } from '../../tests/telemetry';
3
+ import { SDKEvents } from '../sdkEvents';
4
4
  import { DriveAPIService } from './apiService';
5
5
  import { HTTPErrorCode, ErrorCode } from './errorCodes';
6
6
 
@@ -10,7 +10,7 @@ function generateOkResponse() {
10
10
  return new Response(JSON.stringify({ Code: ErrorCode.OK }), { status: HTTPErrorCode.OK });
11
11
  }
12
12
 
13
- describe("DriveAPIService", () => {
13
+ describe('DriveAPIService', () => {
14
14
  let sdkEvents: SDKEvents;
15
15
  let httpClient: ProtonDriveHTTPClient;
16
16
  let api: DriveAPIService;
@@ -24,7 +24,7 @@ describe("DriveAPIService", () => {
24
24
  transfersResumed: jest.fn(),
25
25
  requestsThrottled: jest.fn(),
26
26
  requestsUnthrottled: jest.fn(),
27
- }
27
+ };
28
28
  httpClient = {
29
29
  fetchJson: jest.fn(() => Promise.resolve(generateOkResponse())),
30
30
  fetchBlob: jest.fn(() => Promise.resolve(new Response(new Uint8Array([1, 2, 3])))),
@@ -36,23 +36,25 @@ describe("DriveAPIService", () => {
36
36
  expect(sdkEvents.transfersPaused).toHaveBeenCalledTimes(events.includes(SDKEvent.TransfersPaused) ? 1 : 0);
37
37
  expect(sdkEvents.transfersResumed).toHaveBeenCalledTimes(events.includes(SDKEvent.TransfersResumed) ? 1 : 0);
38
38
  expect(sdkEvents.requestsThrottled).toHaveBeenCalledTimes(events.includes(SDKEvent.RequestsThrottled) ? 1 : 0);
39
- expect(sdkEvents.requestsUnthrottled).toHaveBeenCalledTimes(events.includes(SDKEvent.RequestsUnthrottled) ? 1 : 0);
39
+ expect(sdkEvents.requestsUnthrottled).toHaveBeenCalledTimes(
40
+ events.includes(SDKEvent.RequestsUnthrottled) ? 1 : 0,
41
+ );
40
42
  }
41
43
 
42
- describe("should make", () => {
43
- it("GET request", async () => {
44
+ describe('should make', () => {
45
+ it('GET request', async () => {
44
46
  const result = await api.get('test');
45
47
  expect(result).toEqual({ Code: ErrorCode.OK });
46
48
  await expectFetchJsonToBeCalledWith('GET');
47
49
  });
48
50
 
49
- it("POST request", async () => {
51
+ it('POST request', async () => {
50
52
  const result = await api.post('test', { data: 'test' });
51
53
  expect(result).toEqual({ Code: ErrorCode.OK });
52
54
  await expectFetchJsonToBeCalledWith('POST', { data: 'test' });
53
55
  });
54
56
 
55
- it("PUT request", async () => {
57
+ it('PUT request', async () => {
56
58
  const result = await api.put('test', { data: 'test' });
57
59
  expect(result).toEqual({ Code: ErrorCode.OK });
58
60
  await expectFetchJsonToBeCalledWith('PUT', { data: 'test' });
@@ -63,24 +65,28 @@ describe("DriveAPIService", () => {
63
65
  const request = httpClient.fetchJson.mock.calls[0][0];
64
66
  expect(request.method).toEqual(method);
65
67
  expect(request.timeoutMs).toEqual(30000);
66
- expect(Array.from(request.headers.entries())).toEqual(Array.from(new Headers({
67
- "Accept": "application/vnd.protonmail.v1+json",
68
- "Content-Type": "application/json",
69
- "Language": 'en',
70
- "x-pm-drive-sdk-version": `js@${process.env.npm_package_version}`,
71
- }).entries()));
68
+ expect(Array.from(request.headers.entries())).toEqual(
69
+ Array.from(
70
+ new Headers({
71
+ Accept: 'application/vnd.protonmail.v1+json',
72
+ 'Content-Type': 'application/json',
73
+ Language: 'en',
74
+ 'x-pm-drive-sdk-version': `js@${process.env.npm_package_version}`,
75
+ }).entries(),
76
+ ),
77
+ );
72
78
  expect(await request.json).toEqual(data);
73
79
  expectSDKEvents();
74
80
  }
75
81
 
76
- it("storage GET request", async () => {
82
+ it('storage GET request', async () => {
77
83
  const stream = await api.getBlockStream('test', 'token');
78
84
  const result = await Array.fromAsync(stream);
79
85
  expect(result).toEqual([new Uint8Array([1, 2, 3])]);
80
86
  await expectFetchBlobToBeCalledWith('GET');
81
87
  });
82
88
 
83
- it("storage POST request", async () => {
89
+ it('storage POST request', async () => {
84
90
  const data = new Blob();
85
91
  await api.postBlockStream('test', 'token', data);
86
92
  await expectFetchBlobToBeCalledWith('POST', data);
@@ -91,35 +97,44 @@ describe("DriveAPIService", () => {
91
97
  const request = httpClient.fetchBlob.mock.calls[0][0];
92
98
  expect(request.method).toEqual(method);
93
99
  expect(request.timeoutMs).toEqual(90000);
94
- expect(Array.from(request.headers.entries())).toEqual(Array.from(new Headers({
95
- "pm-storage-token": 'token',
96
- "Language": 'en',
97
- "x-pm-drive-sdk-version": `js@${process.env.npm_package_version}`,
98
- }).entries()));
100
+ expect(Array.from(request.headers.entries())).toEqual(
101
+ Array.from(
102
+ new Headers({
103
+ 'pm-storage-token': 'token',
104
+ Language: 'en',
105
+ 'x-pm-drive-sdk-version': `js@${process.env.npm_package_version}`,
106
+ }).entries(),
107
+ ),
108
+ );
99
109
  expect(request.body).toEqual(data);
100
110
  expectSDKEvents();
101
111
  }
102
112
  });
103
113
 
104
- describe("should throw", () => {
105
- it("APIHTTPError on 4xx response without JSON body", async () => {
106
- httpClient.fetchJson = jest.fn(() => Promise.resolve(new Response('Not found', { status: 404, statusText: 'Not found' })));
114
+ describe('should throw', () => {
115
+ it('APIHTTPError on 4xx response without JSON body', async () => {
116
+ httpClient.fetchJson = jest.fn(() =>
117
+ Promise.resolve(new Response('Not found', { status: 404, statusText: 'Not found' })),
118
+ );
107
119
  await expect(api.get('test')).rejects.toThrow(new Error('Not found'));
108
120
  expectSDKEvents();
109
121
  });
110
122
 
111
- it("APIError on 4xx response with JSON body", async () => {
112
- httpClient.fetchJson = jest.fn(() => Promise.resolve(new Response(JSON.stringify({ Code: 42, Error: 'General error' }), { status: 422 })));
123
+ it('APIError on 4xx response with JSON body', async () => {
124
+ httpClient.fetchJson = jest.fn(() =>
125
+ Promise.resolve(new Response(JSON.stringify({ Code: 42, Error: 'General error' }), { status: 422 })),
126
+ );
113
127
  await expect(api.get('test')).rejects.toThrow('General error');
114
128
  expectSDKEvents();
115
129
  });
116
130
  });
117
131
 
118
- describe("should retry", () => {
119
- it("on offline error", async () => {
132
+ describe('should retry', () => {
133
+ it('on offline error', async () => {
120
134
  const error = new Error('Network offline');
121
135
  error.name = 'OfflineError';
122
- httpClient.fetchJson = jest.fn()
136
+ httpClient.fetchJson = jest
137
+ .fn()
123
138
  .mockRejectedValueOnce(error)
124
139
  .mockRejectedValueOnce(error)
125
140
  .mockResolvedValueOnce(generateOkResponse());
@@ -131,10 +146,11 @@ describe("DriveAPIService", () => {
131
146
  expectSDKEvents();
132
147
  });
133
148
 
134
- it("on timeout error", async () => {
149
+ it('on timeout error', async () => {
135
150
  const error = new Error('Timeouted');
136
151
  error.name = 'TimeoutError';
137
- httpClient.fetchJson = jest.fn()
152
+ httpClient.fetchJson = jest
153
+ .fn()
138
154
  .mockRejectedValueOnce(error)
139
155
  .mockRejectedValueOnce(error)
140
156
  .mockResolvedValueOnce(generateOkResponse());
@@ -146,8 +162,9 @@ describe("DriveAPIService", () => {
146
162
  expectSDKEvents();
147
163
  });
148
164
 
149
- it("on general error", async () => {
150
- httpClient.fetchJson = jest.fn()
165
+ it('on general error', async () => {
166
+ httpClient.fetchJson = jest
167
+ .fn()
151
168
  .mockRejectedValueOnce(new Error('Error'))
152
169
  .mockResolvedValueOnce(generateOkResponse());
153
170
 
@@ -158,23 +175,29 @@ describe("DriveAPIService", () => {
158
175
  expectSDKEvents();
159
176
  });
160
177
 
161
- it("only once on general error", async () => {
162
- httpClient.fetchJson = jest.fn()
178
+ it('only once on general error', async () => {
179
+ httpClient.fetchJson = jest
180
+ .fn()
163
181
  .mockRejectedValueOnce(new Error('First error'))
164
182
  .mockRejectedValueOnce(new Error('Second error'))
165
183
  .mockResolvedValueOnce(generateOkResponse());
166
184
 
167
185
  const result = api.get('test');
168
186
 
169
- await expect(result).rejects.toThrow("Second error");
187
+ await expect(result).rejects.toThrow('Second error');
170
188
  expect(httpClient.fetchJson).toHaveBeenCalledTimes(2);
171
189
  expectSDKEvents();
172
190
  });
173
191
 
174
- it("on 429 response", async () => {
175
- httpClient.fetchJson = jest.fn()
176
- .mockResolvedValueOnce(new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }))
177
- .mockResolvedValueOnce(new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }))
192
+ it('on 429 response', async () => {
193
+ httpClient.fetchJson = jest
194
+ .fn()
195
+ .mockResolvedValueOnce(
196
+ new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }),
197
+ )
198
+ .mockResolvedValueOnce(
199
+ new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }),
200
+ )
178
201
  .mockResolvedValueOnce(generateOkResponse());
179
202
 
180
203
  const result = api.get('test');
@@ -185,9 +208,12 @@ describe("DriveAPIService", () => {
185
208
  expectSDKEvents();
186
209
  });
187
210
 
188
- it("on 5xx response", async () => {
189
- httpClient.fetchJson = jest.fn()
190
- .mockResolvedValueOnce(new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }))
211
+ it('on 5xx response', async () => {
212
+ httpClient.fetchJson = jest
213
+ .fn()
214
+ .mockResolvedValueOnce(
215
+ new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }),
216
+ )
191
217
  .mockResolvedValueOnce(generateOkResponse());
192
218
 
193
219
  const result = api.get('test');
@@ -197,28 +223,34 @@ describe("DriveAPIService", () => {
197
223
  expectSDKEvents();
198
224
  });
199
225
 
200
- it("only once on 5xx response", async () => {
201
- httpClient.fetchJson = jest.fn()
202
- .mockResolvedValue(new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }));
226
+ it('only once on 5xx response', async () => {
227
+ httpClient.fetchJson = jest
228
+ .fn()
229
+ .mockResolvedValue(
230
+ new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }),
231
+ );
203
232
 
204
233
  const result = api.get('test');
205
234
 
206
- await expect(result).rejects.toThrow("Some error");
235
+ await expect(result).rejects.toThrow('Some error');
207
236
  expect(httpClient.fetchJson).toHaveBeenCalledTimes(2);
208
237
  expectSDKEvents();
209
238
  });
210
239
  });
211
240
 
212
- describe("should handle subsequent errors", () => {
213
- it("limit 429 errors", async () => {
214
- httpClient.fetchJson = jest.fn()
215
- .mockResolvedValue(new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }));
241
+ describe('should handle subsequent errors', () => {
242
+ it('limit 429 errors', async () => {
243
+ httpClient.fetchJson = jest
244
+ .fn()
245
+ .mockResolvedValue(
246
+ new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' }),
247
+ );
216
248
 
217
249
  for (let i = 0; i < 20; i++) {
218
250
  await api.get('test').catch(() => {});
219
251
  }
220
252
 
221
- await expect(api.get('test')).rejects.toThrow("Too many server requests, please try again later");
253
+ await expect(api.get('test')).rejects.toThrow('Too many server requests, please try again later');
222
254
  expect(httpClient.fetchJson).toHaveBeenCalledTimes(50);
223
255
  expectSDKEvents(SDKEvent.RequestsThrottled);
224
256
 
@@ -229,15 +261,14 @@ describe("DriveAPIService", () => {
229
261
  expect(sdkEvents.requestsThrottled).toHaveBeenCalledTimes(1);
230
262
  });
231
263
 
232
- it("do not limit 429s when some pass", async () => {
264
+ it('do not limit 429s when some pass', async () => {
233
265
  let attempt = 0;
234
- httpClient.fetchJson = jest.fn()
235
- .mockImplementation(() => {
236
- if (attempt++ % 5 === 0) {
237
- return generateOkResponse();
238
- }
239
- return new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' });
240
- });
266
+ httpClient.fetchJson = jest.fn().mockImplementation(() => {
267
+ if (attempt++ % 5 === 0) {
268
+ return generateOkResponse();
269
+ }
270
+ return new Response('', { status: HTTPErrorCode.TOO_MANY_REQUESTS, statusText: 'Some error' });
271
+ });
241
272
 
242
273
  for (let i = 0; i < 20; i++) {
243
274
  await api.get('test').catch(() => {});
@@ -249,34 +280,36 @@ describe("DriveAPIService", () => {
249
280
  expectSDKEvents();
250
281
  });
251
282
 
252
- it("limit server errors", async () => {
253
- httpClient.fetchJson = jest.fn()
254
- .mockResolvedValue(new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }));
283
+ it('limit server errors', async () => {
284
+ httpClient.fetchJson = jest
285
+ .fn()
286
+ .mockResolvedValue(
287
+ new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' }),
288
+ );
255
289
 
256
290
  for (let i = 0; i < 20; i++) {
257
291
  await api.get('test').catch(() => {});
258
292
  }
259
293
 
260
- await expect(api.get('test')).rejects.toThrow("Too many server errors, please try again later");
294
+ await expect(api.get('test')).rejects.toThrow('Too many server errors, please try again later');
261
295
  expect(httpClient.fetchJson).toHaveBeenCalledTimes(10);
262
296
  expectSDKEvents();
263
297
  });
264
298
 
265
- it("do not limit server errors when some pass", async () => {
299
+ it('do not limit server errors when some pass', async () => {
266
300
  let attempt = 0;
267
- httpClient.fetchJson = jest.fn()
268
- .mockImplementation(() => {
269
- if (attempt++ % 5 === 0) {
270
- return generateOkResponse();
271
- }
272
- return new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' });
273
- });
274
-
301
+ httpClient.fetchJson = jest.fn().mockImplementation(() => {
302
+ if (attempt++ % 5 === 0) {
303
+ return generateOkResponse();
304
+ }
305
+ return new Response('', { status: HTTPErrorCode.INTERNAL_SERVER_ERROR, statusText: 'Some error' });
306
+ });
307
+
275
308
  for (let i = 0; i < 20; i++) {
276
309
  await api.get('test').catch(() => {});
277
310
  }
278
311
 
279
- await expect(api.get('test')).rejects.toThrow("Some error");
312
+ await expect(api.get('test')).rejects.toThrow('Some error');
280
313
  // 15 erroring calls * 2 attempts + 5 successful calls
281
314
  expect(httpClient.fetchJson).toHaveBeenCalledTimes(35);
282
315
  expectSDKEvents();
@@ -1,7 +1,7 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { VERSION } from "../../version";
4
- import { ProtonDriveHTTPClient, ProtonDriveTelemetry, Logger } from "../../interface";
3
+ import { VERSION } from '../../version';
4
+ import { ProtonDriveHTTPClient, ProtonDriveTelemetry, Logger } from '../../interface';
5
5
  import { AbortError, ServerError, RateLimitedError, ProtonDriveError } from '../../errors';
6
6
  import { waitSeconds } from '../wait';
7
7
  import { SDKEvents } from '../sdkEvents';
@@ -107,19 +107,27 @@ export class DriveAPIService {
107
107
 
108
108
  async get<ResponsePayload>(url: string, signal?: AbortSignal): Promise<ResponsePayload> {
109
109
  return this.makeRequest(url, 'GET', undefined, signal);
110
- };
110
+ }
111
111
 
112
- async post<RequestPayload, ResponsePayload>(url: string, data?: RequestPayload, signal?: AbortSignal): Promise<ResponsePayload> {
112
+ async post<RequestPayload, ResponsePayload>(
113
+ url: string,
114
+ data?: RequestPayload,
115
+ signal?: AbortSignal,
116
+ ): Promise<ResponsePayload> {
113
117
  return this.makeRequest(url, 'POST', data, signal);
114
- };
118
+ }
115
119
 
116
- async put<RequestPayload, ResponsePayload>(url: string, data: RequestPayload, signal?: AbortSignal): Promise<ResponsePayload> {
120
+ async put<RequestPayload, ResponsePayload>(
121
+ url: string,
122
+ data: RequestPayload,
123
+ signal?: AbortSignal,
124
+ ): Promise<ResponsePayload> {
117
125
  return this.makeRequest(url, 'PUT', data, signal);
118
- };
126
+ }
119
127
 
120
128
  async delete<Response>(url: string, signal?: AbortSignal): Promise<Response> {
121
129
  return this.makeRequest(url, 'DELETE', undefined, signal);
122
- };
130
+ }
123
131
 
124
132
  private async makeRequest<RequestPayload, ResponsePayload>(
125
133
  url: string,
@@ -131,15 +139,15 @@ export class DriveAPIService {
131
139
  url: `${this.baseUrl}/${url}`,
132
140
  method,
133
141
  headers: new Headers({
134
- "Accept": "application/vnd.protonmail.v1+json",
135
- "Content-Type": "application/json",
136
- "Language": this.language,
137
- "x-pm-drive-sdk-version": `js@${VERSION}`,
142
+ Accept: 'application/vnd.protonmail.v1+json',
143
+ 'Content-Type': 'application/json',
144
+ Language: this.language,
145
+ 'x-pm-drive-sdk-version': `js@${VERSION}`,
138
146
  }),
139
147
  json: data || undefined,
140
148
  timeoutMs: DEFAULT_TIMEOUT_MS,
141
149
  signal,
142
- }
150
+ };
143
151
 
144
152
  const response = await this.fetch(request, () => this.httpClient.fetchJson(request));
145
153
 
@@ -169,7 +177,13 @@ export class DriveAPIService {
169
177
  return response.body;
170
178
  }
171
179
 
172
- async postBlockStream(baseUrl: string, token: string, data: XMLHttpRequestBodyInit, onProgress?: (uploadedBytes: number) => void, signal?: AbortSignal): Promise<void> {
180
+ async postBlockStream(
181
+ baseUrl: string,
182
+ token: string,
183
+ data: XMLHttpRequestBodyInit,
184
+ onProgress?: (uploadedBytes: number) => void,
185
+ signal?: AbortSignal,
186
+ ): Promise<void> {
173
187
  await this.makeStorageRequest('POST', baseUrl, token, data, onProgress, signal);
174
188
  }
175
189
 
@@ -185,9 +199,9 @@ export class DriveAPIService {
185
199
  url,
186
200
  method,
187
201
  headers: new Headers({
188
- "pm-storage-token": token,
189
- "Language": this.language,
190
- "x-pm-drive-sdk-version": `js@${VERSION}`,
202
+ 'pm-storage-token': token,
203
+ Language: this.language,
204
+ 'x-pm-drive-sdk-version': `js@${VERSION}`,
191
205
  }),
192
206
  body,
193
207
  onProgress,
@@ -217,9 +231,9 @@ export class DriveAPIService {
217
231
  // u=5 for background (e.g., upload, download)
218
232
  // u=7 for optional (e.g., metrics, telemetry)
219
233
  private async fetch(
220
- request: { method: string, url: string, signal?: AbortSignal },
234
+ request: { method: string; url: string; signal?: AbortSignal },
221
235
  callback: () => Promise<Response>,
222
- attempt = 0
236
+ attempt = 0,
223
237
  ): Promise<Response> {
224
238
  if (request.signal?.aborted) {
225
239
  throw new AbortError(c('Error').t`Request aborted`);
@@ -244,19 +258,19 @@ export class DriveAPIService {
244
258
  if (error.name === 'OfflineError') {
245
259
  this.logger.info(`${request.method} ${request.url}: Offline error, retrying`);
246
260
  await waitSeconds(OFFLINE_RETRY_DELAY_SECONDS);
247
- return this.fetch(request, callback, attempt+1);
261
+ return this.fetch(request, callback, attempt + 1);
248
262
  }
249
263
 
250
264
  if (error.name === 'TimeoutError') {
251
265
  this.logger.warn(`${request.method} ${request.url}: Timeout error, retrying`);
252
266
  await waitSeconds(SERVER_ERROR_RETRY_DELAY_SECONDS);
253
- return this.fetch(request, callback, attempt+1);
267
+ return this.fetch(request, callback, attempt + 1);
254
268
  }
255
269
  }
256
270
  if (attempt === 0) {
257
271
  this.logger.error(`${request.method} ${request.url}: failed, retrying once`, error);
258
272
  await waitSeconds(GENERAL_RETRY_DELAY_SECONDS);
259
- return this.fetch(request, callback, attempt+1);
273
+ return this.fetch(request, callback, attempt + 1);
260
274
  }
261
275
  this.logger.error(`${request.method} ${request.url}: failed`, error);
262
276
  throw error;
@@ -272,7 +286,7 @@ export class DriveAPIService {
272
286
  this.tooManyRequestsErrorHappened();
273
287
  const timeout = parseInt(response.headers.get('retry-after') || '0', DEFAULT_429_RETRY_DELAY_SECONDS);
274
288
  await waitSeconds(timeout);
275
- return this.fetch(request, callback, attempt+1);
289
+ return this.fetch(request, callback, attempt + 1);
276
290
  } else {
277
291
  this.clearSubsequentTooManyRequestsError();
278
292
  }
@@ -286,7 +300,7 @@ export class DriveAPIService {
286
300
  this.logger.warn(`${request.method} ${request.url}: ${response.status} - retry failed`);
287
301
  } else {
288
302
  await waitSeconds(SERVER_ERROR_RETRY_DELAY_SECONDS);
289
- return this.fetch(request, callback, attempt+1);
303
+ return this.fetch(request, callback, attempt + 1);
290
304
  }
291
305
  } else {
292
306
  if (attempt > 0) {
@@ -308,7 +322,7 @@ export class DriveAPIService {
308
322
  return (
309
323
  this.subsequentTooManyRequestsCounter >= TOO_MANY_SUBSEQUENT_429_ERRORS &&
310
324
  secondsSinceLast429Error < TOO_MANY_SUBSEQUENT_429_ERRORS_TIMEOUT_IN_SECONDS
311
- )
325
+ );
312
326
  }
313
327
 
314
328
  private tooManyRequestsErrorHappened() {
@@ -338,7 +352,7 @@ export class DriveAPIService {
338
352
  return (
339
353
  this.subsequentServerErrorsCounter >= TOO_MANY_SUBSEQUENT_SERVER_ERRORS &&
340
354
  secondsSinceLastServerError < TOO_MANY_SUBSEQUENT_SERVER_ERRORS_TIMEOUT_IN_SECONDS
341
- )
355
+ );
342
356
  }
343
357
 
344
358
  private serverErrorHappened() {