@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,271 +1,65 @@
1
- import { Logger, NodeEventCallback } from "../../interface";
2
- import { convertInternalNode } from "../../transformers";
3
- import { DriveEventsService, DriveEvent, DriveEventType } from "../events";
4
- import { DecryptedNode } from "./interface";
5
- import { NodesCache } from "./cache";
6
- import { NodesAccess } from "./nodesAccess";
7
-
8
- type Listeners = {
9
- /**
10
- * Condition for the listener to be notified about the event.
11
- *
12
- * The condition is a function that receives the event information
13
- * and returns true if the listener should be notified about the
14
- * event.
15
- */
16
- condition: (nodeEventInfo: NodeEventInfo) => boolean,
17
- callback: NodeEventCallback,
18
- }[];
19
-
20
- /**
21
- * Minimal information about the event that is used for listener
22
- * condition. The information is used to determine if the listener
23
- * should be notified about the event.
24
- *
25
- * This must come from the API response to volume events.
26
- */
27
- type NodeEventInfo = {
28
- parentNodeUid?: string,
29
- isTrashed?: boolean,
30
- }
1
+ import { Logger } from '../../interface';
2
+ import { DriveEvent, DriveEventType } from '../events';
3
+ import { NodesCache } from './cache';
31
4
 
32
5
  /**
33
- * Provides both event handling and subscription mechanism for user.
34
- *
6
+ * Provides internal event handling.
7
+ *
35
8
  * The service is responsible for handling events regarding node metadata
36
- * from the DriveEventsService, and for providing a subscription mechanism
37
- * for the user to listen to updates of specific group of nodes, such as
38
- * any update for trashed nodes.
9
+ * from the DriveEventsService.
39
10
  */
40
- export class NodesEvents {
41
- private listeners: Listeners = [];
11
+ export class NodesEventsHandler {
12
+ constructor(
13
+ private logger: Logger,
14
+ private cache: NodesCache,
15
+ ) {}
42
16
 
43
- constructor(private logger: Logger, events: DriveEventsService, private cache: NodesCache, private nodesAccess: NodesAccess) {
44
- this.logger = logger;
45
- this.cache = cache;
46
- this.nodesAccess = nodesAccess;
47
-
48
- events.addListener(async (events, fullRefreshVolumeId) => {
49
- if (fullRefreshVolumeId) {
50
- await cache.setNodesStaleFromVolume(fullRefreshVolumeId);
17
+ async updateNodesCacheOnEvent(event: DriveEvent): Promise<void> {
18
+ try {
19
+ if (event.type === DriveEventType.TreeRefresh) {
20
+ await this.cache.setNodesStaleFromVolume(event.treeEventScopeId);
51
21
  return;
52
22
  }
53
-
54
- for (const event of events) {
55
- try {
56
- await updateCacheByEvent(logger, event, cache);
57
- } catch (error: unknown) {
58
- logger.error(`Failed to update cache`, error);
59
- }
60
- try {
61
- await notifyListenersByEvent(logger, event, this.listeners, cache, nodesAccess);
62
- } catch (error: unknown) {
63
- logger.error(`Failed to notifiy listeners`, error);
64
- }
65
- // Delete must come last as it will remove the node from the cache
66
- // and we need to first know local status of the node to properly
67
- // notify the listeners.
68
- await deleteFromCacheByEvent(logger, event, cache);
23
+ if (event.type === DriveEventType.TreeRemove) {
24
+ await this.cache.removeVolume(event.treeEventScopeId);
25
+ return;
69
26
  }
70
- });
71
- }
72
-
73
- subscribeToTrashedNodes(callback: NodeEventCallback) {
74
- this.listeners.push({ condition: ({ isTrashed }) => isTrashed || false, callback });
75
- return () => {
76
- this.listeners = this.listeners.filter(listener => listener.callback !== callback);
77
- }
78
- }
79
-
80
- subscribeToChildren(parentNodeUid: string, callback: NodeEventCallback) {
81
- this.listeners.push({ condition: ({ parentNodeUid: parent }) => parent === parentNodeUid, callback });
82
- return () => {
83
- this.listeners = this.listeners.filter(listener => listener.callback !== callback);
84
- }
85
- }
86
-
87
- async nodeCreated(node: DecryptedNode): Promise<void> {
88
- await this.cache.setNode(node);
89
- void this.notifyListenersByNode(node, DriveEventType.NodeCreated);
90
- }
91
-
92
- async nodeUpdated(partialNode: { uid: string } & Partial<DecryptedNode>): Promise<void> {
93
- const originalNode = await this.cache.getNode(partialNode.uid);
94
- const updatedNode = {
95
- ...originalNode,
96
- ...partialNode,
97
- }
98
-
99
- await this.cache.setNode(updatedNode);
100
- void this.notifyListenersByNode(updatedNode, DriveEventType.NodeUpdated);
101
- }
102
-
103
- async nodesDeleted(nodeUids: string[]): Promise<void> {
104
- try {
105
- for await (const originalNode of this.cache.iterateNodes(nodeUids)) {
106
- if (originalNode.ok) {
107
- void this.notifyListenersByNode(originalNode.node, DriveEventType.NodeDeleted);
27
+ if (event.type === DriveEventType.NodeDeleted) {
28
+ await this.cache.removeNodes([event.nodeUid]);
29
+ return;
30
+ }
31
+ if (event.type === DriveEventType.NodeCreated) {
32
+ // FIXME Add it to the parent listing even if it's not cached
33
+ // so it doesn't need to refetch all children
34
+
35
+ // We do not have partial nodes in the cache, so we don't
36
+ // add it. If new node is not added, we need to reset the
37
+ // children loaded flag to force refetch when requested.
38
+ if (event.parentNodeUid) {
39
+ await this.cache.resetFolderChildrenLoaded(event.parentNodeUid);
108
40
  }
41
+ return;
109
42
  }
110
- } catch {}
111
-
112
- await this.cache.removeNodes(nodeUids);
113
- }
114
-
115
- private async notifyListenersByNode(node: DecryptedNode, eventType: DriveEventType.NodeCreated | DriveEventType.NodeUpdated | DriveEventType.NodeDeleted) {
116
- const event: DriveEvent = {
117
- type: eventType,
118
- nodeUid: node.uid,
119
- parentNodeUid: node.parentUid,
120
- isOwnVolume: true,
121
- isTrashed: !!node.trashTime,
122
- isShared: node.isShared,
123
- };
124
- await notifyListenersByEvent(this.logger, event, this.listeners, this.cache, this.nodesAccess);
125
-
126
- }
127
- }
128
-
129
- /**
130
- * For given event, update the cache accordingly.
131
- *
132
- * The function is responsible for updating the cache based on the
133
- * event received from the DriveEventsService. The cache metadata
134
- * are not updated, only the nodes are marked as stale to be
135
- * fetched and decrypted again when requested by the client.
136
- *
137
- * If the node is not found in the cache, the event is silently
138
- * skipped as the node will be fetched and decrypted when requested
139
- * by the client.
140
- *
141
- * If the node cannot be updated in the cache, the node is removed
142
- * from the cache to not block the client. If the node is not possible
143
- * to remove, the function throws an error.
144
- *
145
- * @throws Only if the node is not possible to remove from the cache.
146
- */
147
- export async function updateCacheByEvent(logger: Logger, event: DriveEvent, cache: NodesCache) {
148
- // NodeCreated event is ignored as we do not want to fetch and
149
- // decrypt the node immediately. The node will be fetched and
150
- // decrypted when requested by the client.
151
- if (event.type === DriveEventType.NodeCreated) {
152
- // We do not have partial nodes in the cache, so we don't
153
- // add it. If new node is not added, we need to reset the
154
- // children loaded flag to force refetch when requested.
155
- if (event.parentNodeUid) {
156
- await cache.resetFolderChildrenLoaded(event.parentNodeUid);
157
- }
158
- }
159
- if (event.type === DriveEventType.NodeUpdated || event.type === DriveEventType.NodeUpdatedMetadata) {
160
- let node;
161
- // getNode can fail if the node is not found or if it is
162
- // corrupted. In later case, it will be automatically
163
- // removed from cache. In both cases, lets skip the event
164
- // silently as once requested by client, the node will
165
- // be cached again.
166
- try {
167
- node = await cache.getNode(event.nodeUid);
168
- } catch (error: unknown) {
169
- logger.debug(`Skipping node update event (node not in the cache): ${error}`);
170
- }
171
- if (node) {
172
- node.isStale = true;
173
- // We need to update the parentUid as the node might have
174
- // been moved to another parent. This is important for
175
- // children iteration.
176
- node.parentUid = event.parentNodeUid;
177
- try {
178
- await cache.setNode(node);
179
- } catch (setNodeError: unknown) {
180
- logger.error(`Skipping node update event (failed to update)`, setNodeError);
181
- // If updating node in the cache is failing, lets remove it
182
- // to not block the whole client. If the node is not possible
183
- // to remove, lets throw at this point as cache is in very
184
- // bad state by this point and the rest of the code would start
185
- // to break randomly.
186
- try {
187
- await cache.removeNodes([event.nodeUid]);
188
- } catch (removeNodeError: unknown) {
189
- logger.error(`Skipping node update event (failed to remove after failed update)`, removeNodeError);
190
- // removeNodeError is automatic correction algorithm.
191
- // If that fails, lets throw the original error as that
192
- // is the real problem.
193
- throw setNodeError;
43
+ if (event.type === DriveEventType.NodeUpdated) {
44
+ const node = await this.cache.getNode(event.nodeUid);
45
+ node.isStale = true;
46
+ node.parentUid = event.parentNodeUid;
47
+ node.isShared = event.isShared;
48
+ if (event.isTrashed) {
49
+ node.trashTime ??= new Date();
50
+ } else {
51
+ node.trashTime = undefined;
194
52
  }
53
+ await this.cache.setNode(node);
195
54
  }
196
- }
197
- }
198
- }
199
-
200
- /**
201
- * For given event, delete the node from the cache if it is
202
- * deleted.
203
- */
204
- export async function deleteFromCacheByEvent(logger: Logger, event: DriveEvent, cache: NodesCache) {
205
- if (event.type === DriveEventType.NodeDeleted) {
206
- // removeNodes can fail removing children.
207
- // We do not want to stop processing other events in such
208
- // a case. Lets log the error and continue.
209
- try {
210
- await cache.removeNodes([event.nodeUid]);
211
55
  } catch (error: unknown) {
212
- logger.error(`Skipping node delete event:`, error);
213
- }
214
- }
215
- }
216
-
217
- /**
218
- * For given event, notify the listeners accordingly.
219
- *
220
- * The function is responsible for notifying the listeners about the
221
- * event received from the DriveEventsService. The listeners are
222
- * connected with events based on the condition, such as parent node
223
- * uid for listening to children updates.
224
- *
225
- * The function is responsible for fetching and decrypting the latest
226
- * version of the node metadata. If the node is not found, the event
227
- * is silently skipped as the node will be fetched and decrypted when
228
- * requested by the client.
229
- *
230
- * @throws Only if the client's callback throws.
231
- */
232
- export async function notifyListenersByEvent(logger: Logger, event: DriveEvent, listeners: Listeners, cache: NodesCache, nodesAccess: NodesAccess) {
233
- if (event.type === DriveEventType.ShareWithMeUpdated) {
234
- return;
235
- }
236
-
237
- const subscribedListeners = listeners.filter(({ condition }) => condition(event));
238
- const eventMatchingCondition = subscribedListeners.length > 0;
239
-
240
- if ([DriveEventType.NodeCreated, DriveEventType.NodeUpdated, DriveEventType.NodeUpdatedMetadata].includes(event.type) && eventMatchingCondition) {
241
- if (subscribedListeners.length) {
242
- let node;
243
- try {
244
- node = await nodesAccess.getNode(event.nodeUid);
245
- } catch (error: unknown) {
246
- logger.error(`Skipping node update event to listener`, error);
247
- return;
56
+ if (error instanceof Error) {
57
+ // FIXME throw CacheMissException error and catch it
58
+ if (error.message === 'Entity not found') {
59
+ return;
60
+ }
248
61
  }
249
- subscribedListeners.forEach(({ callback }) => callback({ type: 'update', uid: node.uid, node: convertInternalNode(node) }));
250
- }
251
- }
252
-
253
- if (
254
- ((event.type === DriveEventType.NodeUpdated || event.type === DriveEventType.NodeUpdatedMetadata) && !eventMatchingCondition)
255
- || event.type === DriveEventType.NodeDeleted
256
- ) {
257
- let node: DecryptedNode;
258
- try {
259
- node = await cache.getNode(event.nodeUid);
260
- } catch {}
261
-
262
- const subscribedListeners = listeners.filter(({ condition }) => condition({
263
- parentNodeUid: node?.parentUid,
264
- isTrashed: !!node?.trashTime || false,
265
- }));
266
-
267
- if (subscribedListeners.length) {
268
- subscribedListeners.forEach(({ callback }) => callback({ type: 'remove', uid: event.nodeUid }));
62
+ this.logger.error(`Failed to update node cache for event: ${event.eventId}`, error);
269
63
  }
270
64
  }
271
65
  }
@@ -1,5 +1,12 @@
1
- import { getMockLogger } from "../../tests/logger";
2
- import { FolderExtendedAttributes, FileExtendedAttributesParsed, generateFolderExtendedAttributes, generateFileExtendedAttributes, parseFolderExtendedAttributes, parseFileExtendedAttributes } from './extendedAttributes';
1
+ import { getMockLogger } from '../../tests/logger';
2
+ import {
3
+ FolderExtendedAttributes,
4
+ FileExtendedAttributesParsed,
5
+ generateFolderExtendedAttributes,
6
+ generateFileExtendedAttributes,
7
+ parseFolderExtendedAttributes,
8
+ parseFileExtendedAttributes,
9
+ } from './extendedAttributes';
3
10
 
4
11
  describe('extended attrbiutes', () => {
5
12
  describe('should generate folder attributes', () => {
@@ -11,7 +18,7 @@ describe('extended attrbiutes', () => {
11
18
  it(`should generate ${input}`, () => {
12
19
  const output = generateFolderExtendedAttributes(input);
13
20
  expect(output).toBe(expectedAttributes);
14
- })
21
+ });
15
22
  });
16
23
  });
17
24
 
@@ -26,46 +33,43 @@ describe('extended attrbiutes', () => {
26
33
  claimedModificationTime: new Date(1234567890000),
27
34
  },
28
35
  ],
29
- [
30
- '{"Common": {"ModificationTime": "aa"}}',
31
- {},
32
- ],
36
+ ['{"Common": {"ModificationTime": "aa"}}', {}],
33
37
  [
34
38
  '{"Common": {"ModificationTime": "2009-02-13T23:31:30+0000", "Size": 123}}',
35
39
  {
36
40
  claimedModificationTime: new Date(1234567890000),
37
41
  },
38
42
  ],
39
- [
40
- '{"Common": {"Whatever": 123}}',
41
- {},
42
- ],
43
+ ['{"Common": {"Whatever": 123}}', {}],
43
44
  ];
44
45
  testCases.forEach(([input, expectedAttributes]) => {
45
46
  it(`should parse ${input}`, () => {
46
47
  const output = parseFolderExtendedAttributes(getMockLogger(), input);
47
48
  expect(output).toMatchObject(expectedAttributes);
48
- })
49
+ });
49
50
  });
50
51
  });
51
52
 
52
53
  describe('should generate file attributes', () => {
53
54
  const testCases: [object, string | undefined][] = [
54
55
  [{}, undefined],
55
- [{modificationTime: new Date(1234567890000)}, '{"Common":{"ModificationTime":"2009-02-13T23:31:30.000Z"}}'],
56
- [{size: undefined}, undefined],
57
- [{size: 0}, '{"Common":{"Size":0}}'],
58
- [{size: 1234}, '{"Common":{"Size":1234}}'],
59
- [{blockSizes: []}, undefined],
60
- [{blockSizes: [4,4,4,2]}, '{"Common":{"BlockSizes":[4,4,4,2]}}'],
61
- [{digests: {}}, undefined],
62
- [{digests: {sha1: 'abcdef'}}, '{"Common":{"Digests":{"SHA1":"abcdef"}}}'],
56
+ [
57
+ { modificationTime: new Date(1234567890000) },
58
+ '{"Common":{"ModificationTime":"2009-02-13T23:31:30.000Z"}}',
59
+ ],
60
+ [{ size: undefined }, undefined],
61
+ [{ size: 0 }, '{"Common":{"Size":0}}'],
62
+ [{ size: 1234 }, '{"Common":{"Size":1234}}'],
63
+ [{ blockSizes: [] }, undefined],
64
+ [{ blockSizes: [4, 4, 4, 2] }, '{"Common":{"BlockSizes":[4,4,4,2]}}'],
65
+ [{ digests: {} }, undefined],
66
+ [{ digests: { sha1: 'abcdef' } }, '{"Common":{"Digests":{"SHA1":"abcdef"}}}'],
63
67
  [
64
68
  {
65
69
  modificationTime: new Date(1234567890000),
66
70
  size: 1234,
67
71
  blockSizes: [4, 4, 4, 2],
68
- digests: {sha1: 'abcdef'},
72
+ digests: { sha1: 'abcdef' },
69
73
  },
70
74
  '{"Common":{"ModificationTime":"2009-02-13T23:31:30.000Z","Size":1234,"BlockSizes":[4,4,4,2],"Digests":{"SHA1":"abcdef"}}}',
71
75
  ],
@@ -74,7 +78,7 @@ describe('extended attrbiutes', () => {
74
78
  it(`should generate ${input}`, () => {
75
79
  const output = generateFileExtendedAttributes(input);
76
80
  expect(output).toBe(expectedAttributes);
77
- })
81
+ });
78
82
  });
79
83
  });
80
84
 
@@ -151,7 +155,7 @@ describe('extended attrbiutes', () => {
151
155
  {
152
156
  claimedModificationTime: undefined,
153
157
  claimedSize: undefined,
154
- claimedDigests: {sha1: "abcdef"},
158
+ claimedDigests: { sha1: 'abcdef' },
155
159
  claimedAdditionalMetadata: undefined,
156
160
  },
157
161
  ],
@@ -171,7 +175,7 @@ describe('extended attrbiutes', () => {
171
175
  it(`should parse ${input}`, () => {
172
176
  const output = parseFileExtendedAttributes(getMockLogger(), input);
173
177
  expect(output).toMatchObject(expectedAttributes);
174
- })
178
+ });
175
179
  });
176
180
  });
177
181
  });
@@ -1,4 +1,4 @@
1
- import { Logger } from "../../interface";
1
+ import { Logger } from '../../interface';
2
2
 
3
3
  interface FolderExtendedAttributesSchema {
4
4
  Common?: {
@@ -38,16 +38,16 @@ interface FileExtendedAttributesSchema {
38
38
  }
39
39
 
40
40
  export interface FolderExtendedAttributes {
41
- claimedModificationTime?: Date,
41
+ claimedModificationTime?: Date;
42
42
  }
43
43
 
44
44
  export interface FileExtendedAttributesParsed {
45
- claimedSize?: number,
46
- claimedModificationTime?: Date,
45
+ claimedSize?: number;
46
+ claimedModificationTime?: Date;
47
47
  claimedDigests?: {
48
- sha1?: string,
49
- },
50
- claimedAdditionalMetadata?: object,
48
+ sha1?: string;
49
+ };
50
+ claimedAdditionalMetadata?: object;
51
51
  }
52
52
 
53
53
  export function generateFolderExtendedAttributes(claimedModificationTime?: Date): string | undefined {
@@ -83,12 +83,12 @@ export function parseFolderExtendedAttributes(logger: Logger, extendedAttributes
83
83
  }
84
84
 
85
85
  export function generateFileExtendedAttributes(options: {
86
- modificationTime?: Date,
87
- size?: number,
88
- blockSizes?: number[],
86
+ modificationTime?: Date;
87
+ size?: number;
88
+ blockSizes?: number[];
89
89
  digests?: {
90
- sha1?: string,
91
- },
90
+ sha1?: string;
91
+ };
92
92
  }): string | undefined {
93
93
  const commonAttributes: FileExtendedAttributesSchema['Common'] = {};
94
94
  if (options.modificationTime) {
@@ -115,7 +115,7 @@ export function generateFileExtendedAttributes(options: {
115
115
 
116
116
  export function parseFileExtendedAttributes(logger: Logger, extendedAttributes?: string): FileExtendedAttributesParsed {
117
117
  if (!extendedAttributes) {
118
- return {}
118
+ return {};
119
119
  }
120
120
 
121
121
  try {
@@ -128,7 +128,9 @@ export function parseFileExtendedAttributes(logger: Logger, extendedAttributes?:
128
128
  claimedSize: parseSize(logger, parsed),
129
129
  claimedModificationTime: parseModificationTime(logger, parsed),
130
130
  claimedDigests: parseDigests(logger, parsed),
131
- claimedAdditionalMetadata: Object.keys(claimedAdditionalMetadata).length ? claimedAdditionalMetadata : undefined,
131
+ claimedAdditionalMetadata: Object.keys(claimedAdditionalMetadata).length
132
+ ? claimedAdditionalMetadata
133
+ : undefined,
132
134
  };
133
135
  } catch (error: unknown) {
134
136
  logger.error(`Failed to parse extended attributes`, error);
@@ -148,7 +150,10 @@ function parseSize(logger: Logger, xattr?: FileExtendedAttributesSchema): number
148
150
  return size;
149
151
  }
150
152
 
151
- function parseModificationTime(logger: Logger, xattr?: FolderExtendedAttributesSchema | FolderExtendedAttributesSchema): Date | undefined {
153
+ function parseModificationTime(
154
+ logger: Logger,
155
+ xattr?: FolderExtendedAttributesSchema | FolderExtendedAttributesSchema,
156
+ ): Date | undefined {
152
157
  const modificationTime = xattr?.Common?.ModificationTime;
153
158
  if (modificationTime === undefined) {
154
159
  return undefined;