@protontech/drive-sdk 0.14.9 → 0.15.0

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 (361) hide show
  1. package/README.md +5 -0
  2. package/dist/cache/index.d.ts +1 -1
  3. package/dist/cache/memoryCache.d.ts +1 -1
  4. package/dist/cache/nullCache.d.ts +1 -1
  5. package/dist/crypto/driveCrypto.d.ts +7 -11
  6. package/dist/crypto/driveCrypto.js +35 -38
  7. package/dist/crypto/driveCrypto.js.map +1 -1
  8. package/dist/crypto/driveCrypto.test.js +1 -21
  9. package/dist/crypto/driveCrypto.test.js.map +1 -1
  10. package/dist/crypto/index.d.ts +2 -4
  11. package/dist/crypto/index.js +3 -6
  12. package/dist/crypto/index.js.map +1 -1
  13. package/dist/crypto/interface.d.ts +3 -35
  14. package/dist/crypto/interface.js +0 -7
  15. package/dist/crypto/interface.js.map +1 -1
  16. package/dist/crypto/openPGPCrypto.d.ts +10 -106
  17. package/dist/crypto/openPGPCrypto.js +2 -4
  18. package/dist/crypto/openPGPCrypto.js.map +1 -1
  19. package/dist/diagnostic/index.d.ts +1 -1
  20. package/dist/diagnostic/index.js +1 -1
  21. package/dist/diagnostic/index.js.map +1 -1
  22. package/dist/diagnostic/integrityVerificationStream.js +1 -2
  23. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  24. package/dist/diagnostic/interface.d.ts +1 -1
  25. package/dist/diagnostic/nodeUtils.d.ts +1 -1
  26. package/dist/diagnostic/sdkDiagnosticBase.d.ts +2 -2
  27. package/dist/diagnostic/sdkDiagnosticBase.js.map +1 -1
  28. package/dist/diagnostic/sdkDiagnosticMain.js +1 -1
  29. package/dist/diagnostic/sdkDiagnosticMain.js.map +1 -1
  30. package/dist/diagnostic/sdkDiagnosticPhotos.js +1 -1
  31. package/dist/diagnostic/sdkDiagnosticPhotos.js.map +1 -1
  32. package/dist/index.d.ts +4 -3
  33. package/dist/index.js +2 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/interface/account.d.ts +1 -1
  36. package/dist/interface/devices.d.ts +1 -1
  37. package/dist/interface/index.d.ts +15 -15
  38. package/dist/interface/index.js +7 -7
  39. package/dist/interface/index.js.map +1 -1
  40. package/dist/interface/nodes.d.ts +1 -1
  41. package/dist/interface/photos.d.ts +1 -1
  42. package/dist/interface/sharing.d.ts +2 -2
  43. package/dist/internal/apiService/apiService.js +1 -1
  44. package/dist/internal/apiService/apiService.js.map +1 -1
  45. package/dist/internal/apiService/coreTypes.d.ts +8552 -7249
  46. package/dist/internal/apiService/driveTypes.d.ts +47 -92
  47. package/dist/internal/apiService/errors.test.js +1 -1
  48. package/dist/internal/apiService/errors.test.js.map +1 -1
  49. package/dist/internal/apiService/index.d.ts +4 -4
  50. package/dist/internal/apiService/index.js +5 -5
  51. package/dist/internal/apiService/index.js.map +1 -1
  52. package/dist/internal/apiService/transformers.d.ts +1 -1
  53. package/dist/internal/devices/index.d.ts +1 -1
  54. package/dist/internal/devices/manager.test.js +1 -1
  55. package/dist/internal/devices/manager.test.js.map +1 -1
  56. package/dist/internal/download/cryptoService.js +3 -2
  57. package/dist/internal/download/cryptoService.js.map +1 -1
  58. package/dist/internal/download/fileDownloader.js +8 -7
  59. package/dist/internal/download/fileDownloader.js.map +1 -1
  60. package/dist/internal/download/fileDownloader.test.js +1 -1
  61. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  62. package/dist/internal/download/index.d.ts +2 -2
  63. package/dist/internal/download/index.js +1 -1
  64. package/dist/internal/download/index.js.map +1 -1
  65. package/dist/internal/download/interface.d.ts +1 -1
  66. package/dist/internal/download/telemetry.js +2 -3
  67. package/dist/internal/download/telemetry.js.map +1 -1
  68. package/dist/internal/download/telemetry.test.js +5 -0
  69. package/dist/internal/download/telemetry.test.js.map +1 -1
  70. package/dist/internal/download/thumbnailDownloader.d.ts +1 -1
  71. package/dist/internal/download/thumbnailDownloader.js +1 -1
  72. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  73. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  74. package/dist/internal/errors.d.ts +1 -0
  75. package/dist/internal/errors.js +11 -0
  76. package/dist/internal/errors.js.map +1 -1
  77. package/dist/internal/events/coreEventManager.test.js +1 -1
  78. package/dist/internal/events/coreEventManager.test.js.map +1 -1
  79. package/dist/internal/events/eventManager.d.ts +1 -1
  80. package/dist/internal/events/eventManager.js +1 -0
  81. package/dist/internal/events/eventManager.js.map +1 -1
  82. package/dist/internal/events/index.js +1 -1
  83. package/dist/internal/events/index.js.map +1 -1
  84. package/dist/internal/events/interface.d.ts +8 -0
  85. package/dist/internal/events/interface.js.map +1 -1
  86. package/dist/internal/events/volumeEventManager.js +1 -1
  87. package/dist/internal/events/volumeEventManager.js.map +1 -1
  88. package/dist/internal/events/volumeEventManager.test.js +1 -1
  89. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  90. package/dist/internal/nodes/apiService.d.ts +10 -4
  91. package/dist/internal/nodes/apiService.js +6 -2
  92. package/dist/internal/nodes/apiService.js.map +1 -1
  93. package/dist/internal/nodes/apiService.test.js +6 -2
  94. package/dist/internal/nodes/apiService.test.js.map +1 -1
  95. package/dist/internal/nodes/cache.d.ts +1 -1
  96. package/dist/internal/nodes/cryptoCache.d.ts +1 -1
  97. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  98. package/dist/internal/nodes/cryptoReporter.d.ts +1 -1
  99. package/dist/internal/nodes/cryptoService.d.ts +2 -2
  100. package/dist/internal/nodes/cryptoService.js +2 -2
  101. package/dist/internal/nodes/cryptoService.js.map +1 -1
  102. package/dist/internal/nodes/cryptoService.test.js +1 -1
  103. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  104. package/dist/internal/nodes/events.test.js.map +1 -1
  105. package/dist/internal/nodes/index.d.ts +4 -4
  106. package/dist/internal/nodes/index.js +2 -2
  107. package/dist/internal/nodes/index.js.map +1 -1
  108. package/dist/internal/nodes/index.test.js +3 -3
  109. package/dist/internal/nodes/index.test.js.map +1 -1
  110. package/dist/internal/nodes/interface.d.ts +1 -1
  111. package/dist/internal/nodes/nodesAccess.d.ts +2 -2
  112. package/dist/internal/nodes/nodesAccess.js +3 -3
  113. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  114. package/dist/internal/nodes/nodesAccess.test.js +2 -2
  115. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  116. package/dist/internal/nodes/nodesManagement.d.ts +1 -1
  117. package/dist/internal/nodes/nodesManagement.js +2 -2
  118. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  119. package/dist/internal/nodes/nodesManagement.test.js +6 -6
  120. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  121. package/dist/internal/nodes/nodesRevisions.d.ts +1 -1
  122. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  123. package/dist/internal/photos/addToAlbum.d.ts +1 -1
  124. package/dist/internal/photos/addToAlbum.js.map +1 -1
  125. package/dist/internal/photos/albumsCrypto.js.map +1 -1
  126. package/dist/internal/photos/albumsManager.js +15 -5
  127. package/dist/internal/photos/albumsManager.js.map +1 -1
  128. package/dist/internal/photos/albumsManager.test.js +3 -2
  129. package/dist/internal/photos/albumsManager.test.js.map +1 -1
  130. package/dist/internal/photos/apiService.js +1 -1
  131. package/dist/internal/photos/index.d.ts +2 -2
  132. package/dist/internal/photos/index.js +5 -5
  133. package/dist/internal/photos/index.js.map +1 -1
  134. package/dist/internal/photos/interface.d.ts +2 -2
  135. package/dist/internal/photos/nodes.d.ts +2 -2
  136. package/dist/internal/photos/nodes.js +11 -1
  137. package/dist/internal/photos/nodes.js.map +1 -1
  138. package/dist/internal/photos/nodes.test.js +17 -3
  139. package/dist/internal/photos/nodes.test.js.map +1 -1
  140. package/dist/internal/photos/photosManager.d.ts +1 -1
  141. package/dist/internal/photos/photosManager.js +1 -1
  142. package/dist/internal/photos/photosManager.js.map +1 -1
  143. package/dist/internal/photos/photosManager.test.js +1 -1
  144. package/dist/internal/photos/photosManager.test.js.map +1 -1
  145. package/dist/internal/photos/photosTransferPayloadBuilder.test.js.map +1 -1
  146. package/dist/internal/photos/timeline.test.js.map +1 -1
  147. package/dist/internal/photos/upload.d.ts +1 -1
  148. package/dist/internal/shares/apiService.d.ts +1 -1
  149. package/dist/internal/shares/cache.d.ts +1 -1
  150. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  151. package/dist/internal/shares/cryptoService.d.ts +2 -2
  152. package/dist/internal/shares/cryptoService.js +1 -1
  153. package/dist/internal/shares/cryptoService.js.map +1 -1
  154. package/dist/internal/shares/cryptoService.test.js +1 -1
  155. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  156. package/dist/internal/shares/index.d.ts +2 -2
  157. package/dist/internal/shares/index.js +1 -1
  158. package/dist/internal/shares/index.js.map +1 -1
  159. package/dist/internal/shares/manager.d.ts +2 -2
  160. package/dist/internal/shares/manager.js.map +1 -1
  161. package/dist/internal/sharing/apiService.d.ts +2 -2
  162. package/dist/internal/sharing/cryptoService.d.ts +2 -3
  163. package/dist/internal/sharing/cryptoService.js +10 -31
  164. package/dist/internal/sharing/cryptoService.js.map +1 -1
  165. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  166. package/dist/internal/sharing/index.d.ts +3 -3
  167. package/dist/internal/sharing/index.js +1 -1
  168. package/dist/internal/sharing/index.js.map +1 -1
  169. package/dist/internal/sharing/interface.d.ts +2 -2
  170. package/dist/internal/sharing/sharingAccess.d.ts +1 -1
  171. package/dist/internal/sharing/sharingAccess.js +1 -1
  172. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  173. package/dist/internal/sharing/sharingAccess.test.js +1 -1
  174. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  175. package/dist/internal/sharing/sharingManagement.d.ts +3 -3
  176. package/dist/internal/sharing/sharingManagement.js +1 -1
  177. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  178. package/dist/internal/sharing/sharingManagement.test.js +2 -2
  179. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  180. package/dist/internal/sharingPublic/cryptoReporter.d.ts +1 -1
  181. package/dist/internal/sharingPublic/cryptoReporter.js +1 -1
  182. package/dist/internal/sharingPublic/cryptoReporter.js.map +1 -1
  183. package/dist/internal/sharingPublic/index.d.ts +2 -2
  184. package/dist/internal/sharingPublic/index.js +3 -3
  185. package/dist/internal/sharingPublic/index.js.map +1 -1
  186. package/dist/internal/sharingPublic/nodes.d.ts +4 -4
  187. package/dist/internal/sharingPublic/nodes.js +4 -1
  188. package/dist/internal/sharingPublic/nodes.js.map +1 -1
  189. package/dist/internal/sharingPublic/session/apiService.d.ts +1 -1
  190. package/dist/internal/sharingPublic/session/manager.d.ts +1 -1
  191. package/dist/internal/upload/apiService.d.ts +1 -1
  192. package/dist/internal/upload/apiService.js +13 -6
  193. package/dist/internal/upload/apiService.js.map +1 -1
  194. package/dist/internal/upload/cryptoService.d.ts +1 -1
  195. package/dist/internal/upload/cryptoService.js +5 -4
  196. package/dist/internal/upload/cryptoService.js.map +1 -1
  197. package/dist/internal/upload/fileUploader.test.js +1 -1
  198. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  199. package/dist/internal/upload/index.d.ts +2 -2
  200. package/dist/internal/upload/index.js.map +1 -1
  201. package/dist/internal/upload/interface.d.ts +1 -1
  202. package/dist/internal/upload/manager.d.ts +1 -1
  203. package/dist/internal/upload/manager.js +1 -1
  204. package/dist/internal/upload/manager.js.map +1 -1
  205. package/dist/internal/upload/smallFileUploader.test.js +1 -1
  206. package/dist/internal/upload/smallFileUploader.test.js.map +1 -1
  207. package/dist/internal/upload/streamUploader.d.ts +3 -3
  208. package/dist/internal/upload/streamUploader.js +1 -1
  209. package/dist/internal/upload/streamUploader.js.map +1 -1
  210. package/dist/internal/upload/streamUploader.test.js +2 -2
  211. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  212. package/dist/internal/upload/telemetry.d.ts +1 -1
  213. package/dist/internal/upload/telemetry.js +2 -3
  214. package/dist/internal/upload/telemetry.js.map +1 -1
  215. package/dist/internal/upload/telemetry.test.js +5 -0
  216. package/dist/internal/upload/telemetry.test.js.map +1 -1
  217. package/dist/polyfill.d.ts +1 -0
  218. package/dist/polyfill.js +4 -0
  219. package/dist/polyfill.js.map +1 -0
  220. package/dist/protonDriveClient.d.ts +1 -1
  221. package/dist/protonDriveClient.js +3 -3
  222. package/dist/protonDriveClient.js.map +1 -1
  223. package/dist/protonDrivePhotosClient.d.ts +7 -1
  224. package/dist/protonDrivePhotosClient.js +13 -4
  225. package/dist/protonDrivePhotosClient.js.map +1 -1
  226. package/dist/protonDrivePublicLinkClient.d.ts +3 -3
  227. package/dist/protonDrivePublicLinkClient.js +3 -3
  228. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  229. package/dist/transformers.d.ts +1 -1
  230. package/package.json +8 -4
  231. package/src/cache/index.ts +1 -1
  232. package/src/cache/memoryCache.ts +1 -1
  233. package/src/cache/nullCache.ts +1 -1
  234. package/src/crypto/driveCrypto.test.ts +1 -24
  235. package/src/crypto/driveCrypto.ts +37 -35
  236. package/src/crypto/index.ts +2 -4
  237. package/src/crypto/interface.ts +3 -49
  238. package/src/crypto/openPGPCrypto.ts +4 -88
  239. package/src/diagnostic/index.ts +3 -3
  240. package/src/diagnostic/integrityVerificationStream.ts +1 -2
  241. package/src/diagnostic/interface.ts +1 -1
  242. package/src/diagnostic/nodeUtils.ts +1 -1
  243. package/src/diagnostic/sdkDiagnosticBase.ts +6 -6
  244. package/src/diagnostic/sdkDiagnosticMain.ts +2 -2
  245. package/src/diagnostic/sdkDiagnosticPhotos.ts +2 -2
  246. package/src/diagnostic/telemetry.ts +1 -1
  247. package/src/index.ts +4 -3
  248. package/src/interface/account.ts +1 -1
  249. package/src/interface/devices.ts +1 -1
  250. package/src/interface/index.ts +40 -40
  251. package/src/interface/nodes.ts +1 -1
  252. package/src/interface/photos.ts +1 -1
  253. package/src/interface/sharing.ts +2 -2
  254. package/src/internal/apiService/apiService.test.ts +2 -2
  255. package/src/internal/apiService/apiService.ts +3 -3
  256. package/src/internal/apiService/coreTypes.ts +8641 -7349
  257. package/src/internal/apiService/driveTypes.ts +47 -92
  258. package/src/internal/apiService/errors.test.ts +2 -2
  259. package/src/internal/apiService/index.ts +4 -4
  260. package/src/internal/apiService/transformers.ts +1 -1
  261. package/src/internal/devices/index.ts +1 -1
  262. package/src/internal/devices/manager.test.ts +2 -2
  263. package/src/internal/download/cryptoService.ts +6 -11
  264. package/src/internal/download/fileDownloader.test.ts +3 -3
  265. package/src/internal/download/fileDownloader.ts +8 -6
  266. package/src/internal/download/index.ts +3 -3
  267. package/src/internal/download/interface.ts +1 -1
  268. package/src/internal/download/seekableStream.test.ts +1 -1
  269. package/src/internal/download/telemetry.test.ts +7 -1
  270. package/src/internal/download/telemetry.ts +4 -7
  271. package/src/internal/download/thumbnailDownloader.test.ts +1 -1
  272. package/src/internal/download/thumbnailDownloader.ts +2 -2
  273. package/src/internal/errors.ts +15 -0
  274. package/src/internal/events/apiService.ts +2 -2
  275. package/src/internal/events/coreEventManager.test.ts +1 -1
  276. package/src/internal/events/eventManager.ts +2 -1
  277. package/src/internal/events/index.ts +2 -2
  278. package/src/internal/events/interface.ts +8 -0
  279. package/src/internal/events/volumeEventManager.test.ts +1 -1
  280. package/src/internal/events/volumeEventManager.ts +1 -1
  281. package/src/internal/nodes/apiService.test.ts +8 -3
  282. package/src/internal/nodes/apiService.ts +22 -7
  283. package/src/internal/nodes/cache.test.ts +1 -1
  284. package/src/internal/nodes/cache.ts +1 -1
  285. package/src/internal/nodes/cryptoCache.test.ts +1 -1
  286. package/src/internal/nodes/cryptoCache.ts +1 -1
  287. package/src/internal/nodes/cryptoReporter.ts +4 -4
  288. package/src/internal/nodes/cryptoService.test.ts +2 -2
  289. package/src/internal/nodes/cryptoService.ts +14 -15
  290. package/src/internal/nodes/events.test.ts +1 -1
  291. package/src/internal/nodes/extendedAttributes.test.ts +3 -3
  292. package/src/internal/nodes/index.test.ts +8 -8
  293. package/src/internal/nodes/index.ts +6 -6
  294. package/src/internal/nodes/interface.ts +6 -6
  295. package/src/internal/nodes/nodeName.test.ts +1 -1
  296. package/src/internal/nodes/nodesAccess.test.ts +3 -3
  297. package/src/internal/nodes/nodesAccess.ts +6 -6
  298. package/src/internal/nodes/nodesManagement.test.ts +4 -4
  299. package/src/internal/nodes/nodesManagement.ts +6 -6
  300. package/src/internal/nodes/nodesRevisions.ts +1 -1
  301. package/src/internal/photos/addToAlbum.ts +1 -1
  302. package/src/internal/photos/albumsCrypto.ts +1 -0
  303. package/src/internal/photos/albumsManager.test.ts +4 -3
  304. package/src/internal/photos/albumsManager.ts +13 -5
  305. package/src/internal/photos/apiService.ts +1 -1
  306. package/src/internal/photos/index.ts +7 -7
  307. package/src/internal/photos/interface.ts +2 -2
  308. package/src/internal/photos/nodes.test.ts +22 -6
  309. package/src/internal/photos/nodes.ts +16 -9
  310. package/src/internal/photos/photosManager.test.ts +5 -5
  311. package/src/internal/photos/photosManager.ts +4 -4
  312. package/src/internal/photos/photosTransferPayloadBuilder.test.ts +1 -1
  313. package/src/internal/photos/timeline.test.ts +1 -1
  314. package/src/internal/photos/upload.ts +3 -3
  315. package/src/internal/sdkEvents.ts +1 -1
  316. package/src/internal/shares/apiService.ts +1 -1
  317. package/src/internal/shares/cache.ts +1 -1
  318. package/src/internal/shares/cryptoCache.test.ts +1 -1
  319. package/src/internal/shares/cryptoService.test.ts +1 -1
  320. package/src/internal/shares/cryptoService.ts +8 -8
  321. package/src/internal/shares/index.ts +5 -5
  322. package/src/internal/shares/manager.ts +2 -2
  323. package/src/internal/sharing/apiService.ts +10 -10
  324. package/src/internal/sharing/cryptoService.test.ts +1 -1
  325. package/src/internal/sharing/cryptoService.ts +12 -37
  326. package/src/internal/sharing/events.test.ts +2 -2
  327. package/src/internal/sharing/index.ts +3 -3
  328. package/src/internal/sharing/interface.ts +2 -2
  329. package/src/internal/sharing/sharingAccess.test.ts +4 -4
  330. package/src/internal/sharing/sharingAccess.ts +3 -3
  331. package/src/internal/sharing/sharingManagement.test.ts +4 -4
  332. package/src/internal/sharing/sharingManagement.ts +9 -9
  333. package/src/internal/sharingPublic/cryptoReporter.ts +7 -7
  334. package/src/internal/sharingPublic/index.ts +6 -6
  335. package/src/internal/sharingPublic/nodes.ts +7 -4
  336. package/src/internal/sharingPublic/session/apiService.ts +1 -1
  337. package/src/internal/sharingPublic/session/manager.ts +1 -1
  338. package/src/internal/upload/apiService.ts +17 -8
  339. package/src/internal/upload/cryptoService.ts +8 -6
  340. package/src/internal/upload/fileUploader.test.ts +4 -4
  341. package/src/internal/upload/index.ts +3 -3
  342. package/src/internal/upload/interface.ts +1 -2
  343. package/src/internal/upload/manager.ts +4 -4
  344. package/src/internal/upload/smallFileUploader.test.ts +4 -4
  345. package/src/internal/upload/streamUploader.test.ts +5 -5
  346. package/src/internal/upload/streamUploader.ts +4 -4
  347. package/src/internal/upload/telemetry.test.ts +7 -1
  348. package/src/internal/upload/telemetry.ts +5 -8
  349. package/src/polyfill.ts +1 -0
  350. package/src/protonDriveClient.ts +32 -32
  351. package/src/protonDrivePhotosClient.ts +42 -32
  352. package/src/protonDrivePublicLinkClient.ts +25 -25
  353. package/src/transformers.ts +9 -9
  354. package/dist/crypto/hmac.d.ts +0 -22
  355. package/dist/crypto/hmac.js +0 -44
  356. package/dist/crypto/hmac.js.map +0 -1
  357. package/dist/crypto/utils.d.ts +0 -2
  358. package/dist/crypto/utils.js +0 -35
  359. package/dist/crypto/utils.js.map +0 -1
  360. package/src/crypto/hmac.ts +0 -46
  361. package/src/crypto/utils.ts +0 -40
@@ -1,4 +1,4 @@
1
- import { getMockLogger } from '../../tests/logger';
1
+ import { ValidationError } from '../../errors';
2
2
  import {
3
3
  Logger,
4
4
  Member,
@@ -10,13 +10,13 @@ import {
10
10
  PublicLink,
11
11
  resultOk,
12
12
  } from '../../interface';
13
+ import { getMockLogger } from '../../tests/logger';
14
+ import { ErrorCode } from '../apiService';
13
15
  import { SharingAPIService } from './apiService';
14
16
  import { SharingCache } from './cache';
15
17
  import { SharingCryptoService } from './cryptoService';
16
- import { SharesService, NodesService } from './interface';
18
+ import { NodesService, SharesService } from './interface';
17
19
  import { SharingManagement } from './sharingManagement';
18
- import { ValidationError } from '../../errors';
19
- import { ErrorCode } from '../apiService';
20
20
 
21
21
  const DEFAULT_SHARE_ID = 'shareId';
22
22
 
@@ -4,24 +4,24 @@ import { PrivateKey, SessionKey } from '../../crypto';
4
4
  import { ValidationError } from '../../errors';
5
5
  import {
6
6
  Logger,
7
+ Member,
7
8
  MemberRole,
8
- ShareNodeSettings,
9
- UnshareNodeSettings,
10
- ShareResult,
11
- ProtonInvitation,
12
9
  NonProtonInvitation,
13
- Member,
14
- resultOk,
15
10
  ProtonDriveAccount,
11
+ ProtonInvitation,
12
+ resultOk,
13
+ ShareNodeSettings,
16
14
  SharePublicLinkSettingsObject,
15
+ ShareResult,
16
+ UnshareNodeSettings,
17
17
  } from '../../interface';
18
18
  import { ErrorCode } from '../apiService';
19
- import { splitNodeUid, splitInvitationUid } from '../uids';
20
19
  import { getErrorMessage } from '../errors';
20
+ import { splitInvitationUid, splitNodeUid } from '../uids';
21
21
  import { SharingAPIService } from './apiService';
22
- import { PUBLIC_LINK_GENERATED_PASSWORD_LENGTH, SharingCryptoService } from './cryptoService';
23
- import { SharesService, NodesService, ShareResultWithCreatorEmail, PublicLinkWithCreatorEmail } from './interface';
24
22
  import { SharingCache } from './cache';
23
+ import { PUBLIC_LINK_GENERATED_PASSWORD_LENGTH, SharingCryptoService } from './cryptoService';
24
+ import { NodesService, PublicLinkWithCreatorEmail, ShareResultWithCreatorEmail, SharesService } from './interface';
25
25
 
26
26
  interface InternalShareResult extends ShareResultWithCreatorEmail {
27
27
  share: Share;
@@ -1,18 +1,18 @@
1
1
  import { c } from 'ttag';
2
2
 
3
3
  import { VERIFICATION_STATUS } from '../../crypto';
4
- import { getVerificationMessage, isNotApplicationError } from '../errors';
5
4
  import {
6
- resultOk,
7
- resultError,
8
- Author,
9
5
  AnonymousUser,
10
- ProtonDriveTelemetry,
6
+ Author,
7
+ Logger,
8
+ MetricsDecryptionErrorField,
11
9
  MetricVerificationErrorField,
12
10
  MetricVolumeType,
13
- MetricsDecryptionErrorField,
14
- Logger,
11
+ ProtonDriveTelemetry,
12
+ resultError,
13
+ resultOk,
15
14
  } from '../../interface';
15
+ import { getVerificationMessage, isNotApplicationError } from '../errors';
16
16
 
17
17
  export class SharingPublicCryptoReporter {
18
18
  private logger: Logger;
@@ -1,21 +1,21 @@
1
1
  import { DriveCrypto, PrivateKey } from '../../crypto';
2
2
  import {
3
- ProtonDriveCryptoCache,
4
- ProtonDriveTelemetry,
3
+ MemberRole,
5
4
  ProtonDriveAccount,
5
+ ProtonDriveCryptoCache,
6
6
  ProtonDriveEntitiesCache,
7
- MemberRole,
7
+ ProtonDriveTelemetry,
8
8
  } from '../../interface';
9
9
  import { DriveAPIService } from '../apiService';
10
- import { SharingPublicNodesAPIService, SharingPublicNodesCryptoService } from './nodes';
11
10
  import { NodesCache } from '../nodes/cache';
12
11
  import { NodesCryptoCache } from '../nodes/cryptoCache';
13
12
  import { NodesRevisons } from '../nodes/nodesRevisions';
13
+ import { SharingPublicAPIService } from './apiService';
14
14
  import { SharingPublicCryptoReporter } from './cryptoReporter';
15
+ import { SharingPublicNodesAPIService, SharingPublicNodesCryptoService } from './nodes';
15
16
  import { SharingPublicNodesAccess, SharingPublicNodesManagement } from './nodes';
16
- import { SharingPublicSharesManager } from './shares';
17
- import { SharingPublicAPIService } from './apiService';
18
17
  import { NodesSecurity } from './nodesSecurity';
18
+ import { SharingPublicSharesManager } from './shares';
19
19
 
20
20
  export { SharingPublicSessionManager } from './session/manager';
21
21
  export { getTokenAndPasswordFromUrl } from './session/url';
@@ -4,14 +4,14 @@ import { PrivateKey } from '../../crypto';
4
4
  import { ValidationError } from '../../errors';
5
5
  import { type Logger, MemberRole, NodeResult, ProtonDriveTelemetry } from '../../interface';
6
6
  import { type DriveAPIService, drivePaths } from '../apiService';
7
- import { NodeAPIService, linkToEncryptedNode } from '../nodes/apiService';
7
+ import { linkToEncryptedNode, NodeAPIService } from '../nodes/apiService';
8
8
  import { NodesCache } from '../nodes/cache';
9
9
  import { NodesCryptoCache } from '../nodes/cryptoCache';
10
10
  import { NodesCryptoService } from '../nodes/cryptoService';
11
- import { DecryptedNode, DecryptedNodeKeys, NodeSigningKeys, EncryptedNode } from '../nodes/interface';
11
+ import { DecryptedNode, DecryptedNodeKeys, EncryptedNode, NodeSigningKeys } from '../nodes/interface';
12
+ import { isProtonDocument, isProtonSheet } from '../nodes/mediaTypes';
12
13
  import { NodesAccess } from '../nodes/nodesAccess';
13
14
  import { NodesManagement } from '../nodes/nodesManagement';
14
- import { isProtonDocument, isProtonSheet } from '../nodes/mediaTypes';
15
15
  import { validateNodeName } from '../nodes/validations';
16
16
  import { makeNodeUid, splitNodeUid } from '../uids';
17
17
  import { SharingPublicSharesManager } from './shares';
@@ -82,9 +82,12 @@ export class SharingPublicNodesAPIService extends NodeAPIService {
82
82
  volumeId: string,
83
83
  link: PostLoadLinksMetadataResponse['Links'][0],
84
84
  isOwnVolumeId: boolean,
85
- ): EncryptedNode {
85
+ ): EncryptedNode | undefined {
86
86
  const nodeUid = makeNodeUid(volumeId, link.Link.LinkID);
87
87
  const encryptedNode = linkToEncryptedNode(this.logger, volumeId, link, isOwnVolumeId);
88
+ if (!encryptedNode) {
89
+ return undefined;
90
+ }
88
91
 
89
92
  // TODO: This affects the cache. At this moment, the public link is not cached
90
93
  // anywhere, thus OK. To avoid issues when public links reuses the same cache,
@@ -1,7 +1,7 @@
1
1
  import { Logger } from '../../../interface';
2
2
  import { DriveAPIService, drivePaths, permissionsToMemberRole } from '../../apiService';
3
3
  import { makeNodeUid } from '../../uids';
4
- import { PublicLinkInfo, PublicLinkSrpAuth, PublicLinkSession, EncryptedShareCrypto } from './interface';
4
+ import { EncryptedShareCrypto, PublicLinkInfo, PublicLinkSession, PublicLinkSrpAuth } from './interface';
5
5
 
6
6
  type GetPublicLinkInfoResponse =
7
7
  drivePaths['/drive/urls/{token}/info']['get']['responses']['200']['content']['application/json'];
@@ -1,5 +1,5 @@
1
- import { Logger, MemberRole, ProtonDriveHTTPClient, ProtonDriveTelemetry } from '../../../interface';
2
1
  import { DriveCrypto, PrivateKey, SRPModule } from '../../../crypto';
2
+ import { Logger, MemberRole, ProtonDriveHTTPClient, ProtonDriveTelemetry } from '../../../interface';
3
3
  import { DriveAPIService, permissionsToMemberRole } from '../../apiService';
4
4
  import { SharingPublicSessionAPIService } from './apiService';
5
5
  import { SharingPublicSessionHttpClient } from './httpClient';
@@ -1,11 +1,10 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { base64StringToUint8Array, uint8ArrayToBase64String } from '../../crypto';
4
3
  import { AnonymousUser } from '../../interface';
4
+ import { ThumbnailType } from '../../interface';
5
5
  import { APICodeError, DriveAPIService, drivePaths, isCodeOk } from '../apiService';
6
- import { splitNodeUid, makeNodeUid, splitNodeRevisionUid, makeNodeRevisionUid } from '../uids';
6
+ import { makeNodeRevisionUid, makeNodeUid, splitNodeRevisionUid, splitNodeUid } from '../uids';
7
7
  import { UploadTokens } from './interface';
8
- import { ThumbnailType } from '../../interface';
9
8
 
10
9
  type PostCreateDraftRequest = Extract<
11
10
  drivePaths['/drive/v2/volumes/{volumeID}/files']['post']['requestBody'],
@@ -171,7 +170,7 @@ export class UploadAPIService {
171
170
  );
172
171
 
173
172
  return {
174
- verificationCode: base64StringToUint8Array(result.VerificationCode),
173
+ verificationCode: Uint8Array.fromBase64(result.VerificationCode),
175
174
  base64ContentKeyPacket: result.ContentKeyPacket,
176
175
  };
177
176
  }
@@ -210,7 +209,7 @@ export class UploadAPIService {
210
209
  Index: block.index,
211
210
  EncSignature: block.armoredSignature,
212
211
  Verifier: {
213
- Token: uint8ArrayToBase64String(block.verificationToken),
212
+ Token: block.verificationToken.toBase64(),
214
213
  },
215
214
  })),
216
215
  ThumbnailList: (blocks.thumbnails || []).map((block) => ({
@@ -287,7 +286,17 @@ export class UploadAPIService {
287
286
  const formData = new FormData();
288
287
  formData.append('Block', new Blob([block]), 'blob');
289
288
 
290
- await this.apiService.postBlockStream(url, token, formData, onProgress, signal);
289
+ let onProgressCalled = false;
290
+ const onProgressHandler = (uploadedBytes: number) => {
291
+ onProgressCalled = true;
292
+ onProgress?.(uploadedBytes);
293
+ };
294
+
295
+ await this.apiService.postBlockStream(url, token, formData, onProgressHandler, signal);
296
+
297
+ if (!onProgressCalled) {
298
+ onProgress?.(block.length);
299
+ }
291
300
  }
292
301
 
293
302
  async isRevisionUploaded(nodeRevisionUid: string): Promise<boolean> {
@@ -355,7 +364,7 @@ export class UploadAPIService {
355
364
  ManifestSignature: content.armoredManifestSignature,
356
365
  ContentBlockEncSignature: content.block ? content.block.armoredSignature : null,
357
366
  ContentBlockVerificationToken: content.block
358
- ? uint8ArrayToBase64String(content.block.verificationToken)
367
+ ? content.block.verificationToken.toBase64()
359
368
  : null,
360
369
  XAttr: metadata.armoredExtendedAttributes,
361
370
  ChecksumVerified: content.checksumVerified || false,
@@ -423,7 +432,7 @@ export class UploadAPIService {
423
432
  ManifestSignature: content.armoredManifestSignature,
424
433
  ContentBlockEncSignature: content.block ? content.block.armoredSignature : null,
425
434
  ContentBlockVerificationToken: content.block
426
- ? uint8ArrayToBase64String(content.block.verificationToken)
435
+ ? content.block.verificationToken.toBase64()
427
436
  : null,
428
437
  XAttr: metadata.armoredExtendedAttributes,
429
438
  ChecksumVerified: content.checksumVerified || false,
@@ -1,14 +1,16 @@
1
1
  import { c } from 'ttag';
2
2
 
3
+ import { computeSHA256 } from '@protontech/crypto/subtle/hash.ts';
4
+
3
5
  import { DriveCrypto, PrivateKey, SessionKey } from '../../crypto';
4
6
  import { IntegrityError } from '../../errors';
5
7
  import {
6
- Thumbnail,
7
8
  AnonymousUser,
8
9
  FeatureFlagProvider,
9
10
  FeatureFlags,
10
- ProtonDriveTelemetry,
11
11
  Logger,
12
+ ProtonDriveTelemetry,
13
+ Thumbnail,
12
14
  } from '../../interface';
13
15
  import {
14
16
  EncryptedBlock,
@@ -133,14 +135,14 @@ export class UploadCryptoService {
133
135
  nodeRevisionDraftKeys.signingKeys.contentSigningKey,
134
136
  );
135
137
 
136
- const digestPromise = crypto.subtle.digest('SHA-256', encryptedData);
138
+ const digestPromise = computeSHA256(encryptedData);
137
139
 
138
140
  return {
139
141
  type: thumbnail.type,
140
142
  encryptedData: encryptedData,
141
143
  originalSize: thumbnail.thumbnail.length,
142
144
  encryptedSize: encryptedData.length,
143
- hashPromise: digestPromise.then((digest) => new Uint8Array<ArrayBuffer>(digest)),
145
+ hashPromise: digestPromise,
144
146
  };
145
147
  }
146
148
 
@@ -158,7 +160,7 @@ export class UploadCryptoService {
158
160
  nodeRevisionDraftKeys.contentKeyPacketSessionKey,
159
161
  nodeRevisionDraftKeys.signingKeys.contentSigningKey,
160
162
  );
161
- const digestPromise = crypto.subtle.digest('SHA-256', encryptedData);
163
+ const digestPromise = computeSHA256(encryptedData);
162
164
  const { verificationToken } = await verifyBlock(encryptedData);
163
165
 
164
166
  return {
@@ -168,7 +170,7 @@ export class UploadCryptoService {
168
170
  verificationToken,
169
171
  originalSize: block.length,
170
172
  encryptedSize: encryptedData.length,
171
- hashPromise: digestPromise.then((digest) => new Uint8Array<ArrayBuffer>(digest)),
173
+ hashPromise: digestPromise,
172
174
  };
173
175
  }
174
176
 
@@ -1,12 +1,12 @@
1
1
  import { Thumbnail, UploadMetadata } from '../../interface';
2
- import { FileUploader } from './fileUploader';
3
- import { UploadTelemetry } from './telemetry';
4
2
  import { UploadAPIService } from './apiService';
5
- import { UploadCryptoService } from './cryptoService';
6
- import { UploadController } from './controller';
7
3
  import { BlockVerifier } from './blockVerifier';
4
+ import { UploadController } from './controller';
5
+ import { UploadCryptoService } from './cryptoService';
6
+ import { FileUploader } from './fileUploader';
8
7
  import { NodeRevisionDraft } from './interface';
9
8
  import { UploadManager } from './manager';
9
+ import { UploadTelemetry } from './telemetry';
10
10
 
11
11
  const BLOCK_ENCRYPTION_OVERHEAD = 10000;
12
12
 
@@ -1,10 +1,10 @@
1
- import { FeatureFlagProvider, FeatureFlags, ProtonDriveTelemetry, UploadMetadata } from '../../interface';
1
+ import { DriveCrypto } from '../../crypto';
2
2
  import type { FileUploader } from '../../interface';
3
+ import { FeatureFlagProvider, FeatureFlags, ProtonDriveTelemetry, UploadMetadata } from '../../interface';
3
4
  import { DriveAPIService } from '../apiService';
4
- import { DriveCrypto } from '../../crypto';
5
5
  import { UploadAPIService } from './apiService';
6
6
  import { UploadCryptoService } from './cryptoService';
7
- import { FileUploader as FileUploaderClass, FileRevisionUploader } from './fileUploader';
7
+ import { FileRevisionUploader, FileUploader as FileUploaderClass } from './fileUploader';
8
8
  import { NodesService, SharesService } from './interface';
9
9
  import { UploadManager } from './manager';
10
10
  import { UploadQueue } from './queue';
@@ -1,6 +1,5 @@
1
1
  import { PrivateKey, SessionKey } from '../../crypto';
2
-
3
- import { MetricVolumeType, ThumbnailType, Result, Revision, AnonymousUser } from '../../interface';
2
+ import { AnonymousUser, MetricVolumeType, Result, Revision, ThumbnailType } from '../../interface';
4
3
  import { DecryptedNode } from '../nodes';
5
4
 
6
5
  export type NodeRevisionDraft = {
@@ -1,15 +1,15 @@
1
1
  import { c } from 'ttag';
2
2
 
3
3
  import { PrivateKey, SessionKey } from '../../crypto';
4
+ import { NodeWithSameNameExistsValidationError, ValidationError } from '../../errors';
4
5
  import { Logger, ProtonDriveTelemetry, ThumbnailType, UploadMetadata } from '../../interface';
5
- import { ValidationError, NodeWithSameNameExistsValidationError } from '../../errors';
6
+ import { reduceSizePrecision } from '../../telemetry';
6
7
  import { ErrorCode } from '../apiService';
7
8
  import { generateFileExtendedAttributes } from '../nodes';
9
+ import { makeNodeUid, splitNodeUid } from '../uids';
8
10
  import { UploadAPIService } from './apiService';
9
11
  import { UploadCryptoService } from './cryptoService';
10
- import { NodeRevisionDraft, NodesService, NodeCrypto } from './interface';
11
- import { makeNodeUid, splitNodeUid } from '../uids';
12
- import { reduceSizePrecision } from '../../telemetry';
12
+ import { NodeCrypto, NodeRevisionDraft, NodesService } from './interface';
13
13
 
14
14
  /**
15
15
  * UploadManager is responsible for creating and deleting draft nodes
@@ -1,12 +1,12 @@
1
1
  import { IntegrityError } from '../../errors';
2
2
  import { Thumbnail, ThumbnailType, UploadMetadata } from '../../interface';
3
- import { SmallFileUploader, SmallFileRevisionUploader } from './smallFileUploader';
4
- import { UploadTelemetry } from './telemetry';
3
+ import { mergeUint8Arrays } from '../utils';
5
4
  import { UploadAPIService } from './apiService';
6
5
  import { UploadCryptoService } from './cryptoService';
7
- import { UploadManager } from './manager';
8
6
  import { NodeCrypto } from './interface';
9
- import { mergeUint8Arrays } from '../utils';
7
+ import { UploadManager } from './manager';
8
+ import { SmallFileRevisionUploader, SmallFileUploader } from './smallFileUploader';
9
+ import { UploadTelemetry } from './telemetry';
10
10
 
11
11
  const MOCK_BLOCK_HASH = new Uint8Array(32).fill(4);
12
12
  const MOCK_VERIFICATION_TOKEN = new Uint8Array(16).fill(5);
@@ -1,15 +1,15 @@
1
- import { Logger, Thumbnail, ThumbnailType, UploadMetadata } from '../../interface';
2
1
  import { IntegrityError } from '../../errors';
2
+ import { Logger, Thumbnail, ThumbnailType, UploadMetadata } from '../../interface';
3
3
  import { getMockLogger } from '../../tests/logger';
4
4
  import { APIHTTPError, HTTPErrorCode } from '../apiService';
5
- import { FILE_CHUNK_SIZE, StreamUploader } from './streamUploader';
6
- import { UploadTelemetry } from './telemetry';
7
5
  import { UploadAPIService } from './apiService';
8
- import { UploadCryptoService } from './cryptoService';
9
- import { UploadController } from './controller';
10
6
  import { BlockVerifier } from './blockVerifier';
7
+ import { UploadController } from './controller';
8
+ import { UploadCryptoService } from './cryptoService';
11
9
  import { NodeRevisionDraft } from './interface';
12
10
  import { UploadManager } from './manager';
11
+ import { FILE_CHUNK_SIZE, StreamUploader } from './streamUploader';
12
+ import { UploadTelemetry } from './telemetry';
13
13
 
14
14
  const BLOCK_ENCRYPTION_OVERHEAD = 10000;
15
15
 
@@ -1,7 +1,7 @@
1
1
  import { c } from 'ttag';
2
2
 
3
- import { Thumbnail, Logger, ThumbnailType, UploadMetadata } from '../../interface';
4
3
  import { AbortError, IntegrityError } from '../../errors';
4
+ import { Logger, Thumbnail, ThumbnailType, UploadMetadata } from '../../interface';
5
5
  import { LoggerWithPrefix } from '../../telemetry';
6
6
  import { APIHTTPError, HTTPErrorCode, NotFoundAPIError } from '../apiService';
7
7
  import { getErrorMessage } from '../errors';
@@ -9,13 +9,13 @@ import { mergeUint8Arrays } from '../utils';
9
9
  import { waitForCondition } from '../wait';
10
10
  import { UploadAPIService } from './apiService';
11
11
  import { BlockVerifier } from './blockVerifier';
12
+ import { ChunkStreamReader } from './chunkStreamReader';
12
13
  import { UploadController } from './controller';
13
14
  import { UploadCryptoService } from './cryptoService';
14
15
  import { UploadDigests } from './digests';
15
- import { NodeRevisionDraft, EncryptedBlock, EncryptedThumbnail, EncryptedBlockMetadata } from './interface';
16
- import { UploadTelemetry } from './telemetry';
17
- import { ChunkStreamReader } from './chunkStreamReader';
16
+ import { EncryptedBlock, EncryptedBlockMetadata, EncryptedThumbnail, NodeRevisionDraft } from './interface';
18
17
  import { UploadManager } from './manager';
18
+ import { UploadTelemetry } from './telemetry';
19
19
 
20
20
  /**
21
21
  * File chunk size in bytes representing the size of each block.
@@ -1,4 +1,4 @@
1
- import { RateLimitedError, ValidationError, IntegrityError } from '../../errors';
1
+ import { IntegrityError, RateLimitedError, ValidationError } from '../../errors';
2
2
  import { ProtonDriveTelemetry } from '../../interface';
3
3
  import { APIHTTPError } from '../apiService';
4
4
  import { SharesService } from './interface';
@@ -135,5 +135,11 @@ describe('UploadTelemetry', () => {
135
135
  await uploadTelemetry.uploadFailed(revisionUid, error, 500, 1000);
136
136
  verifyErrorCategory('network_error');
137
137
  });
138
+
139
+ it('should detect "network_error" for TypeError', async () => {
140
+ const error = new TypeError('Failed to fetch');
141
+ await uploadTelemetry.uploadFailed(revisionUid, error, 500, 1000);
142
+ verifyErrorCategory('network_error');
143
+ });
138
144
  });
139
145
  });
@@ -1,8 +1,9 @@
1
- import { RateLimitedError, ValidationError, IntegrityError } from '../../errors';
2
- import { ProtonDriveTelemetry, MetricsUploadErrorType, Logger, MetricVolumeType } from '../../interface';
1
+ import { IntegrityError, RateLimitedError, ValidationError } from '../../errors';
2
+ import { Logger, MetricsUploadErrorType, MetricVolumeType, ProtonDriveTelemetry } from '../../interface';
3
3
  import { LoggerWithPrefix, reduceSizePrecision } from '../../telemetry';
4
4
  import { APIHTTPError } from '../apiService';
5
- import { splitNodeUid, splitNodeRevisionUid } from '../uids';
5
+ import { isNetworkError } from '../errors';
6
+ import { splitNodeRevisionUid, splitNodeUid } from '../uids';
6
7
  import { SharesService } from './interface';
7
8
 
8
9
  export class UploadTelemetry {
@@ -124,11 +125,7 @@ function getErrorCategory(error: unknown): MetricsUploadErrorType | undefined {
124
125
  if (error.name === 'TimeoutError') {
125
126
  return 'server_error';
126
127
  }
127
- if (
128
- error.name === 'OfflineError' ||
129
- error.name === 'NetworkError' ||
130
- error.message?.toLowerCase() === 'network error'
131
- ) {
128
+ if (isNetworkError(error)) {
132
129
  return 'network_error';
133
130
  }
134
131
  if (error.name === 'AbortError') {
@@ -0,0 +1 @@
1
+ import '@protontech/crypto/polyfill';
@@ -2,47 +2,37 @@ import { getConfig } from './config';
2
2
  import { DriveCrypto, SessionKey } from './crypto';
3
3
  import { NullFeatureFlagProvider } from './featureFlags';
4
4
  import {
5
+ BookmarkOrUid,
6
+ Device,
7
+ DeviceOrUid,
8
+ DeviceType,
9
+ FileDownloader,
10
+ FileUploader,
5
11
  Logger,
6
- ProtonDriveClientContructorParameters,
7
- NodeOrUid,
8
- MaybeNode,
12
+ MaybeBookmark,
9
13
  MaybeMissingNode,
14
+ MaybeNode,
15
+ MemberRole,
16
+ NodeOrUid,
10
17
  NodeResult,
11
18
  NodeResultWithError,
12
19
  NodeResultWithNewUid,
13
- Revision,
14
- RevisionOrUid,
15
- ShareNodeSettings,
16
- UnshareNodeSettings,
20
+ NodeType,
21
+ NonProtonInvitationOrUid,
22
+ ProtonDriveClientContructorParameters,
17
23
  ProtonInvitation,
18
24
  ProtonInvitationOrUid,
19
- NonProtonInvitationOrUid,
20
25
  ProtonInvitationWithNode,
21
- MaybeBookmark,
22
- BookmarkOrUid,
26
+ Revision,
27
+ RevisionOrUid,
28
+ SDKEvent,
29
+ ShareNodeSettings,
23
30
  ShareResult,
24
- Device,
25
- DeviceType,
26
- DeviceOrUid,
27
- UploadMetadata,
28
- FileDownloader,
29
- FileUploader,
30
- ThumbnailType,
31
31
  ThumbnailResult,
32
- SDKEvent,
33
- NodeType,
34
- MemberRole,
32
+ ThumbnailType,
33
+ UnshareNodeSettings,
34
+ UploadMetadata,
35
35
  } from './interface';
36
- import {
37
- getUid,
38
- getUids,
39
- convertInternalNodePromise,
40
- convertInternalNodeIterator,
41
- convertInternalMissingNodeIterator,
42
- convertInternalNode,
43
- convertInternalRevisionIterator,
44
- } from './transformers';
45
- import { Telemetry } from './telemetry';
46
36
  import { DriveAPIService } from './internal/apiService';
47
37
  import { initDevicesModule } from './internal/devices';
48
38
  import { initDownloadModule } from './internal/download';
@@ -51,10 +41,20 @@ import { initNodesModule } from './internal/nodes';
51
41
  import { SDKEvents } from './internal/sdkEvents';
52
42
  import { initSharesModule } from './internal/shares';
53
43
  import { initSharingModule } from './internal/sharing';
54
- import { SharingPublicSessionManager, getTokenAndPasswordFromUrl } from './internal/sharingPublic';
55
- import { initUploadModule } from './internal/upload';
44
+ import { getTokenAndPasswordFromUrl, SharingPublicSessionManager } from './internal/sharingPublic';
56
45
  import { makeNodeUid } from './internal/uids';
46
+ import { initUploadModule } from './internal/upload';
57
47
  import { ProtonDrivePublicLinkClient } from './protonDrivePublicLinkClient';
48
+ import { Telemetry } from './telemetry';
49
+ import {
50
+ convertInternalMissingNodeIterator,
51
+ convertInternalNode,
52
+ convertInternalNodeIterator,
53
+ convertInternalNodePromise,
54
+ convertInternalRevisionIterator,
55
+ getUid,
56
+ getUids,
57
+ } from './transformers';
58
58
 
59
59
  /**
60
60
  * ProtonDriveClient is the main interface for the ProtonDrive SDK.
@@ -1,54 +1,54 @@
1
+ import { getConfig } from './config';
2
+ import { DriveCrypto } from './crypto';
3
+ import { NullFeatureFlagProvider } from './featureFlags';
1
4
  import {
2
- Logger,
3
- ProtonDriveClientContructorParameters,
4
- NodeOrUid,
5
- MaybeMissingPhotoNode,
6
- UploadMetadata,
7
5
  FileDownloader,
8
6
  FileUploader,
9
- SDKEvent,
7
+ Logger,
8
+ MaybeMissingPhotoNode,
10
9
  MaybePhotoNode,
11
- ThumbnailType,
12
- ThumbnailResult,
13
- ShareNodeSettings,
14
- ShareResult,
15
- UnshareNodeSettings,
16
- ProtonInvitation,
17
- ProtonInvitationOrUid,
18
- NonProtonInvitationOrUid,
19
- ProtonInvitationWithNode,
10
+ NodeOrUid,
20
11
  NodeResult,
21
12
  NodeResultWithError,
13
+ NonProtonInvitationOrUid,
22
14
  PhotoTag,
15
+ ProtonDriveClientContructorParameters,
16
+ ProtonInvitation,
17
+ ProtonInvitationOrUid,
18
+ ProtonInvitationWithNode,
19
+ SDKEvent,
20
+ ShareNodeSettings,
21
+ ShareResult,
22
+ ThumbnailResult,
23
+ ThumbnailType,
24
+ UnshareNodeSettings,
25
+ UploadMetadata,
23
26
  } from './interface';
24
- import { getConfig } from './config';
25
- import { DriveCrypto } from './crypto';
26
- import { Telemetry } from './telemetry';
27
- import {
28
- convertInternalMissingPhotoNodeIterator,
29
- convertInternalPhotoNode,
30
- convertInternalPhotoNodeIterator,
31
- convertInternalPhotoNodePromise,
32
- getUid,
33
- getUids,
34
- } from './transformers';
35
27
  import { DriveAPIService } from './internal/apiService';
36
- import { makeNodeUid } from './internal/uids';
37
28
  import { initDownloadModule } from './internal/download';
38
29
  import { DriveEventsService, DriveListener, EventSubscription } from './internal/events';
39
30
  import {
40
- PHOTOS_SHARE_TARGET_TYPES,
41
- initPhotosModule,
31
+ AlbumItem,
42
32
  initPhotoSharesModule,
43
- initPhotoUploadModule,
33
+ initPhotosModule,
44
34
  initPhotosNodesModule,
45
- AlbumItem,
35
+ initPhotoUploadModule,
36
+ PHOTOS_SHARE_TARGET_TYPES,
46
37
  TimelineItem,
47
38
  } from './internal/photos';
48
39
  import { SDKEvents } from './internal/sdkEvents';
49
40
  import { initSharesModule } from './internal/shares';
50
41
  import { initSharingModule } from './internal/sharing';
51
- import { NullFeatureFlagProvider } from './featureFlags';
42
+ import { makeNodeUid } from './internal/uids';
43
+ import { Telemetry } from './telemetry';
44
+ import {
45
+ convertInternalMissingPhotoNodeIterator,
46
+ convertInternalPhotoNode,
47
+ convertInternalPhotoNodeIterator,
48
+ convertInternalPhotoNodePromise,
49
+ getUid,
50
+ getUids,
51
+ } from './transformers';
52
52
 
53
53
  /**
54
54
  * ProtonDrivePhotosClient is the interface to access Photos functionality.
@@ -511,6 +511,16 @@ export class ProtonDrivePhotosClient {
511
511
  return this.upload.getFileUploader(getUid(parentFolderUid), name, metadata, signal);
512
512
  }
513
513
 
514
+ /**
515
+ * Returns an available name for a new node in the given parent folder.
516
+ *
517
+ * See `ProtonDriveClient.getAvailableName` for more information.
518
+ */
519
+ async getAvailableName(parentFolderUid: NodeOrUid, name: string): Promise<string> {
520
+ this.logger.info(`Getting available name in photos folder ${getUid(parentFolderUid)}`);
521
+ return this.nodes.management.findAvailableName(getUid(parentFolderUid), name);
522
+ }
523
+
514
524
  /**
515
525
  * Check if the photo is a duplicate.
516
526
  *