@protontech/drive-sdk 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/dist/cache/memoryCache.js +0 -1
  2. package/dist/cache/memoryCache.js.map +1 -1
  3. package/dist/cache/memoryCache.test.js +2 -4
  4. package/dist/cache/memoryCache.test.js.map +1 -1
  5. package/dist/cache/nullCache.js +0 -1
  6. package/dist/cache/nullCache.js.map +1 -1
  7. package/dist/crypto/driveCrypto.d.ts +2 -5
  8. package/dist/crypto/driveCrypto.js +7 -12
  9. package/dist/crypto/driveCrypto.js.map +1 -1
  10. package/dist/crypto/driveCrypto.test.js +14 -14
  11. package/dist/crypto/openPGPCrypto.js +3 -3
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.js +1 -1
  14. package/dist/diagnostic/eventsGenerator.js.map +1 -1
  15. package/dist/diagnostic/httpClient.d.ts +1 -1
  16. package/dist/diagnostic/httpClient.js.map +1 -1
  17. package/dist/diagnostic/index.d.ts +3 -3
  18. package/dist/diagnostic/index.js.map +1 -1
  19. package/dist/diagnostic/integrityVerificationStream.js +1 -1
  20. package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
  21. package/dist/diagnostic/interface.d.ts +2 -2
  22. package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
  23. package/dist/diagnostic/sdkDiagnostic.js +8 -2
  24. package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
  25. package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
  26. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
  27. package/dist/diagnostic/telemetry.js.map +1 -1
  28. package/dist/diagnostic/zipGenerators.js +2 -2
  29. package/dist/diagnostic/zipGenerators.js.map +1 -1
  30. package/dist/diagnostic/zipGenerators.test.js +1 -1
  31. package/dist/diagnostic/zipGenerators.test.js.map +1 -1
  32. package/dist/interface/events.d.ts +2 -4
  33. package/dist/interface/events.js.map +1 -1
  34. package/dist/interface/index.d.ts +5 -5
  35. package/dist/interface/index.js +0 -1
  36. package/dist/interface/index.js.map +1 -1
  37. package/dist/interface/result.js.map +1 -1
  38. package/dist/interface/sharing.d.ts +1 -0
  39. package/dist/interface/sharing.js.map +1 -1
  40. package/dist/interface/telemetry.js +0 -8
  41. package/dist/interface/telemetry.js.map +1 -1
  42. package/dist/interface/thumbnail.js.map +1 -1
  43. package/dist/interface/upload.d.ts +1 -1
  44. package/dist/internal/apiService/apiService.d.ts +1 -1
  45. package/dist/internal/apiService/apiService.js +7 -11
  46. package/dist/internal/apiService/apiService.js.map +1 -1
  47. package/dist/internal/apiService/apiService.test.js +55 -48
  48. package/dist/internal/apiService/apiService.test.js.map +1 -1
  49. package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
  50. package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
  51. package/dist/internal/apiService/errors.js +14 -8
  52. package/dist/internal/apiService/errors.js.map +1 -1
  53. package/dist/internal/apiService/errors.test.js +17 -12
  54. package/dist/internal/apiService/errors.test.js.map +1 -1
  55. package/dist/internal/apiService/transformers.d.ts +1 -1
  56. package/dist/internal/apiService/transformers.js +1 -1
  57. package/dist/internal/asyncIteratorMap.test.js +2 -2
  58. package/dist/internal/asyncIteratorMap.test.js.map +1 -1
  59. package/dist/internal/asyncIteratorRace.d.ts +13 -0
  60. package/dist/internal/asyncIteratorRace.js +59 -0
  61. package/dist/internal/asyncIteratorRace.js.map +1 -0
  62. package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
  63. package/dist/internal/asyncIteratorRace.test.js +119 -0
  64. package/dist/internal/asyncIteratorRace.test.js.map +1 -0
  65. package/dist/internal/batch.d.ts +1 -0
  66. package/dist/internal/batch.js +12 -0
  67. package/dist/internal/batch.js.map +1 -0
  68. package/dist/internal/batch.test.d.ts +1 -0
  69. package/dist/internal/batch.test.js +41 -0
  70. package/dist/internal/batch.test.js.map +1 -0
  71. package/dist/internal/batchLoading.js.map +1 -1
  72. package/dist/internal/batchLoading.test.js +13 -13
  73. package/dist/internal/batchLoading.test.js.map +1 -1
  74. package/dist/internal/devices/apiService.d.ts +3 -3
  75. package/dist/internal/devices/apiService.js +2 -2
  76. package/dist/internal/devices/apiService.js.map +1 -1
  77. package/dist/internal/devices/cryptoService.js +1 -2
  78. package/dist/internal/devices/cryptoService.js.map +1 -1
  79. package/dist/internal/devices/index.d.ts +5 -5
  80. package/dist/internal/devices/index.js.map +1 -1
  81. package/dist/internal/devices/interface.d.ts +3 -3
  82. package/dist/internal/devices/manager.js +2 -2
  83. package/dist/internal/devices/manager.js.map +1 -1
  84. package/dist/internal/devices/manager.test.js +38 -7
  85. package/dist/internal/devices/manager.test.js.map +1 -1
  86. package/dist/internal/download/apiService.d.ts +4 -4
  87. package/dist/internal/download/apiService.js +0 -1
  88. package/dist/internal/download/apiService.js.map +1 -1
  89. package/dist/internal/download/cryptoService.d.ts +4 -4
  90. package/dist/internal/download/cryptoService.js +6 -5
  91. package/dist/internal/download/cryptoService.js.map +1 -1
  92. package/dist/internal/download/fileDownloader.d.ts +4 -4
  93. package/dist/internal/download/fileDownloader.js +3 -2
  94. package/dist/internal/download/fileDownloader.js.map +1 -1
  95. package/dist/internal/download/fileDownloader.test.js +1 -1
  96. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  97. package/dist/internal/download/index.d.ts +5 -5
  98. package/dist/internal/download/index.js +5 -5
  99. package/dist/internal/download/index.js.map +1 -1
  100. package/dist/internal/download/interface.d.ts +3 -4
  101. package/dist/internal/download/telemetry.d.ts +3 -3
  102. package/dist/internal/download/telemetry.js +4 -2
  103. package/dist/internal/download/telemetry.js.map +1 -1
  104. package/dist/internal/download/telemetry.test.js +8 -8
  105. package/dist/internal/download/telemetry.test.js.map +1 -1
  106. package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
  107. package/dist/internal/download/thumbnailDownloader.js +6 -6
  108. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  109. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
  110. package/dist/internal/errors.d.ts +1 -1
  111. package/dist/internal/errors.js +1 -3
  112. package/dist/internal/errors.js.map +1 -1
  113. package/dist/internal/events/apiService.d.ts +2 -2
  114. package/dist/internal/events/apiService.js +9 -5
  115. package/dist/internal/events/apiService.js.map +1 -1
  116. package/dist/internal/events/coreEventManager.d.ts +3 -3
  117. package/dist/internal/events/coreEventManager.js.map +1 -1
  118. package/dist/internal/events/coreEventManager.test.js +14 -14
  119. package/dist/internal/events/eventManager.d.ts +1 -1
  120. package/dist/internal/events/eventManager.js +0 -1
  121. package/dist/internal/events/eventManager.js.map +1 -1
  122. package/dist/internal/events/eventManager.test.js +34 -25
  123. package/dist/internal/events/eventManager.test.js.map +1 -1
  124. package/dist/internal/events/index.d.ts +6 -6
  125. package/dist/internal/events/index.js.map +1 -1
  126. package/dist/internal/events/interface.d.ts +1 -1
  127. package/dist/internal/events/interface.js +0 -1
  128. package/dist/internal/events/interface.js.map +1 -1
  129. package/dist/internal/events/volumeEventManager.d.ts +3 -3
  130. package/dist/internal/events/volumeEventManager.js.map +1 -1
  131. package/dist/internal/events/volumeEventManager.test.js +55 -55
  132. package/dist/internal/events/volumeEventManager.test.js.map +1 -1
  133. package/dist/internal/nodes/apiService.d.ts +4 -3
  134. package/dist/internal/nodes/apiService.js +36 -15
  135. package/dist/internal/nodes/apiService.js.map +1 -1
  136. package/dist/internal/nodes/apiService.test.js +60 -41
  137. package/dist/internal/nodes/apiService.test.js.map +1 -1
  138. package/dist/internal/nodes/cache.d.ts +5 -5
  139. package/dist/internal/nodes/cache.js +14 -7
  140. package/dist/internal/nodes/cache.js.map +1 -1
  141. package/dist/internal/nodes/cache.test.js +31 -9
  142. package/dist/internal/nodes/cache.test.js.map +1 -1
  143. package/dist/internal/nodes/cryptoCache.d.ts +2 -2
  144. package/dist/internal/nodes/cryptoCache.js.map +1 -1
  145. package/dist/internal/nodes/cryptoCache.test.js +24 -4
  146. package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
  147. package/dist/internal/nodes/cryptoService.d.ts +3 -3
  148. package/dist/internal/nodes/cryptoService.js +11 -17
  149. package/dist/internal/nodes/cryptoService.js.map +1 -1
  150. package/dist/internal/nodes/cryptoService.test.js +320 -241
  151. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  152. package/dist/internal/nodes/events.d.ts +3 -3
  153. package/dist/internal/nodes/events.js.map +1 -1
  154. package/dist/internal/nodes/events.test.js +27 -21
  155. package/dist/internal/nodes/events.test.js.map +1 -1
  156. package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
  157. package/dist/internal/nodes/extendedAttributes.js +3 -1
  158. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  159. package/dist/internal/nodes/extendedAttributes.test.js +7 -10
  160. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  161. package/dist/internal/nodes/index.d.ts +10 -10
  162. package/dist/internal/nodes/index.js.map +1 -1
  163. package/dist/internal/nodes/index.test.d.ts +1 -0
  164. package/dist/internal/nodes/index.test.js +106 -0
  165. package/dist/internal/nodes/index.test.js.map +1 -0
  166. package/dist/internal/nodes/interface.d.ts +2 -2
  167. package/dist/internal/nodes/nodesAccess.d.ts +7 -7
  168. package/dist/internal/nodes/nodesAccess.js +28 -16
  169. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  170. package/dist/internal/nodes/nodesAccess.test.js +39 -13
  171. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  172. package/dist/internal/nodes/nodesManagement.d.ts +6 -6
  173. package/dist/internal/nodes/nodesManagement.js +9 -7
  174. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  175. package/dist/internal/nodes/nodesManagement.test.js +9 -9
  176. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  177. package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
  178. package/dist/internal/nodes/nodesRevisions.js.map +1 -1
  179. package/dist/internal/photos/albums.d.ts +3 -3
  180. package/dist/internal/photos/albums.js.map +1 -1
  181. package/dist/internal/photos/apiService.d.ts +1 -1
  182. package/dist/internal/photos/apiService.js +3 -6
  183. package/dist/internal/photos/apiService.js.map +1 -1
  184. package/dist/internal/photos/cache.d.ts +1 -1
  185. package/dist/internal/photos/index.d.ts +5 -5
  186. package/dist/internal/photos/index.js.map +1 -1
  187. package/dist/internal/photos/interface.d.ts +2 -2
  188. package/dist/internal/photos/photosTimeline.d.ts +3 -3
  189. package/dist/internal/photos/photosTimeline.js +1 -2
  190. package/dist/internal/photos/photosTimeline.js.map +1 -1
  191. package/dist/internal/sdkEvents.d.ts +1 -1
  192. package/dist/internal/sdkEvents.js +2 -7
  193. package/dist/internal/sdkEvents.js.map +1 -1
  194. package/dist/internal/sdkEvents.test.js +8 -8
  195. package/dist/internal/shares/apiService.d.ts +2 -2
  196. package/dist/internal/shares/apiService.js +5 -3
  197. package/dist/internal/shares/apiService.js.map +1 -1
  198. package/dist/internal/shares/cache.d.ts +2 -2
  199. package/dist/internal/shares/cache.js +12 -6
  200. package/dist/internal/shares/cache.js.map +1 -1
  201. package/dist/internal/shares/cache.test.js.map +1 -1
  202. package/dist/internal/shares/cryptoCache.d.ts +2 -2
  203. package/dist/internal/shares/cryptoCache.test.js +8 -2
  204. package/dist/internal/shares/cryptoCache.test.js.map +1 -1
  205. package/dist/internal/shares/cryptoService.d.ts +3 -3
  206. package/dist/internal/shares/cryptoService.js.map +1 -1
  207. package/dist/internal/shares/cryptoService.test.js +42 -42
  208. package/dist/internal/shares/cryptoService.test.js.map +1 -1
  209. package/dist/internal/shares/index.d.ts +4 -4
  210. package/dist/internal/shares/index.js.map +1 -1
  211. package/dist/internal/shares/interface.d.ts +2 -2
  212. package/dist/internal/shares/manager.d.ts +7 -7
  213. package/dist/internal/shares/manager.js.map +1 -1
  214. package/dist/internal/shares/manager.test.js +71 -63
  215. package/dist/internal/shares/manager.test.js.map +1 -1
  216. package/dist/internal/sharing/apiService.d.ts +4 -4
  217. package/dist/internal/sharing/apiService.js +4 -3
  218. package/dist/internal/sharing/apiService.js.map +1 -1
  219. package/dist/internal/sharing/cache.d.ts +1 -1
  220. package/dist/internal/sharing/cache.test.js +33 -33
  221. package/dist/internal/sharing/cryptoService.d.ts +3 -3
  222. package/dist/internal/sharing/cryptoService.js +3 -5
  223. package/dist/internal/sharing/cryptoService.js.map +1 -1
  224. package/dist/internal/sharing/cryptoService.test.js +39 -39
  225. package/dist/internal/sharing/cryptoService.test.js.map +1 -1
  226. package/dist/internal/sharing/events.d.ts +4 -4
  227. package/dist/internal/sharing/events.js +0 -1
  228. package/dist/internal/sharing/events.js.map +1 -1
  229. package/dist/internal/sharing/events.test.js +39 -40
  230. package/dist/internal/sharing/events.test.js.map +1 -1
  231. package/dist/internal/sharing/index.d.ts +6 -6
  232. package/dist/internal/sharing/index.js.map +1 -1
  233. package/dist/internal/sharing/interface.d.ts +5 -4
  234. package/dist/internal/sharing/sharingAccess.d.ts +6 -6
  235. package/dist/internal/sharing/sharingAccess.js +8 -4
  236. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  237. package/dist/internal/sharing/sharingAccess.test.js +45 -39
  238. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  239. package/dist/internal/sharing/sharingManagement.d.ts +4 -4
  240. package/dist/internal/sharing/sharingManagement.js +5 -7
  241. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  242. package/dist/internal/sharing/sharingManagement.test.js +297 -248
  243. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  244. package/dist/internal/uids.js.map +1 -1
  245. package/dist/internal/upload/apiService.d.ts +3 -3
  246. package/dist/internal/upload/apiService.js +1 -1
  247. package/dist/internal/upload/apiService.js.map +1 -1
  248. package/dist/internal/upload/blockVerifier.d.ts +3 -3
  249. package/dist/internal/upload/blockVerifier.js +1 -1
  250. package/dist/internal/upload/blockVerifier.js.map +1 -1
  251. package/dist/internal/upload/chunkStreamReader.test.js +6 -6
  252. package/dist/internal/upload/cryptoService.d.ts +4 -4
  253. package/dist/internal/upload/cryptoService.js +4 -4
  254. package/dist/internal/upload/cryptoService.js.map +1 -1
  255. package/dist/internal/upload/digests.js.map +1 -1
  256. package/dist/internal/upload/fileUploader.d.ts +6 -6
  257. package/dist/internal/upload/fileUploader.js.map +1 -1
  258. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  259. package/dist/internal/upload/index.d.ts +5 -5
  260. package/dist/internal/upload/index.js.map +1 -1
  261. package/dist/internal/upload/interface.d.ts +3 -3
  262. package/dist/internal/upload/manager.d.ts +4 -4
  263. package/dist/internal/upload/manager.js +7 -5
  264. package/dist/internal/upload/manager.js.map +1 -1
  265. package/dist/internal/upload/manager.test.js +137 -123
  266. package/dist/internal/upload/manager.test.js.map +1 -1
  267. package/dist/internal/upload/streamUploader.d.ts +6 -6
  268. package/dist/internal/upload/streamUploader.js +8 -6
  269. package/dist/internal/upload/streamUploader.js.map +1 -1
  270. package/dist/internal/upload/streamUploader.test.js +16 -11
  271. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  272. package/dist/internal/upload/telemetry.d.ts +3 -3
  273. package/dist/internal/upload/telemetry.js +5 -3
  274. package/dist/internal/upload/telemetry.js.map +1 -1
  275. package/dist/internal/upload/telemetry.test.js +8 -8
  276. package/dist/internal/upload/telemetry.test.js.map +1 -1
  277. package/dist/protonDriveClient.d.ts +8 -8
  278. package/dist/protonDriveClient.js +12 -9
  279. package/dist/protonDriveClient.js.map +1 -1
  280. package/dist/protonDrivePhotosClient.js.map +1 -1
  281. package/dist/telemetry.js +18 -15
  282. package/dist/telemetry.js.map +1 -1
  283. package/dist/tests/logger.js.map +1 -1
  284. package/dist/tests/telemetry.d.ts +1 -1
  285. package/dist/transformers.js +4 -2
  286. package/dist/transformers.js.map +1 -1
  287. package/package.json +1 -1
  288. package/src/cache/interface.ts +22 -22
  289. package/src/cache/memoryCache.test.ts +7 -7
  290. package/src/cache/memoryCache.ts +4 -4
  291. package/src/cache/nullCache.ts +1 -1
  292. package/src/config.ts +5 -5
  293. package/src/crypto/driveCrypto.test.ts +15 -15
  294. package/src/crypto/driveCrypto.ts +120 -156
  295. package/src/crypto/hmac.ts +1 -1
  296. package/src/crypto/interface.ts +63 -72
  297. package/src/crypto/openPGPCrypto.ts +74 -94
  298. package/src/crypto/utils.ts +1 -1
  299. package/src/diagnostic/eventsGenerator.ts +2 -2
  300. package/src/diagnostic/httpClient.ts +6 -2
  301. package/src/diagnostic/index.ts +12 -10
  302. package/src/diagnostic/integrityVerificationStream.ts +3 -4
  303. package/src/diagnostic/interface.ts +81 -81
  304. package/src/diagnostic/sdkDiagnostic.ts +35 -24
  305. package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
  306. package/src/diagnostic/telemetry.ts +4 -1
  307. package/src/diagnostic/zipGenerators.test.ts +1 -1
  308. package/src/diagnostic/zipGenerators.ts +3 -3
  309. package/src/errors.ts +21 -21
  310. package/src/index.ts +3 -3
  311. package/src/interface/account.ts +10 -10
  312. package/src/interface/author.ts +6 -6
  313. package/src/interface/config.ts +4 -4
  314. package/src/interface/devices.ts +6 -6
  315. package/src/interface/download.ts +12 -9
  316. package/src/interface/events.ts +45 -39
  317. package/src/interface/httpClient.ts +11 -11
  318. package/src/interface/index.ts +76 -19
  319. package/src/interface/nodes.ts +47 -49
  320. package/src/interface/result.ts +1 -3
  321. package/src/interface/sharing.ts +60 -57
  322. package/src/interface/telemetry.ts +74 -74
  323. package/src/interface/thumbnail.ts +5 -6
  324. package/src/interface/upload.ts +20 -12
  325. package/src/internal/apiService/apiService.test.ts +109 -76
  326. package/src/internal/apiService/apiService.ts +40 -26
  327. package/src/internal/apiService/coreTypes.ts +2474 -2463
  328. package/src/internal/apiService/driveTypes.ts +1868 -1822
  329. package/src/internal/apiService/errorCodes.ts +4 -4
  330. package/src/internal/apiService/errors.test.ts +25 -23
  331. package/src/internal/apiService/errors.ts +15 -9
  332. package/src/internal/apiService/index.ts +1 -1
  333. package/src/internal/apiService/transformers.ts +2 -2
  334. package/src/internal/asyncIteratorMap.test.ts +4 -4
  335. package/src/internal/asyncIteratorMap.ts +1 -1
  336. package/src/internal/asyncIteratorRace.test.ts +149 -0
  337. package/src/internal/asyncIteratorRace.ts +79 -0
  338. package/src/internal/batch.test.ts +50 -0
  339. package/src/internal/batch.ts +9 -0
  340. package/src/internal/batchLoading.test.ts +13 -14
  341. package/src/internal/batchLoading.ts +8 -8
  342. package/src/internal/devices/apiService.ts +58 -51
  343. package/src/internal/devices/cryptoService.ts +22 -17
  344. package/src/internal/devices/index.ts +17 -10
  345. package/src/internal/devices/interface.ts +21 -12
  346. package/src/internal/devices/manager.test.ts +40 -9
  347. package/src/internal/devices/manager.ts +3 -3
  348. package/src/internal/download/apiService.ts +66 -49
  349. package/src/internal/download/cryptoService.ts +34 -18
  350. package/src/internal/download/fileDownloader.test.ts +25 -9
  351. package/src/internal/download/fileDownloader.ts +36 -18
  352. package/src/internal/download/index.ts +19 -19
  353. package/src/internal/download/interface.ts +19 -20
  354. package/src/internal/download/queue.ts +3 -3
  355. package/src/internal/download/telemetry.test.ts +11 -11
  356. package/src/internal/download/telemetry.ts +24 -14
  357. package/src/internal/download/thumbnailDownloader.test.ts +11 -6
  358. package/src/internal/download/thumbnailDownloader.ts +43 -32
  359. package/src/internal/errors.ts +7 -5
  360. package/src/internal/events/apiService.ts +30 -17
  361. package/src/internal/events/coreEventManager.test.ts +18 -18
  362. package/src/internal/events/coreEventManager.ts +9 -6
  363. package/src/internal/events/eventManager.test.ts +51 -46
  364. package/src/internal/events/eventManager.ts +6 -5
  365. package/src/internal/events/index.ts +24 -14
  366. package/src/internal/events/interface.ts +47 -39
  367. package/src/internal/events/volumeEventManager.test.ts +61 -65
  368. package/src/internal/events/volumeEventManager.ts +18 -9
  369. package/src/internal/nodes/apiService.test.ts +197 -147
  370. package/src/internal/nodes/apiService.ts +288 -174
  371. package/src/internal/nodes/cache.test.ts +48 -20
  372. package/src/internal/nodes/cache.ts +60 -44
  373. package/src/internal/nodes/cryptoCache.test.ts +34 -14
  374. package/src/internal/nodes/cryptoCache.ts +10 -5
  375. package/src/internal/nodes/cryptoService.test.ts +492 -351
  376. package/src/internal/nodes/cryptoService.ts +170 -88
  377. package/src/internal/nodes/events.test.ts +38 -28
  378. package/src/internal/nodes/events.ts +7 -5
  379. package/src/internal/nodes/extendedAttributes.test.ts +28 -24
  380. package/src/internal/nodes/extendedAttributes.ts +20 -15
  381. package/src/internal/nodes/index.test.ts +133 -0
  382. package/src/internal/nodes/index.ts +27 -15
  383. package/src/internal/nodes/interface.ts +42 -29
  384. package/src/internal/nodes/nodesAccess.test.ts +124 -58
  385. package/src/internal/nodes/nodesAccess.ts +73 -49
  386. package/src/internal/nodes/nodesManagement.test.ts +32 -31
  387. package/src/internal/nodes/nodesManagement.ts +39 -32
  388. package/src/internal/nodes/nodesRevisions.ts +7 -7
  389. package/src/internal/nodes/validations.ts +2 -2
  390. package/src/internal/photos/albums.ts +5 -5
  391. package/src/internal/photos/apiService.ts +4 -7
  392. package/src/internal/photos/cache.ts +1 -1
  393. package/src/internal/photos/index.ts +8 -8
  394. package/src/internal/photos/interface.ts +2 -2
  395. package/src/internal/photos/photosTimeline.ts +4 -5
  396. package/src/internal/sdkEvents.test.ts +10 -10
  397. package/src/internal/sdkEvents.ts +5 -13
  398. package/src/internal/shares/apiService.ts +44 -33
  399. package/src/internal/shares/cache.test.ts +6 -4
  400. package/src/internal/shares/cache.ts +21 -12
  401. package/src/internal/shares/cryptoCache.test.ts +17 -11
  402. package/src/internal/shares/cryptoCache.ts +4 -4
  403. package/src/internal/shares/cryptoService.test.ts +72 -74
  404. package/src/internal/shares/cryptoService.ts +48 -23
  405. package/src/internal/shares/index.ts +23 -11
  406. package/src/internal/shares/interface.ts +8 -8
  407. package/src/internal/shares/manager.test.ts +88 -80
  408. package/src/internal/shares/manager.ts +19 -19
  409. package/src/internal/sharing/apiService.ts +282 -175
  410. package/src/internal/sharing/cache.test.ts +35 -35
  411. package/src/internal/sharing/cache.ts +2 -2
  412. package/src/internal/sharing/cryptoService.test.ts +58 -46
  413. package/src/internal/sharing/cryptoService.ts +121 -84
  414. package/src/internal/sharing/events.test.ts +45 -49
  415. package/src/internal/sharing/events.ts +9 -6
  416. package/src/internal/sharing/index.ts +22 -11
  417. package/src/internal/sharing/interface.ts +40 -40
  418. package/src/internal/sharing/sharingAccess.test.ts +71 -65
  419. package/src/internal/sharing/sharingAccess.ts +39 -21
  420. package/src/internal/sharing/sharingManagement.test.ts +398 -298
  421. package/src/internal/sharing/sharingManagement.ts +138 -65
  422. package/src/internal/uids.ts +1 -1
  423. package/src/internal/upload/apiService.ts +167 -117
  424. package/src/internal/upload/blockVerifier.ts +8 -6
  425. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  426. package/src/internal/upload/cryptoService.ts +42 -36
  427. package/src/internal/upload/digests.ts +2 -2
  428. package/src/internal/upload/fileUploader.test.ts +15 -3
  429. package/src/internal/upload/fileUploader.ts +39 -17
  430. package/src/internal/upload/index.ts +13 -14
  431. package/src/internal/upload/interface.ts +78 -78
  432. package/src/internal/upload/manager.test.ts +170 -153
  433. package/src/internal/upload/manager.ts +59 -35
  434. package/src/internal/upload/queue.ts +3 -3
  435. package/src/internal/upload/streamUploader.test.ts +40 -26
  436. package/src/internal/upload/streamUploader.ts +87 -69
  437. package/src/internal/upload/telemetry.test.ts +11 -11
  438. package/src/internal/upload/telemetry.ts +25 -15
  439. package/src/internal/wait.test.ts +1 -1
  440. package/src/internal/wait.ts +3 -3
  441. package/src/protonDriveClient.ts +121 -39
  442. package/src/protonDrivePhotosClient.ts +16 -10
  443. package/src/telemetry.ts +60 -52
  444. package/src/tests/logger.ts +1 -1
  445. package/src/tests/telemetry.ts +2 -2
  446. package/src/transformers.ts +27 -21
  447. package/src/version.ts +0 -1
@@ -1,53 +1,123 @@
1
- import { SRPVerifier } from "../../crypto";
2
- import { NodeType, MemberRole, NonProtonInvitationState, Logger } from "../../interface";
3
- import { DriveAPIService, drivePaths, nodeTypeNumberToNodeType, permissionsToDirectMemberRole, memberRoleToPermission } from "../apiService";
4
- import { makeNodeUid, splitNodeUid, makeInvitationUid, splitInvitationUid, makeMemberUid, splitMemberUid, makePublicLinkUid, splitPublicLinkUid } from "../uids";
5
- import { EncryptedInvitationRequest, EncryptedInvitation, EncryptedInvitationWithNode, EncryptedExternalInvitation, EncryptedMember, EncryptedBookmark, EncryptedExternalInvitationRequest, EncryptedPublicLink, EncryptedPublicLinkCrypto } from "./interface";
6
-
7
- type GetSharedNodesResponse = drivePaths['/drive/v2/volumes/{volumeID}/shares']['get']['responses']['200']['content']['application/json'];
8
-
9
- type GetSharedWithMeNodesResponse = drivePaths['/drive/v2/sharedwithme']['get']['responses']['200']['content']['application/json'];
10
-
11
- type GetInvitationsResponse = drivePaths['/drive/v2/shares/invitations']['get']['responses']['200']['content']['application/json'];
12
-
13
- type GetInvitationDetailsResponse = drivePaths['/drive/v2/shares/invitations/{invitationID}']['get']['responses']['200']['content']['application/json'];
14
-
15
- type PostAcceptInvitationRequest = Extract<drivePaths['/drive/v2/shares/invitations/{invitationID}/accept']['post']['requestBody'], { 'content': object }>['content']['application/json'];
16
- type PostAcceptInvitationResponse = drivePaths['/drive/v2/shares/invitations/{invitationID}/accept']['post']['responses']['200']['content']['application/json'];
17
-
18
- type GetSharedBookmarksResponse = drivePaths['/drive/v2/shared-bookmarks']['get']['responses']['200']['content']['application/json'];
19
-
20
- type GetShareInvitations = drivePaths['/drive/v2/shares/{shareID}/invitations']['get']['responses']['200']['content']['application/json'];
21
-
22
- type GetShareExternalInvitations = drivePaths['/drive/v2/shares/{shareID}/external-invitations']['get']['responses']['200']['content']['application/json'];
23
-
24
- type GetShareMembers = drivePaths['/drive/v2/shares/{shareID}/members']['get']['responses']['200']['content']['application/json'];
25
-
26
- type PostCreateShareRequest = Extract<drivePaths['/drive/volumes/{volumeID}/shares']['post']['requestBody'], { 'content': object }>['content']['application/json'];
27
- type PostCreateShareResponse = drivePaths['/drive/volumes/{volumeID}/shares']['post']['responses']['200']['content']['application/json'];
28
-
29
- type PostInviteProtonUserRequest = Extract<drivePaths['/drive/v2/shares/{shareID}/invitations']['post']['requestBody'], { 'content': object }>['content']['application/json'];
30
- type PostInviteProtonUserResponse = drivePaths['/drive/v2/shares/{shareID}/invitations']['post']['responses']['200']['content']['application/json'];
31
-
32
- type PutUpdateInvitationRequest = Extract<drivePaths['/drive/v2/shares/{shareID}/invitations/{invitationID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
33
- type PutUpdateInvitationResponse = drivePaths['/drive/v2/shares/{shareID}/invitations/{invitationID}']['put']['responses']['200']['content']['application/json'];
34
-
35
- type PostInviteExternalUserRequest = Extract<drivePaths['/drive/v2/shares/{shareID}/external-invitations']['post']['requestBody'], { 'content': object }>['content']['application/json'];
36
- type PostInviteExternalUserResponse = drivePaths['/drive/v2/shares/{shareID}/external-invitations']['post']['responses']['200']['content']['application/json'];
37
-
38
- type PutUpdateExternalInvitationRequest = Extract<drivePaths['/drive/v2/shares/{shareID}/external-invitations/{invitationID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
39
- type PutUpdateExternalInvitationResponse = drivePaths['/drive/v2/shares/{shareID}/external-invitations/{invitationID}']['put']['responses']['200']['content']['application/json'];
40
-
41
- type PostUpdateMemberRequest = Extract<drivePaths['/drive/v2/shares/{shareID}/members/{memberID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
42
- type PostUpdateMemberResponse = drivePaths['/drive/v2/shares/{shareID}/members/{memberID}']['put']['responses']['200']['content']['application/json'];
43
-
44
- type GetShareUrlsResponse = drivePaths['/drive/shares/{shareID}/urls']['get']['responses']['200']['content']['application/json'];
45
-
46
- type PostShareUrlRequest = Extract<drivePaths['/drive/shares/{shareID}/urls']['post']['requestBody'], { 'content': object }>['content']['application/json'];
47
- type PostShareUrlResponse = drivePaths['/drive/shares/{shareID}/urls']['post']['responses']['200']['content']['application/json'];
48
-
49
- type PutShareUrlRequest = Extract<drivePaths['/drive/shares/{shareID}/urls/{urlID}']['put']['requestBody'], { 'content': object }>['content']['application/json'];
50
- type PutShareUrlResponse = drivePaths['/drive/shares/{shareID}/urls/{urlID}']['put']['responses']['200']['content']['application/json'];
1
+ import { SRPVerifier } from '../../crypto';
2
+ import { NodeType, MemberRole, NonProtonInvitationState, Logger } from '../../interface';
3
+ import {
4
+ DriveAPIService,
5
+ drivePaths,
6
+ nodeTypeNumberToNodeType,
7
+ permissionsToDirectMemberRole,
8
+ memberRoleToPermission,
9
+ } from '../apiService';
10
+ import {
11
+ makeNodeUid,
12
+ splitNodeUid,
13
+ makeInvitationUid,
14
+ splitInvitationUid,
15
+ makeMemberUid,
16
+ splitMemberUid,
17
+ makePublicLinkUid,
18
+ splitPublicLinkUid,
19
+ } from '../uids';
20
+ import {
21
+ EncryptedInvitationRequest,
22
+ EncryptedInvitation,
23
+ EncryptedInvitationWithNode,
24
+ EncryptedExternalInvitation,
25
+ EncryptedMember,
26
+ EncryptedBookmark,
27
+ EncryptedExternalInvitationRequest,
28
+ EncryptedPublicLink,
29
+ EncryptedPublicLinkCrypto,
30
+ } from './interface';
31
+
32
+ type GetSharedNodesResponse =
33
+ drivePaths['/drive/v2/volumes/{volumeID}/shares']['get']['responses']['200']['content']['application/json'];
34
+
35
+ type GetSharedWithMeNodesResponse =
36
+ drivePaths['/drive/v2/sharedwithme']['get']['responses']['200']['content']['application/json'];
37
+
38
+ type GetInvitationsResponse =
39
+ drivePaths['/drive/v2/shares/invitations']['get']['responses']['200']['content']['application/json'];
40
+
41
+ type GetInvitationDetailsResponse =
42
+ drivePaths['/drive/v2/shares/invitations/{invitationID}']['get']['responses']['200']['content']['application/json'];
43
+
44
+ type PostAcceptInvitationRequest = Extract<
45
+ drivePaths['/drive/v2/shares/invitations/{invitationID}/accept']['post']['requestBody'],
46
+ { content: object }
47
+ >['content']['application/json'];
48
+ type PostAcceptInvitationResponse =
49
+ drivePaths['/drive/v2/shares/invitations/{invitationID}/accept']['post']['responses']['200']['content']['application/json'];
50
+
51
+ type GetSharedBookmarksResponse =
52
+ drivePaths['/drive/v2/shared-bookmarks']['get']['responses']['200']['content']['application/json'];
53
+
54
+ type GetShareInvitations =
55
+ drivePaths['/drive/v2/shares/{shareID}/invitations']['get']['responses']['200']['content']['application/json'];
56
+
57
+ type GetShareExternalInvitations =
58
+ drivePaths['/drive/v2/shares/{shareID}/external-invitations']['get']['responses']['200']['content']['application/json'];
59
+
60
+ type GetShareMembers =
61
+ drivePaths['/drive/v2/shares/{shareID}/members']['get']['responses']['200']['content']['application/json'];
62
+
63
+ type PostCreateShareRequest = Extract<
64
+ drivePaths['/drive/volumes/{volumeID}/shares']['post']['requestBody'],
65
+ { content: object }
66
+ >['content']['application/json'];
67
+ type PostCreateShareResponse =
68
+ drivePaths['/drive/volumes/{volumeID}/shares']['post']['responses']['200']['content']['application/json'];
69
+
70
+ type PostInviteProtonUserRequest = Extract<
71
+ drivePaths['/drive/v2/shares/{shareID}/invitations']['post']['requestBody'],
72
+ { content: object }
73
+ >['content']['application/json'];
74
+ type PostInviteProtonUserResponse =
75
+ drivePaths['/drive/v2/shares/{shareID}/invitations']['post']['responses']['200']['content']['application/json'];
76
+
77
+ type PutUpdateInvitationRequest = Extract<
78
+ drivePaths['/drive/v2/shares/{shareID}/invitations/{invitationID}']['put']['requestBody'],
79
+ { content: object }
80
+ >['content']['application/json'];
81
+ type PutUpdateInvitationResponse =
82
+ drivePaths['/drive/v2/shares/{shareID}/invitations/{invitationID}']['put']['responses']['200']['content']['application/json'];
83
+
84
+ type PostInviteExternalUserRequest = Extract<
85
+ drivePaths['/drive/v2/shares/{shareID}/external-invitations']['post']['requestBody'],
86
+ { content: object }
87
+ >['content']['application/json'];
88
+ type PostInviteExternalUserResponse =
89
+ drivePaths['/drive/v2/shares/{shareID}/external-invitations']['post']['responses']['200']['content']['application/json'];
90
+
91
+ type PutUpdateExternalInvitationRequest = Extract<
92
+ drivePaths['/drive/v2/shares/{shareID}/external-invitations/{invitationID}']['put']['requestBody'],
93
+ { content: object }
94
+ >['content']['application/json'];
95
+ type PutUpdateExternalInvitationResponse =
96
+ drivePaths['/drive/v2/shares/{shareID}/external-invitations/{invitationID}']['put']['responses']['200']['content']['application/json'];
97
+
98
+ type PostUpdateMemberRequest = Extract<
99
+ drivePaths['/drive/v2/shares/{shareID}/members/{memberID}']['put']['requestBody'],
100
+ { content: object }
101
+ >['content']['application/json'];
102
+ type PostUpdateMemberResponse =
103
+ drivePaths['/drive/v2/shares/{shareID}/members/{memberID}']['put']['responses']['200']['content']['application/json'];
104
+
105
+ type GetShareUrlsResponse =
106
+ drivePaths['/drive/shares/{shareID}/urls']['get']['responses']['200']['content']['application/json'];
107
+
108
+ type PostShareUrlRequest = Extract<
109
+ drivePaths['/drive/shares/{shareID}/urls']['post']['requestBody'],
110
+ { content: object }
111
+ >['content']['application/json'];
112
+ type PostShareUrlResponse =
113
+ drivePaths['/drive/shares/{shareID}/urls']['post']['responses']['200']['content']['application/json'];
114
+
115
+ type PutShareUrlRequest = Extract<
116
+ drivePaths['/drive/shares/{shareID}/urls/{urlID}']['put']['requestBody'],
117
+ { content: object }
118
+ >['content']['application/json'];
119
+ type PutShareUrlResponse =
120
+ drivePaths['/drive/shares/{shareID}/urls/{urlID}']['put']['responses']['200']['content']['application/json'];
51
121
 
52
122
  // We do not support photos and albums yet.
53
123
  const SUPPORTED_SHARE_TARGET_TYPES = [
@@ -64,15 +134,21 @@ const SUPPORTED_SHARE_TARGET_TYPES = [
64
134
  * and vice versa. It should not contain any business logic.
65
135
  */
66
136
  export class SharingAPIService {
67
- constructor(private logger: Logger, private apiService: DriveAPIService) {
137
+ constructor(
138
+ private logger: Logger,
139
+ private apiService: DriveAPIService,
140
+ ) {
68
141
  this.logger = logger;
69
142
  this.apiService = apiService;
70
143
  }
71
144
 
72
145
  async *iterateSharedNodeUids(volumeId: string, signal?: AbortSignal): AsyncGenerator<string> {
73
- let anchor = "";
146
+ let anchor = '';
74
147
  while (true) {
75
- const response = await this.apiService.get<GetSharedNodesResponse>(`drive/v2/volumes/${volumeId}/shares?${anchor ? `AnchorID=${anchor}` : ''}`, signal);
148
+ const response = await this.apiService.get<GetSharedNodesResponse>(
149
+ `drive/v2/volumes/${volumeId}/shares?${anchor ? `AnchorID=${anchor}` : ''}`,
150
+ signal,
151
+ );
76
152
  for (const link of response.Links) {
77
153
  yield makeNodeUid(volumeId, link.LinkID);
78
154
  }
@@ -85,9 +161,12 @@ export class SharingAPIService {
85
161
  }
86
162
 
87
163
  async *iterateSharedWithMeNodeUids(signal?: AbortSignal): AsyncGenerator<string> {
88
- let anchor = "";
164
+ let anchor = '';
89
165
  while (true) {
90
- const response = await this.apiService.get<GetSharedWithMeNodesResponse>(`drive/v2/sharedwithme?${anchor ? `AnchorID=${anchor}` : ''}`, signal);
166
+ const response = await this.apiService.get<GetSharedWithMeNodesResponse>(
167
+ `drive/v2/sharedwithme?${anchor ? `AnchorID=${anchor}` : ''}`,
168
+ signal,
169
+ );
91
170
  for (const link of response.Links) {
92
171
  const nodeUid = makeNodeUid(link.VolumeID, link.LinkID);
93
172
 
@@ -107,14 +186,19 @@ export class SharingAPIService {
107
186
  }
108
187
 
109
188
  async *iterateInvitationUids(signal?: AbortSignal): AsyncGenerator<string> {
110
- let anchor = "";
189
+ let anchor = '';
111
190
  while (true) {
112
- const response = await this.apiService.get<GetInvitationsResponse>(`drive/v2/shares/invitations?${anchor ? `AnchorID=${anchor}` : ''}`, signal);
191
+ const response = await this.apiService.get<GetInvitationsResponse>(
192
+ `drive/v2/shares/invitations?${anchor ? `AnchorID=${anchor}` : ''}`,
193
+ signal,
194
+ );
113
195
  for (const invitation of response.Invitations) {
114
196
  const invitationUid = makeInvitationUid(invitation.ShareID, invitation.InvitationID);
115
197
 
116
198
  if (!SUPPORTED_SHARE_TARGET_TYPES.includes(invitation.ShareTargetType)) {
117
- this.logger.warn(`Unsupported share target type ${invitation.ShareTargetType} for invitation ${invitationUid}`);
199
+ this.logger.warn(
200
+ `Unsupported share target type ${invitation.ShareTargetType} for invitation ${invitationUid}`,
201
+ );
118
202
  continue;
119
203
  }
120
204
 
@@ -130,7 +214,9 @@ export class SharingAPIService {
130
214
 
131
215
  async getInvitation(invitationUid: string): Promise<EncryptedInvitationWithNode> {
132
216
  const { invitationId } = splitInvitationUid(invitationUid);
133
- const response = await this.apiService.get<GetInvitationDetailsResponse>(`drive/v2/shares/invitations/${invitationId}`);
217
+ const response = await this.apiService.get<GetInvitationDetailsResponse>(
218
+ `drive/v2/shares/invitations/${invitationId}`,
219
+ );
134
220
  return {
135
221
  uid: invitationUid,
136
222
  addedByEmail: response.Invitation.InviterEmail,
@@ -145,21 +231,22 @@ export class SharingAPIService {
145
231
  creatorEmail: response.Share.CreatorEmail,
146
232
  },
147
233
  node: {
234
+ uid: makeNodeUid(response.Share.VolumeID, response.Link.LinkID),
148
235
  type: nodeTypeNumberToNodeType(this.logger, response.Link.Type),
149
236
  mediaType: response.Link.MIMEType || undefined,
150
237
  encryptedName: response.Link.Name,
151
238
  },
152
- }
239
+ };
153
240
  }
154
241
 
155
242
  async acceptInvitation(invitationUid: string, base64SessionKeySignature: string): Promise<void> {
156
243
  const { invitationId } = splitInvitationUid(invitationUid);
157
- await this.apiService.post<
158
- PostAcceptInvitationRequest,
159
- PostAcceptInvitationResponse
160
- >(`drive/v2/shares/invitations/${invitationId}/accept`, {
161
- SessionKeySignature: base64SessionKeySignature,
162
- });
244
+ await this.apiService.post<PostAcceptInvitationRequest, PostAcceptInvitationResponse>(
245
+ `drive/v2/shares/invitations/${invitationId}/accept`,
246
+ {
247
+ SessionKeySignature: base64SessionKeySignature,
248
+ },
249
+ );
163
250
  }
164
251
 
165
252
  async rejectInvitation(invitationUid: string): Promise<void> {
@@ -191,7 +278,7 @@ export class SharingAPIService {
191
278
  base64ContentKeyPacket: bookmark.Token.ContentKeyPacket || undefined,
192
279
  },
193
280
  },
194
- }
281
+ };
195
282
  }
196
283
  }
197
284
 
@@ -207,7 +294,9 @@ export class SharingAPIService {
207
294
  }
208
295
 
209
296
  async getShareExternalInvitations(shareId: string): Promise<EncryptedExternalInvitation[]> {
210
- const response = await this.apiService.get<GetShareExternalInvitations>(`drive/v2/shares/${shareId}/external-invitations`);
297
+ const response = await this.apiService.get<GetShareExternalInvitations>(
298
+ `drive/v2/shares/${shareId}/external-invitations`,
299
+ );
211
300
  return response.ExternalInvitations.map((invitation) => {
212
301
  return this.convertExternalInvitaiton(shareId, invitation);
213
302
  });
@@ -224,7 +313,7 @@ export class SharingAPIService {
224
313
  base64KeyPacketSignature: member.KeyPacketSignature,
225
314
  invitationTime: new Date(member.CreateTime * 1000),
226
315
  role: permissionsToDirectMemberRole(this.logger, member.Permissions),
227
- }
316
+ };
228
317
  });
229
318
  }
230
319
 
@@ -232,30 +321,29 @@ export class SharingAPIService {
232
321
  nodeUid: string,
233
322
  addressId: string,
234
323
  shareKey: {
235
- armoredKey: string,
236
- armoredPassphrase: string,
237
- armoredPassphraseSignature: string,
324
+ armoredKey: string;
325
+ armoredPassphrase: string;
326
+ armoredPassphraseSignature: string;
238
327
  },
239
328
  node: {
240
- base64PassphraseKeyPacket: string,
241
- base64NameKeyPacket: string,
329
+ base64PassphraseKeyPacket: string;
330
+ base64NameKeyPacket: string;
242
331
  },
243
332
  ): Promise<string> {
244
333
  const { volumeId, nodeId } = splitNodeUid(nodeUid);
245
- const response = await this.apiService.post<
246
- PostCreateShareRequest,
247
- PostCreateShareResponse
248
- >(`drive/volumes/${volumeId}/shares`, {
249
- RootLinkID: nodeId,
250
- AddressID: addressId,
251
- Name: 'New Share',
252
- ShareKey: shareKey.armoredKey,
253
- SharePassphrase: shareKey.armoredPassphrase,
254
- SharePassphraseSignature: shareKey.armoredPassphraseSignature,
255
- PassphraseKeyPacket: node.base64PassphraseKeyPacket,
256
- NameKeyPacket: node.base64NameKeyPacket,
257
-
258
- });
334
+ const response = await this.apiService.post<PostCreateShareRequest, PostCreateShareResponse>(
335
+ `drive/volumes/${volumeId}/shares`,
336
+ {
337
+ RootLinkID: nodeId,
338
+ AddressID: addressId,
339
+ Name: 'New Share',
340
+ ShareKey: shareKey.armoredKey,
341
+ SharePassphrase: shareKey.armoredPassphrase,
342
+ SharePassphraseSignature: shareKey.armoredPassphraseSignature,
343
+ PassphraseKeyPacket: node.base64PassphraseKeyPacket,
344
+ NameKeyPacket: node.base64NameKeyPacket,
345
+ },
346
+ );
259
347
  return response.Share.ID;
260
348
  }
261
349
 
@@ -266,39 +354,36 @@ export class SharingAPIService {
266
354
  async inviteProtonUser(
267
355
  shareId: string,
268
356
  invitation: EncryptedInvitationRequest,
269
- emailDetails: { message?: string, nodeName?: string } = {},
357
+ emailDetails: { message?: string; nodeName?: string } = {},
270
358
  ): Promise<EncryptedInvitation> {
271
- const response = await this.apiService.post<
272
- PostInviteProtonUserRequest,
273
- PostInviteProtonUserResponse
274
- >(`drive/v2/shares/${shareId}/invitations`, {
275
- Invitation: {
276
- InviterEmail: invitation.addedByEmail,
277
- InviteeEmail: invitation.inviteeEmail,
278
- Permissions: memberRoleToPermission(invitation.role),
279
- KeyPacket: invitation.base64KeyPacket,
280
- KeyPacketSignature: invitation.base64KeyPacketSignature,
281
- ExternalInvitationID: null,
282
- },
283
- EmailDetails: {
284
- Message: emailDetails.message,
285
- ItemName: emailDetails.nodeName,
359
+ const response = await this.apiService.post<PostInviteProtonUserRequest, PostInviteProtonUserResponse>(
360
+ `drive/v2/shares/${shareId}/invitations`,
361
+ {
362
+ Invitation: {
363
+ InviterEmail: invitation.addedByEmail,
364
+ InviteeEmail: invitation.inviteeEmail,
365
+ Permissions: memberRoleToPermission(invitation.role),
366
+ KeyPacket: invitation.base64KeyPacket,
367
+ KeyPacketSignature: invitation.base64KeyPacketSignature,
368
+ ExternalInvitationID: null,
369
+ },
370
+ EmailDetails: {
371
+ Message: emailDetails.message,
372
+ ItemName: emailDetails.nodeName,
373
+ },
286
374
  },
287
- });
375
+ );
288
376
  return this.convertInternalInvitation(shareId, response.Invitation);
289
377
  }
290
378
 
291
- async updateInvitation(
292
- invitationUid: string,
293
- invitation: { role: MemberRole },
294
- ): Promise<void> {
379
+ async updateInvitation(invitationUid: string, invitation: { role: MemberRole }): Promise<void> {
295
380
  const { shareId, invitationId } = splitInvitationUid(invitationUid);
296
- await this.apiService.put<
297
- PutUpdateInvitationRequest,
298
- PutUpdateInvitationResponse
299
- >(`drive/v2/shares/${shareId}/invitations/${invitationId}`, {
300
- Permissions: memberRoleToPermission(invitation.role),
301
- });
381
+ await this.apiService.put<PutUpdateInvitationRequest, PutUpdateInvitationResponse>(
382
+ `drive/v2/shares/${shareId}/invitations/${invitationId}`,
383
+ {
384
+ Permissions: memberRoleToPermission(invitation.role),
385
+ },
386
+ );
302
387
  }
303
388
 
304
389
  async resendInvitationEmail(invitationUid: string): Promise<void> {
@@ -314,37 +399,34 @@ export class SharingAPIService {
314
399
  async inviteExternalUser(
315
400
  shareId: string,
316
401
  invitation: EncryptedExternalInvitationRequest,
317
- emailDetails: { message?: string, nodeName?: string } = {},
402
+ emailDetails: { message?: string; nodeName?: string } = {},
318
403
  ): Promise<EncryptedExternalInvitation> {
319
- const response = await this.apiService.post<
320
- PostInviteExternalUserRequest,
321
- PostInviteExternalUserResponse
322
- >(`drive/v2/shares/${shareId}/external-invitations`, {
323
- ExternalInvitation: {
324
- InviterAddressID: invitation.inviterAddressId,
325
- InviteeEmail: invitation.inviteeEmail,
326
- Permissions: memberRoleToPermission(invitation.role),
327
- ExternalInvitationSignature: invitation.base64Signature,
328
- },
329
- EmailDetails: {
330
- Message: emailDetails.message,
331
- ItemName: emailDetails.nodeName,
404
+ const response = await this.apiService.post<PostInviteExternalUserRequest, PostInviteExternalUserResponse>(
405
+ `drive/v2/shares/${shareId}/external-invitations`,
406
+ {
407
+ ExternalInvitation: {
408
+ InviterAddressID: invitation.inviterAddressId,
409
+ InviteeEmail: invitation.inviteeEmail,
410
+ Permissions: memberRoleToPermission(invitation.role),
411
+ ExternalInvitationSignature: invitation.base64Signature,
412
+ },
413
+ EmailDetails: {
414
+ Message: emailDetails.message,
415
+ ItemName: emailDetails.nodeName,
416
+ },
332
417
  },
333
- });
418
+ );
334
419
  return this.convertExternalInvitaiton(shareId, response.ExternalInvitation);
335
420
  }
336
421
 
337
- async updateExternalInvitation(
338
- invitationUid: string,
339
- invitation: { role: MemberRole },
340
- ): Promise<void> {
422
+ async updateExternalInvitation(invitationUid: string, invitation: { role: MemberRole }): Promise<void> {
341
423
  const { shareId, invitationId } = splitInvitationUid(invitationUid);
342
- await this.apiService.put<
343
- PutUpdateExternalInvitationRequest,
344
- PutUpdateExternalInvitationResponse
345
- >(`drive/v2/shares/${shareId}/external-invitations/${invitationId}`, {
346
- Permissions: memberRoleToPermission(invitation.role),
347
- });
424
+ await this.apiService.put<PutUpdateExternalInvitationRequest, PutUpdateExternalInvitationResponse>(
425
+ `drive/v2/shares/${shareId}/external-invitations/${invitationId}`,
426
+ {
427
+ Permissions: memberRoleToPermission(invitation.role),
428
+ },
429
+ );
348
430
  }
349
431
 
350
432
  async resendExternalInvitationEmail(invitationUid: string): Promise<void> {
@@ -359,12 +441,12 @@ export class SharingAPIService {
359
441
 
360
442
  async updateMember(memberUid: string, member: { role: MemberRole }): Promise<void> {
361
443
  const { shareId, memberId } = splitMemberUid(memberUid);
362
- await this.apiService.put<
363
- PostUpdateMemberRequest,
364
- PostUpdateMemberResponse
365
- >(`drive/v2/shares/${shareId}/members/${memberId}`, {
366
- Permissions: memberRoleToPermission(member.role),
367
- });
444
+ await this.apiService.put<PostUpdateMemberRequest, PostUpdateMemberResponse>(
445
+ `drive/v2/shares/${shareId}/members/${memberId}`,
446
+ {
447
+ Permissions: memberRoleToPermission(member.role),
448
+ },
449
+ );
368
450
  }
369
451
 
370
452
  async removeMember(memberUid: string): Promise<void> {
@@ -399,16 +481,19 @@ export class SharingAPIService {
399
481
  };
400
482
  }
401
483
 
402
- async createPublicLink(shareId: string, publicLink: {
403
- creatorEmail: string,
404
- role: MemberRole,
405
- includesCustomPassword: boolean,
406
- expirationTime?: number,
407
- crypto: EncryptedPublicLinkCrypto,
408
- srp: SRPVerifier,
409
- }): Promise<{
410
- uid: string,
411
- publicUrl: string,
484
+ async createPublicLink(
485
+ shareId: string,
486
+ publicLink: {
487
+ creatorEmail: string;
488
+ role: MemberRole;
489
+ includesCustomPassword: boolean;
490
+ expirationTime?: number;
491
+ crypto: EncryptedPublicLinkCrypto;
492
+ srp: SRPVerifier;
493
+ },
494
+ ): Promise<{
495
+ uid: string;
496
+ publicUrl: string;
412
497
  }> {
413
498
  if (publicLink.role === MemberRole.Admin) {
414
499
  throw new Error('Cannot set admin role for public link.');
@@ -428,13 +513,16 @@ export class SharingAPIService {
428
513
  };
429
514
  }
430
515
 
431
- async updatePublicLink(publicLinkUid: string, publicLink: {
432
- role: MemberRole,
433
- includesCustomPassword: boolean,
434
- expirationTime?: number,
435
- crypto: EncryptedPublicLinkCrypto,
436
- srp: SRPVerifier,
437
- }): Promise<void> {
516
+ async updatePublicLink(
517
+ publicLinkUid: string,
518
+ publicLink: {
519
+ role: MemberRole;
520
+ includesCustomPassword: boolean;
521
+ expirationTime?: number;
522
+ crypto: EncryptedPublicLinkCrypto;
523
+ srp: SRPVerifier;
524
+ },
525
+ ): Promise<void> {
438
526
  if (publicLink.role === MemberRole.Admin) {
439
527
  throw new Error('Cannot set admin role for public link.');
440
528
  }
@@ -449,12 +537,24 @@ export class SharingAPIService {
449
537
  }
450
538
 
451
539
  private generatePublicLinkRequestPayload(publicLink: {
452
- role: MemberRole,
453
- includesCustomPassword: boolean,
454
- expirationTime?: number,
455
- crypto: EncryptedPublicLinkCrypto,
456
- srp: SRPVerifier,
457
- }): Pick<PostShareUrlRequest, 'Permissions' | 'Flags' | 'ExpirationTime' | 'SharePasswordSalt' | 'SharePassphraseKeyPacket' | 'Password' | 'UrlPasswordSalt' | 'SRPVerifier' | 'SRPModulusID' | 'MaxAccesses'> {
540
+ role: MemberRole;
541
+ includesCustomPassword: boolean;
542
+ expirationTime?: number;
543
+ crypto: EncryptedPublicLinkCrypto;
544
+ srp: SRPVerifier;
545
+ }): Pick<
546
+ PostShareUrlRequest,
547
+ | 'Permissions'
548
+ | 'Flags'
549
+ | 'ExpirationTime'
550
+ | 'SharePasswordSalt'
551
+ | 'SharePassphraseKeyPacket'
552
+ | 'Password'
553
+ | 'UrlPasswordSalt'
554
+ | 'SRPVerifier'
555
+ | 'SRPModulusID'
556
+ | 'MaxAccesses'
557
+ > {
458
558
  return {
459
559
  Permissions: memberRoleToPermission(publicLink.role) as 4 | 6,
460
560
  Flags: publicLink.includesCustomPassword
@@ -471,7 +571,7 @@ export class SharingAPIService {
471
571
  SRPModulusID: publicLink.srp.modulusId,
472
572
 
473
573
  MaxAccesses: 0, // We don't support setting limit.
474
- }
574
+ };
475
575
  }
476
576
 
477
577
  async removePublicLink(publicLinkUid: string): Promise<void> {
@@ -479,7 +579,10 @@ export class SharingAPIService {
479
579
  await this.apiService.delete(`drive/shares/${shareId}/urls/${publicLinkId}`);
480
580
  }
481
581
 
482
- private convertInternalInvitation(shareId: string, invitation: GetShareInvitations['Invitations'][0]): EncryptedInvitation {
582
+ private convertInternalInvitation(
583
+ shareId: string,
584
+ invitation: GetShareInvitations['Invitations'][0],
585
+ ): EncryptedInvitation {
483
586
  return {
484
587
  uid: makeInvitationUid(shareId, invitation.InvitationID),
485
588
  addedByEmail: invitation.InviterEmail,
@@ -488,11 +591,15 @@ export class SharingAPIService {
488
591
  role: permissionsToDirectMemberRole(this.logger, invitation.Permissions),
489
592
  base64KeyPacket: invitation.KeyPacket,
490
593
  base64KeyPacketSignature: invitation.KeyPacketSignature,
491
- }
594
+ };
492
595
  }
493
596
 
494
- private convertExternalInvitaiton(shareId: string, invitation: GetShareExternalInvitations['ExternalInvitations'][0]): EncryptedExternalInvitation {
495
- const state = invitation.State === 1 ? NonProtonInvitationState.Pending : NonProtonInvitationState.UserRegistered;
597
+ private convertExternalInvitaiton(
598
+ shareId: string,
599
+ invitation: GetShareExternalInvitations['ExternalInvitations'][0],
600
+ ): EncryptedExternalInvitation {
601
+ const state =
602
+ invitation.State === 1 ? NonProtonInvitationState.Pending : NonProtonInvitationState.UserRegistered;
496
603
  return {
497
604
  uid: makeInvitationUid(shareId, invitation.ExternalInvitationID),
498
605
  addedByEmail: invitation.InviterEmail,
@@ -501,6 +608,6 @@ export class SharingAPIService {
501
608
  role: permissionsToDirectMemberRole(this.logger, invitation.Permissions),
502
609
  base64Signature: invitation.ExternalInvitationSignature,
503
610
  state,
504
- }
611
+ };
505
612
  }
506
613
  }