@protontech/drive-sdk 0.0.10

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 (594) hide show
  1. package/README.md +17 -0
  2. package/dist/cache/index.d.ts +2 -0
  3. package/dist/cache/index.js +6 -0
  4. package/dist/cache/index.js.map +1 -0
  5. package/dist/cache/interface.d.ts +105 -0
  6. package/dist/cache/interface.js +3 -0
  7. package/dist/cache/interface.js.map +1 -0
  8. package/dist/cache/memoryCache.d.ts +18 -0
  9. package/dist/cache/memoryCache.js +78 -0
  10. package/dist/cache/memoryCache.js.map +1 -0
  11. package/dist/cache/memoryCache.test.d.ts +1 -0
  12. package/dist/cache/memoryCache.test.js +121 -0
  13. package/dist/cache/memoryCache.test.js.map +1 -0
  14. package/dist/config.d.ts +2 -0
  15. package/dist/config.js +11 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/crypto/driveCrypto.d.ts +209 -0
  18. package/dist/crypto/driveCrypto.js +364 -0
  19. package/dist/crypto/driveCrypto.js.map +1 -0
  20. package/dist/crypto/driveCrypto.test.d.ts +1 -0
  21. package/dist/crypto/driveCrypto.test.js +42 -0
  22. package/dist/crypto/driveCrypto.test.js.map +1 -0
  23. package/dist/crypto/hmac.d.ts +22 -0
  24. package/dist/crypto/hmac.js +44 -0
  25. package/dist/crypto/hmac.js.map +1 -0
  26. package/dist/crypto/index.d.ts +6 -0
  27. package/dist/crypto/index.js +13 -0
  28. package/dist/crypto/index.js.map +1 -0
  29. package/dist/crypto/interface.d.ts +125 -0
  30. package/dist/crypto/interface.js +10 -0
  31. package/dist/crypto/interface.js.map +1 -0
  32. package/dist/crypto/openPGPCrypto.d.ts +145 -0
  33. package/dist/crypto/openPGPCrypto.js +250 -0
  34. package/dist/crypto/openPGPCrypto.js.map +1 -0
  35. package/dist/crypto/utils.d.ts +2 -0
  36. package/dist/crypto/utils.js +35 -0
  37. package/dist/crypto/utils.js.map +1 -0
  38. package/dist/errors.d.ts +138 -0
  39. package/dist/errors.js +163 -0
  40. package/dist/errors.js.map +1 -0
  41. package/dist/index.d.ts +24 -0
  42. package/dist/index.js +48 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/interface/account.d.ts +36 -0
  45. package/dist/interface/account.js +3 -0
  46. package/dist/interface/account.js.map +1 -0
  47. package/dist/interface/author.d.ts +26 -0
  48. package/dist/interface/author.js +3 -0
  49. package/dist/interface/author.js.map +1 -0
  50. package/dist/interface/devices.d.ts +18 -0
  51. package/dist/interface/devices.js +10 -0
  52. package/dist/interface/devices.js.map +1 -0
  53. package/dist/interface/download.d.ts +29 -0
  54. package/dist/interface/download.js +3 -0
  55. package/dist/interface/download.js.map +1 -0
  56. package/dist/interface/events.d.ts +26 -0
  57. package/dist/interface/events.js +11 -0
  58. package/dist/interface/events.js.map +1 -0
  59. package/dist/interface/httpClient.d.ts +38 -0
  60. package/dist/interface/httpClient.js +3 -0
  61. package/dist/interface/httpClient.js.map +1 -0
  62. package/dist/interface/index.d.ts +43 -0
  63. package/dist/interface/index.js +22 -0
  64. package/dist/interface/index.js.map +1 -0
  65. package/dist/interface/nodes.d.ts +161 -0
  66. package/dist/interface/nodes.js +21 -0
  67. package/dist/interface/nodes.js.map +1 -0
  68. package/dist/interface/result.d.ts +9 -0
  69. package/dist/interface/result.js +11 -0
  70. package/dist/interface/result.js.map +1 -0
  71. package/dist/interface/sharing.d.ts +73 -0
  72. package/dist/interface/sharing.js +9 -0
  73. package/dist/interface/sharing.js.map +1 -0
  74. package/dist/interface/telemetry.d.ts +61 -0
  75. package/dist/interface/telemetry.js +18 -0
  76. package/dist/interface/telemetry.js.map +1 -0
  77. package/dist/interface/thumbnail.d.ts +17 -0
  78. package/dist/interface/thumbnail.js +9 -0
  79. package/dist/interface/thumbnail.js.map +1 -0
  80. package/dist/interface/upload.d.ts +16 -0
  81. package/dist/interface/upload.js +3 -0
  82. package/dist/interface/upload.js.map +1 -0
  83. package/dist/internal/apiService/apiService.d.ts +51 -0
  84. package/dist/internal/apiService/apiService.js +305 -0
  85. package/dist/internal/apiService/apiService.js.map +1 -0
  86. package/dist/internal/apiService/apiService.test.d.ts +1 -0
  87. package/dist/internal/apiService/apiService.test.js +237 -0
  88. package/dist/internal/apiService/apiService.test.js.map +1 -0
  89. package/dist/internal/apiService/coreTypes.d.ts +24438 -0
  90. package/dist/internal/apiService/coreTypes.js +7 -0
  91. package/dist/internal/apiService/coreTypes.js.map +1 -0
  92. package/dist/internal/apiService/driveTypes.d.ts +11840 -0
  93. package/dist/internal/apiService/driveTypes.js +7 -0
  94. package/dist/internal/apiService/driveTypes.js.map +1 -0
  95. package/dist/internal/apiService/errorCodes.d.ts +30 -0
  96. package/dist/internal/apiService/errorCodes.js +11 -0
  97. package/dist/internal/apiService/errorCodes.js.map +1 -0
  98. package/dist/internal/apiService/errors.d.ts +19 -0
  99. package/dist/internal/apiService/errors.js +76 -0
  100. package/dist/internal/apiService/errors.js.map +1 -0
  101. package/dist/internal/apiService/errors.test.d.ts +1 -0
  102. package/dist/internal/apiService/errors.test.js +69 -0
  103. package/dist/internal/apiService/errors.test.js.map +1 -0
  104. package/dist/internal/apiService/index.d.ts +7 -0
  105. package/dist/internal/apiService/index.js +30 -0
  106. package/dist/internal/apiService/index.js.map +1 -0
  107. package/dist/internal/apiService/observerStream.d.ts +3 -0
  108. package/dist/internal/apiService/observerStream.js +15 -0
  109. package/dist/internal/apiService/observerStream.js.map +1 -0
  110. package/dist/internal/apiService/transformers.d.ts +4 -0
  111. package/dist/internal/apiService/transformers.js +48 -0
  112. package/dist/internal/apiService/transformers.js.map +1 -0
  113. package/dist/internal/batchLoading.d.ts +34 -0
  114. package/dist/internal/batchLoading.js +68 -0
  115. package/dist/internal/batchLoading.js.map +1 -0
  116. package/dist/internal/batchLoading.test.d.ts +1 -0
  117. package/dist/internal/batchLoading.test.js +50 -0
  118. package/dist/internal/batchLoading.test.js.map +1 -0
  119. package/dist/internal/devices/apiService.d.ts +38 -0
  120. package/dist/internal/devices/apiService.js +105 -0
  121. package/dist/internal/devices/apiService.js.map +1 -0
  122. package/dist/internal/devices/cryptoService.d.ts +30 -0
  123. package/dist/internal/devices/cryptoService.js +47 -0
  124. package/dist/internal/devices/cryptoService.js.map +1 -0
  125. package/dist/internal/devices/index.d.ts +15 -0
  126. package/dist/internal/devices/index.js +22 -0
  127. package/dist/internal/devices/index.js.map +1 -0
  128. package/dist/internal/devices/interface.d.ts +31 -0
  129. package/dist/internal/devices/interface.js +3 -0
  130. package/dist/internal/devices/interface.js.map +1 -0
  131. package/dist/internal/devices/manager.d.ts +18 -0
  132. package/dist/internal/devices/manager.js +103 -0
  133. package/dist/internal/devices/manager.js.map +1 -0
  134. package/dist/internal/devices/manager.test.d.ts +1 -0
  135. package/dist/internal/devices/manager.test.js +100 -0
  136. package/dist/internal/devices/manager.test.js.map +1 -0
  137. package/dist/internal/download/apiService.d.ts +27 -0
  138. package/dist/internal/download/apiService.js +110 -0
  139. package/dist/internal/download/apiService.js.map +1 -0
  140. package/dist/internal/download/controller.d.ts +8 -0
  141. package/dist/internal/download/controller.js +22 -0
  142. package/dist/internal/download/controller.js.map +1 -0
  143. package/dist/internal/download/cryptoService.d.ts +17 -0
  144. package/dist/internal/download/cryptoService.js +82 -0
  145. package/dist/internal/download/cryptoService.js.map +1 -0
  146. package/dist/internal/download/fileDownloader.d.ts +33 -0
  147. package/dist/internal/download/fileDownloader.js +226 -0
  148. package/dist/internal/download/fileDownloader.js.map +1 -0
  149. package/dist/internal/download/fileDownloader.test.d.ts +1 -0
  150. package/dist/internal/download/fileDownloader.test.js +324 -0
  151. package/dist/internal/download/fileDownloader.test.js.map +1 -0
  152. package/dist/internal/download/index.d.ts +10 -0
  153. package/dist/internal/download/index.js +82 -0
  154. package/dist/internal/download/index.js.map +1 -0
  155. package/dist/internal/download/interface.d.ts +35 -0
  156. package/dist/internal/download/interface.js +3 -0
  157. package/dist/internal/download/interface.js.map +1 -0
  158. package/dist/internal/download/queue.d.ts +5 -0
  159. package/dist/internal/download/queue.js +31 -0
  160. package/dist/internal/download/queue.js.map +1 -0
  161. package/dist/internal/download/telemetry.d.ts +14 -0
  162. package/dist/internal/download/telemetry.js +106 -0
  163. package/dist/internal/download/telemetry.js.map +1 -0
  164. package/dist/internal/download/telemetry.test.d.ts +1 -0
  165. package/dist/internal/download/telemetry.test.js +111 -0
  166. package/dist/internal/download/telemetry.test.js.map +1 -0
  167. package/dist/internal/download/thumbnailDownloader.d.ts +19 -0
  168. package/dist/internal/download/thumbnailDownloader.js +198 -0
  169. package/dist/internal/download/thumbnailDownloader.js.map +1 -0
  170. package/dist/internal/download/thumbnailDownloader.test.d.ts +1 -0
  171. package/dist/internal/download/thumbnailDownloader.test.js +179 -0
  172. package/dist/internal/download/thumbnailDownloader.test.js.map +1 -0
  173. package/dist/internal/errors.d.ts +6 -0
  174. package/dist/internal/errors.js +28 -0
  175. package/dist/internal/errors.js.map +1 -0
  176. package/dist/internal/errors.test.d.ts +1 -0
  177. package/dist/internal/errors.test.js +22 -0
  178. package/dist/internal/errors.test.js.map +1 -0
  179. package/dist/internal/events/apiService.d.ts +18 -0
  180. package/dist/internal/events/apiService.js +81 -0
  181. package/dist/internal/events/apiService.js.map +1 -0
  182. package/dist/internal/events/cache.d.ts +28 -0
  183. package/dist/internal/events/cache.js +67 -0
  184. package/dist/internal/events/cache.js.map +1 -0
  185. package/dist/internal/events/cache.test.d.ts +1 -0
  186. package/dist/internal/events/cache.test.js +43 -0
  187. package/dist/internal/events/cache.test.js.map +1 -0
  188. package/dist/internal/events/coreEventManager.d.ts +25 -0
  189. package/dist/internal/events/coreEventManager.js +63 -0
  190. package/dist/internal/events/coreEventManager.js.map +1 -0
  191. package/dist/internal/events/eventManager.d.ts +62 -0
  192. package/dist/internal/events/eventManager.js +159 -0
  193. package/dist/internal/events/eventManager.js.map +1 -0
  194. package/dist/internal/events/eventManager.test.d.ts +1 -0
  195. package/dist/internal/events/eventManager.test.js +120 -0
  196. package/dist/internal/events/eventManager.test.js.map +1 -0
  197. package/dist/internal/events/index.d.ts +50 -0
  198. package/dist/internal/events/index.js +117 -0
  199. package/dist/internal/events/index.js.map +1 -0
  200. package/dist/internal/events/interface.d.ts +47 -0
  201. package/dist/internal/events/interface.js +12 -0
  202. package/dist/internal/events/interface.js.map +1 -0
  203. package/dist/internal/events/volumeEventManager.d.ts +27 -0
  204. package/dist/internal/events/volumeEventManager.js +69 -0
  205. package/dist/internal/events/volumeEventManager.js.map +1 -0
  206. package/dist/internal/nodes/apiService.d.ts +54 -0
  207. package/dist/internal/nodes/apiService.js +308 -0
  208. package/dist/internal/nodes/apiService.js.map +1 -0
  209. package/dist/internal/nodes/apiService.test.d.ts +1 -0
  210. package/dist/internal/nodes/apiService.test.js +344 -0
  211. package/dist/internal/nodes/apiService.test.js.map +1 -0
  212. package/dist/internal/nodes/cache.d.ts +57 -0
  213. package/dist/internal/nodes/cache.js +226 -0
  214. package/dist/internal/nodes/cache.js.map +1 -0
  215. package/dist/internal/nodes/cache.test.d.ts +1 -0
  216. package/dist/internal/nodes/cache.test.js +160 -0
  217. package/dist/internal/nodes/cache.test.js.map +1 -0
  218. package/dist/internal/nodes/cryptoCache.d.ts +16 -0
  219. package/dist/internal/nodes/cryptoCache.js +50 -0
  220. package/dist/internal/nodes/cryptoCache.js.map +1 -0
  221. package/dist/internal/nodes/cryptoCache.test.d.ts +1 -0
  222. package/dist/internal/nodes/cryptoCache.test.js +79 -0
  223. package/dist/internal/nodes/cryptoCache.test.js.map +1 -0
  224. package/dist/internal/nodes/cryptoService.d.ts +75 -0
  225. package/dist/internal/nodes/cryptoService.js +409 -0
  226. package/dist/internal/nodes/cryptoService.js.map +1 -0
  227. package/dist/internal/nodes/cryptoService.test.d.ts +1 -0
  228. package/dist/internal/nodes/cryptoService.test.js +698 -0
  229. package/dist/internal/nodes/cryptoService.test.js.map +1 -0
  230. package/dist/internal/nodes/events.d.ts +91 -0
  231. package/dist/internal/nodes/events.js +243 -0
  232. package/dist/internal/nodes/events.js.map +1 -0
  233. package/dist/internal/nodes/events.test.d.ts +1 -0
  234. package/dist/internal/nodes/events.test.js +318 -0
  235. package/dist/internal/nodes/events.test.js.map +1 -0
  236. package/dist/internal/nodes/extendedAttributes.d.ts +23 -0
  237. package/dist/internal/nodes/extendedAttributes.js +117 -0
  238. package/dist/internal/nodes/extendedAttributes.js.map +1 -0
  239. package/dist/internal/nodes/extendedAttributes.test.d.ts +1 -0
  240. package/dist/internal/nodes/extendedAttributes.test.js +176 -0
  241. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -0
  242. package/dist/internal/nodes/index.d.ts +26 -0
  243. package/dist/internal/nodes/index.js +40 -0
  244. package/dist/internal/nodes/index.js.map +1 -0
  245. package/dist/internal/nodes/index.test.d.ts +1 -0
  246. package/dist/internal/nodes/index.test.js +112 -0
  247. package/dist/internal/nodes/index.test.js.map +1 -0
  248. package/dist/internal/nodes/interface.d.ts +135 -0
  249. package/dist/internal/nodes/interface.js +3 -0
  250. package/dist/internal/nodes/interface.js.map +1 -0
  251. package/dist/internal/nodes/mediaTypes.d.ts +2 -0
  252. package/dist/internal/nodes/mediaTypes.js +13 -0
  253. package/dist/internal/nodes/mediaTypes.js.map +1 -0
  254. package/dist/internal/nodes/nodesAccess.d.ts +49 -0
  255. package/dist/internal/nodes/nodesAccess.js +332 -0
  256. package/dist/internal/nodes/nodesAccess.js.map +1 -0
  257. package/dist/internal/nodes/nodesAccess.test.d.ts +1 -0
  258. package/dist/internal/nodes/nodesAccess.test.js +487 -0
  259. package/dist/internal/nodes/nodesAccess.test.js.map +1 -0
  260. package/dist/internal/nodes/nodesManagement.d.ts +33 -0
  261. package/dist/internal/nodes/nodesManagement.js +222 -0
  262. package/dist/internal/nodes/nodesManagement.js.map +1 -0
  263. package/dist/internal/nodes/nodesManagement.test.d.ts +1 -0
  264. package/dist/internal/nodes/nodesManagement.test.js +178 -0
  265. package/dist/internal/nodes/nodesManagement.test.js.map +1 -0
  266. package/dist/internal/nodes/nodesRevisions.d.ts +18 -0
  267. package/dist/internal/nodes/nodesRevisions.js +55 -0
  268. package/dist/internal/nodes/nodesRevisions.js.map +1 -0
  269. package/dist/internal/nodes/validations.d.ts +4 -0
  270. package/dist/internal/nodes/validations.js +21 -0
  271. package/dist/internal/nodes/validations.js.map +1 -0
  272. package/dist/internal/photos/albums.d.ts +13 -0
  273. package/dist/internal/photos/albums.js +30 -0
  274. package/dist/internal/photos/albums.js.map +1 -0
  275. package/dist/internal/photos/apiService.d.ts +8 -0
  276. package/dist/internal/photos/apiService.js +18 -0
  277. package/dist/internal/photos/apiService.js.map +1 -0
  278. package/dist/internal/photos/cache.d.ts +6 -0
  279. package/dist/internal/photos/cache.js +15 -0
  280. package/dist/internal/photos/cache.js.map +1 -0
  281. package/dist/internal/photos/index.d.ts +9 -0
  282. package/dist/internal/photos/index.js +18 -0
  283. package/dist/internal/photos/index.js.map +1 -0
  284. package/dist/internal/photos/interface.d.ts +6 -0
  285. package/dist/internal/photos/interface.js +3 -0
  286. package/dist/internal/photos/interface.js.map +1 -0
  287. package/dist/internal/photos/photosTimeline.d.ts +10 -0
  288. package/dist/internal/photos/photosTimeline.js +20 -0
  289. package/dist/internal/photos/photosTimeline.js.map +1 -0
  290. package/dist/internal/sdkEvents.d.ts +12 -0
  291. package/dist/internal/sdkEvents.js +44 -0
  292. package/dist/internal/sdkEvents.js.map +1 -0
  293. package/dist/internal/sdkEvents.test.d.ts +1 -0
  294. package/dist/internal/sdkEvents.test.js +45 -0
  295. package/dist/internal/sdkEvents.test.js.map +1 -0
  296. package/dist/internal/shares/apiService.d.ts +51 -0
  297. package/dist/internal/shares/apiService.js +128 -0
  298. package/dist/internal/shares/apiService.js.map +1 -0
  299. package/dist/internal/shares/cache.d.ts +15 -0
  300. package/dist/internal/shares/cache.js +63 -0
  301. package/dist/internal/shares/cache.js.map +1 -0
  302. package/dist/internal/shares/cache.test.d.ts +1 -0
  303. package/dist/internal/shares/cache.test.js +54 -0
  304. package/dist/internal/shares/cache.test.js.map +1 -0
  305. package/dist/internal/shares/cryptoCache.d.ts +20 -0
  306. package/dist/internal/shares/cryptoCache.js +35 -0
  307. package/dist/internal/shares/cryptoCache.js.map +1 -0
  308. package/dist/internal/shares/cryptoCache.test.d.ts +1 -0
  309. package/dist/internal/shares/cryptoCache.test.js +58 -0
  310. package/dist/internal/shares/cryptoCache.test.js.map +1 -0
  311. package/dist/internal/shares/cryptoService.d.ts +42 -0
  312. package/dist/internal/shares/cryptoService.js +126 -0
  313. package/dist/internal/shares/cryptoService.js.map +1 -0
  314. package/dist/internal/shares/cryptoService.test.d.ts +1 -0
  315. package/dist/internal/shares/cryptoService.test.js +120 -0
  316. package/dist/internal/shares/cryptoService.test.js.map +1 -0
  317. package/dist/internal/shares/index.d.ts +15 -0
  318. package/dist/internal/shares/index.js +26 -0
  319. package/dist/internal/shares/index.js.map +1 -0
  320. package/dist/internal/shares/interface.d.ts +94 -0
  321. package/dist/internal/shares/interface.js +11 -0
  322. package/dist/internal/shares/interface.js.map +1 -0
  323. package/dist/internal/shares/manager.d.ts +68 -0
  324. package/dist/internal/shares/manager.js +186 -0
  325. package/dist/internal/shares/manager.js.map +1 -0
  326. package/dist/internal/shares/manager.test.d.ts +1 -0
  327. package/dist/internal/shares/manager.test.js +176 -0
  328. package/dist/internal/shares/manager.test.js.map +1 -0
  329. package/dist/internal/sharing/apiService.d.ts +80 -0
  330. package/dist/internal/sharing/apiService.js +325 -0
  331. package/dist/internal/sharing/apiService.js.map +1 -0
  332. package/dist/internal/sharing/cache.d.ts +37 -0
  333. package/dist/internal/sharing/cache.js +105 -0
  334. package/dist/internal/sharing/cache.js.map +1 -0
  335. package/dist/internal/sharing/cache.test.d.ts +1 -0
  336. package/dist/internal/sharing/cache.test.js +82 -0
  337. package/dist/internal/sharing/cache.test.js.map +1 -0
  338. package/dist/internal/sharing/cryptoService.d.ts +112 -0
  339. package/dist/internal/sharing/cryptoService.js +269 -0
  340. package/dist/internal/sharing/cryptoService.js.map +1 -0
  341. package/dist/internal/sharing/events.d.ts +57 -0
  342. package/dist/internal/sharing/events.js +153 -0
  343. package/dist/internal/sharing/events.js.map +1 -0
  344. package/dist/internal/sharing/events.test.d.ts +1 -0
  345. package/dist/internal/sharing/events.test.js +246 -0
  346. package/dist/internal/sharing/events.test.js.map +1 -0
  347. package/dist/internal/sharing/index.d.ts +20 -0
  348. package/dist/internal/sharing/index.js +30 -0
  349. package/dist/internal/sharing/index.js.map +1 -0
  350. package/dist/internal/sharing/interface.d.ts +169 -0
  351. package/dist/internal/sharing/interface.js +9 -0
  352. package/dist/internal/sharing/interface.js.map +1 -0
  353. package/dist/internal/sharing/sharingAccess.d.ts +32 -0
  354. package/dist/internal/sharing/sharingAccess.js +119 -0
  355. package/dist/internal/sharing/sharingAccess.js.map +1 -0
  356. package/dist/internal/sharing/sharingAccess.test.d.ts +1 -0
  357. package/dist/internal/sharing/sharingAccess.test.js +84 -0
  358. package/dist/internal/sharing/sharingAccess.test.js.map +1 -0
  359. package/dist/internal/sharing/sharingManagement.d.ts +43 -0
  360. package/dist/internal/sharing/sharingManagement.js +439 -0
  361. package/dist/internal/sharing/sharingManagement.js.map +1 -0
  362. package/dist/internal/sharing/sharingManagement.test.d.ts +1 -0
  363. package/dist/internal/sharing/sharingManagement.test.js +788 -0
  364. package/dist/internal/sharing/sharingManagement.test.js.map +1 -0
  365. package/dist/internal/uids.d.ts +38 -0
  366. package/dist/internal/uids.js +85 -0
  367. package/dist/internal/uids.js.map +1 -0
  368. package/dist/internal/upload/apiService.d.ts +65 -0
  369. package/dist/internal/upload/apiService.js +137 -0
  370. package/dist/internal/upload/apiService.js.map +1 -0
  371. package/dist/internal/upload/blockVerifier.d.ts +16 -0
  372. package/dist/internal/upload/blockVerifier.js +33 -0
  373. package/dist/internal/upload/blockVerifier.js.map +1 -0
  374. package/dist/internal/upload/chunkStreamReader.d.ts +13 -0
  375. package/dist/internal/upload/chunkStreamReader.js +46 -0
  376. package/dist/internal/upload/chunkStreamReader.js.map +1 -0
  377. package/dist/internal/upload/chunkStreamReader.test.d.ts +1 -0
  378. package/dist/internal/upload/chunkStreamReader.test.js +75 -0
  379. package/dist/internal/upload/chunkStreamReader.test.js.map +1 -0
  380. package/dist/internal/upload/controller.d.ts +8 -0
  381. package/dist/internal/upload/controller.js +25 -0
  382. package/dist/internal/upload/controller.js.map +1 -0
  383. package/dist/internal/upload/cryptoService.d.ts +29 -0
  384. package/dist/internal/upload/cryptoService.js +104 -0
  385. package/dist/internal/upload/cryptoService.js.map +1 -0
  386. package/dist/internal/upload/digests.d.ts +8 -0
  387. package/dist/internal/upload/digests.js +22 -0
  388. package/dist/internal/upload/digests.js.map +1 -0
  389. package/dist/internal/upload/fileUploader.d.ts +65 -0
  390. package/dist/internal/upload/fileUploader.js +463 -0
  391. package/dist/internal/upload/fileUploader.js.map +1 -0
  392. package/dist/internal/upload/fileUploader.test.d.ts +1 -0
  393. package/dist/internal/upload/fileUploader.test.js +393 -0
  394. package/dist/internal/upload/fileUploader.test.js.map +1 -0
  395. package/dist/internal/upload/index.d.ts +16 -0
  396. package/dist/internal/upload/index.js +77 -0
  397. package/dist/internal/upload/index.js.map +1 -0
  398. package/dist/internal/upload/interface.d.ts +117 -0
  399. package/dist/internal/upload/interface.js +3 -0
  400. package/dist/internal/upload/interface.js.map +1 -0
  401. package/dist/internal/upload/manager.d.ts +31 -0
  402. package/dist/internal/upload/manager.js +250 -0
  403. package/dist/internal/upload/manager.js.map +1 -0
  404. package/dist/internal/upload/manager.test.d.ts +1 -0
  405. package/dist/internal/upload/manager.test.js +349 -0
  406. package/dist/internal/upload/manager.test.js.map +1 -0
  407. package/dist/internal/upload/queue.d.ts +5 -0
  408. package/dist/internal/upload/queue.js +32 -0
  409. package/dist/internal/upload/queue.js.map +1 -0
  410. package/dist/internal/upload/telemetry.d.ts +15 -0
  411. package/dist/internal/upload/telemetry.js +111 -0
  412. package/dist/internal/upload/telemetry.js.map +1 -0
  413. package/dist/internal/upload/telemetry.test.d.ts +1 -0
  414. package/dist/internal/upload/telemetry.test.js +107 -0
  415. package/dist/internal/upload/telemetry.test.js.map +1 -0
  416. package/dist/internal/utils.d.ts +1 -0
  417. package/dist/internal/utils.js +13 -0
  418. package/dist/internal/utils.js.map +1 -0
  419. package/dist/internal/wait.d.ts +3 -0
  420. package/dist/internal/wait.js +28 -0
  421. package/dist/internal/wait.js.map +1 -0
  422. package/dist/internal/wait.test.d.ts +1 -0
  423. package/dist/internal/wait.test.js +21 -0
  424. package/dist/internal/wait.test.js.map +1 -0
  425. package/dist/protonDriveClient.d.ts +593 -0
  426. package/dist/protonDriveClient.js +768 -0
  427. package/dist/protonDriveClient.js.map +1 -0
  428. package/dist/protonDrivePhotosClient.d.ts +16 -0
  429. package/dist/protonDrivePhotosClient.js +46 -0
  430. package/dist/protonDrivePhotosClient.js.map +1 -0
  431. package/dist/telemetry.d.ts +187 -0
  432. package/dist/telemetry.js +297 -0
  433. package/dist/telemetry.js.map +1 -0
  434. package/dist/tests/logger.d.ts +2 -0
  435. package/dist/tests/logger.js +12 -0
  436. package/dist/tests/logger.js.map +1 -0
  437. package/dist/tests/telemetry.d.ts +2 -0
  438. package/dist/tests/telemetry.js +11 -0
  439. package/dist/tests/telemetry.js.map +1 -0
  440. package/dist/transformers.d.ts +17 -0
  441. package/dist/transformers.js +77 -0
  442. package/dist/transformers.js.map +1 -0
  443. package/dist/version.d.ts +1 -0
  444. package/dist/version.js +6 -0
  445. package/dist/version.js.map +1 -0
  446. package/package.json +49 -0
  447. package/src/cache/index.ts +2 -0
  448. package/src/cache/interface.ts +104 -0
  449. package/src/cache/memoryCache.test.ts +150 -0
  450. package/src/cache/memoryCache.ts +85 -0
  451. package/src/config.ts +9 -0
  452. package/src/crypto/driveCrypto.test.ts +45 -0
  453. package/src/crypto/driveCrypto.ts +696 -0
  454. package/src/crypto/hmac.ts +46 -0
  455. package/src/crypto/index.ts +6 -0
  456. package/src/crypto/interface.ts +230 -0
  457. package/src/crypto/openPGPCrypto.ts +398 -0
  458. package/src/crypto/utils.ts +40 -0
  459. package/src/errors.ts +168 -0
  460. package/src/index.ts +30 -0
  461. package/src/interface/account.ts +38 -0
  462. package/src/interface/author.ts +29 -0
  463. package/src/interface/devices.ts +21 -0
  464. package/src/interface/download.ts +32 -0
  465. package/src/interface/events.ts +30 -0
  466. package/src/interface/httpClient.ts +42 -0
  467. package/src/interface/index.ts +46 -0
  468. package/src/interface/nodes.ts +168 -0
  469. package/src/interface/result.ts +11 -0
  470. package/src/interface/sharing.ts +87 -0
  471. package/src/interface/telemetry.ts +107 -0
  472. package/src/interface/thumbnail.ts +14 -0
  473. package/src/interface/upload.ts +19 -0
  474. package/src/internal/apiService/apiService.test.ts +285 -0
  475. package/src/internal/apiService/apiService.ts +353 -0
  476. package/src/internal/apiService/coreTypes.ts +24439 -0
  477. package/src/internal/apiService/driveTypes.ts +11841 -0
  478. package/src/internal/apiService/errorCodes.ts +38 -0
  479. package/src/internal/apiService/errors.test.ts +63 -0
  480. package/src/internal/apiService/errors.ts +91 -0
  481. package/src/internal/apiService/index.ts +7 -0
  482. package/src/internal/apiService/observerStream.ts +10 -0
  483. package/src/internal/apiService/transformers.ts +45 -0
  484. package/src/internal/batchLoading.test.ts +58 -0
  485. package/src/internal/batchLoading.ts +74 -0
  486. package/src/internal/devices/apiService.ts +142 -0
  487. package/src/internal/devices/cryptoService.ts +65 -0
  488. package/src/internal/devices/index.ts +31 -0
  489. package/src/internal/devices/interface.ts +28 -0
  490. package/src/internal/devices/manager.test.ts +129 -0
  491. package/src/internal/devices/manager.ts +113 -0
  492. package/src/internal/download/apiService.ts +145 -0
  493. package/src/internal/download/controller.ts +22 -0
  494. package/src/internal/download/cryptoService.ts +96 -0
  495. package/src/internal/download/fileDownloader.test.ts +381 -0
  496. package/src/internal/download/fileDownloader.ts +266 -0
  497. package/src/internal/download/index.ts +122 -0
  498. package/src/internal/download/interface.ts +38 -0
  499. package/src/internal/download/queue.ts +30 -0
  500. package/src/internal/download/telemetry.test.ts +134 -0
  501. package/src/internal/download/telemetry.ts +115 -0
  502. package/src/internal/download/thumbnailDownloader.test.ts +226 -0
  503. package/src/internal/download/thumbnailDownloader.ts +250 -0
  504. package/src/internal/errors.test.ts +21 -0
  505. package/src/internal/errors.ts +28 -0
  506. package/src/internal/events/apiService.ts +87 -0
  507. package/src/internal/events/cache.test.ts +47 -0
  508. package/src/internal/events/cache.ts +80 -0
  509. package/src/internal/events/coreEventManager.ts +69 -0
  510. package/src/internal/events/eventManager.test.ts +139 -0
  511. package/src/internal/events/eventManager.ts +168 -0
  512. package/src/internal/events/index.ts +131 -0
  513. package/src/internal/events/interface.ts +51 -0
  514. package/src/internal/events/volumeEventManager.ts +74 -0
  515. package/src/internal/nodes/apiService.test.ts +394 -0
  516. package/src/internal/nodes/apiService.ts +455 -0
  517. package/src/internal/nodes/cache.test.ts +197 -0
  518. package/src/internal/nodes/cache.ts +240 -0
  519. package/src/internal/nodes/cryptoCache.test.ts +92 -0
  520. package/src/internal/nodes/cryptoCache.ts +47 -0
  521. package/src/internal/nodes/cryptoService.test.ts +814 -0
  522. package/src/internal/nodes/cryptoService.ts +550 -0
  523. package/src/internal/nodes/events.test.ts +383 -0
  524. package/src/internal/nodes/events.ts +271 -0
  525. package/src/internal/nodes/extendedAttributes.test.ts +177 -0
  526. package/src/internal/nodes/extendedAttributes.ts +180 -0
  527. package/src/internal/nodes/index.test.ts +135 -0
  528. package/src/internal/nodes/index.ts +52 -0
  529. package/src/internal/nodes/interface.ts +152 -0
  530. package/src/internal/nodes/mediaTypes.ts +10 -0
  531. package/src/internal/nodes/nodesAccess.test.ts +555 -0
  532. package/src/internal/nodes/nodesAccess.ts +360 -0
  533. package/src/internal/nodes/nodesManagement.test.ts +221 -0
  534. package/src/internal/nodes/nodesManagement.ts +272 -0
  535. package/src/internal/nodes/nodesRevisions.ts +58 -0
  536. package/src/internal/nodes/validations.ts +26 -0
  537. package/src/internal/photos/albums.ts +29 -0
  538. package/src/internal/photos/apiService.ts +16 -0
  539. package/src/internal/photos/cache.ts +11 -0
  540. package/src/internal/photos/index.ts +23 -0
  541. package/src/internal/photos/interface.ts +7 -0
  542. package/src/internal/photos/photosTimeline.ts +18 -0
  543. package/src/internal/sdkEvents.test.ts +55 -0
  544. package/src/internal/sdkEvents.ts +52 -0
  545. package/src/internal/shares/apiService.ts +176 -0
  546. package/src/internal/shares/cache.test.ts +58 -0
  547. package/src/internal/shares/cache.ts +64 -0
  548. package/src/internal/shares/cryptoCache.test.ts +70 -0
  549. package/src/internal/shares/cryptoCache.ts +35 -0
  550. package/src/internal/shares/cryptoService.test.ts +137 -0
  551. package/src/internal/shares/cryptoService.ts +143 -0
  552. package/src/internal/shares/index.ts +35 -0
  553. package/src/internal/shares/interface.ts +104 -0
  554. package/src/internal/shares/manager.test.ts +210 -0
  555. package/src/internal/shares/manager.ts +213 -0
  556. package/src/internal/sharing/apiService.ts +483 -0
  557. package/src/internal/sharing/cache.test.ts +99 -0
  558. package/src/internal/sharing/cache.ts +109 -0
  559. package/src/internal/sharing/cryptoService.ts +378 -0
  560. package/src/internal/sharing/events.test.ts +268 -0
  561. package/src/internal/sharing/events.ts +166 -0
  562. package/src/internal/sharing/index.ts +43 -0
  563. package/src/internal/sharing/interface.ts +177 -0
  564. package/src/internal/sharing/sharingAccess.test.ts +102 -0
  565. package/src/internal/sharing/sharingAccess.ts +133 -0
  566. package/src/internal/sharing/sharingManagement.test.ts +895 -0
  567. package/src/internal/sharing/sharingManagement.ts +521 -0
  568. package/src/internal/uids.ts +83 -0
  569. package/src/internal/upload/apiService.ts +243 -0
  570. package/src/internal/upload/blockVerifier.ts +40 -0
  571. package/src/internal/upload/chunkStreamReader.test.ts +89 -0
  572. package/src/internal/upload/chunkStreamReader.ts +49 -0
  573. package/src/internal/upload/controller.ts +25 -0
  574. package/src/internal/upload/cryptoService.ts +162 -0
  575. package/src/internal/upload/digests.ts +18 -0
  576. package/src/internal/upload/fileUploader.test.ts +513 -0
  577. package/src/internal/upload/fileUploader.ts +576 -0
  578. package/src/internal/upload/index.ts +126 -0
  579. package/src/internal/upload/interface.ts +128 -0
  580. package/src/internal/upload/manager.test.ts +390 -0
  581. package/src/internal/upload/manager.ts +320 -0
  582. package/src/internal/upload/queue.ts +31 -0
  583. package/src/internal/upload/telemetry.test.ts +129 -0
  584. package/src/internal/upload/telemetry.ts +121 -0
  585. package/src/internal/utils.ts +9 -0
  586. package/src/internal/wait.test.ts +21 -0
  587. package/src/internal/wait.ts +26 -0
  588. package/src/protonDriveClient.ts +861 -0
  589. package/src/protonDrivePhotosClient.ts +56 -0
  590. package/src/telemetry.ts +346 -0
  591. package/src/tests/logger.ts +10 -0
  592. package/src/tests/telemetry.ts +9 -0
  593. package/src/transformers.ts +98 -0
  594. package/src/version.ts +4 -0
@@ -0,0 +1,112 @@
1
+ import { DriveCrypto, PrivateKey, SessionKey, SRPVerifier } from '../../crypto';
2
+ import { ProtonDriveAccount, ProtonInvitation, ProtonInvitationWithNode, NonProtonInvitation, Author, Member } from "../../interface";
3
+ import { EncryptedShare } from "../shares";
4
+ import { EncryptedInvitation, EncryptedInvitationWithNode, EncryptedExternalInvitation, EncryptedMember, EncryptedPublicLink, PublicLinkWithCreatorEmail } from "./interface";
5
+ export declare const PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = 12;
6
+ /**
7
+ * Provides crypto operations for sharing.
8
+ *
9
+ * The sharing crypto service is responsible for encrypting and decrypting
10
+ * shares, invitations, etc.
11
+ */
12
+ export declare class SharingCryptoService {
13
+ private driveCrypto;
14
+ private account;
15
+ constructor(driveCrypto: DriveCrypto, account: ProtonDriveAccount);
16
+ /**
17
+ * Generates a share key for a standard share used for sharing with other users.
18
+ *
19
+ * Standard share, in contrast to a root share, is encrypted with node key and
20
+ * can be managed by any admin.
21
+ */
22
+ generateShareKeys(nodeKeys: {
23
+ key: PrivateKey;
24
+ passphraseSessionKey: SessionKey;
25
+ nameSessionKey: SessionKey;
26
+ }, addressKey: PrivateKey): Promise<{
27
+ shareKey: {
28
+ encrypted: {
29
+ armoredKey: string;
30
+ armoredPassphrase: string;
31
+ armoredPassphraseSignature: string;
32
+ };
33
+ decrypted: {
34
+ key: PrivateKey;
35
+ passphraseSessionKey: SessionKey;
36
+ };
37
+ };
38
+ base64PpassphraseKeyPacket: string;
39
+ base64NameKeyPacket: string;
40
+ }>;
41
+ /**
42
+ * Decrypts a share using the node key.
43
+ *
44
+ * The share is encrypted with the node key and can be managed by any admin.
45
+ *
46
+ * Old shares are encrypted with address key only and thus available only
47
+ * to owners. `decryptShare` automatically tries to decrypt the share with
48
+ * address keys as fallback if available.
49
+ */
50
+ decryptShare(share: EncryptedShare, nodeKey: PrivateKey): Promise<{
51
+ author: Author;
52
+ key: PrivateKey;
53
+ passphraseSessionKey: SessionKey;
54
+ }>;
55
+ /**
56
+ * Encrypts an invitation for sharing a node with another user.
57
+ *
58
+ * `inviteeEmail` is used to load public key of the invitee and used to
59
+ * encrypt share's session key. `inviterKey` is used to sign the invitation.
60
+ */
61
+ encryptInvitation(shareSessionKey: SessionKey, inviterKey: PrivateKey, inviteeEmail: string): Promise<{
62
+ base64KeyPacket: string;
63
+ base64KeyPacketSignature: string;
64
+ }>;
65
+ /**
66
+ * Decrypts and verifies an invitation and node's name.
67
+ */
68
+ decryptInvitationWithNode(encryptedInvitation: EncryptedInvitationWithNode): Promise<ProtonInvitationWithNode>;
69
+ /**
70
+ * Verifies an invitation.
71
+ */
72
+ decryptInvitation(encryptedInvitation: EncryptedInvitation): Promise<ProtonInvitation>;
73
+ /**
74
+ * Accepts an invitation by signing the session key by invitee.
75
+ */
76
+ acceptInvitation(encryptedInvitation: EncryptedInvitationWithNode): Promise<{
77
+ base64SessionKeySignature: string;
78
+ }>;
79
+ /**
80
+ * Encrypts an external invitation for sharing a node with another user.
81
+ *
82
+ * `inviteeEmail` is used to sign the invitation with `inviterKey`.
83
+ *
84
+ * External invitations are used to share nodes with users who are not
85
+ * registered with Proton Drive. The external invitation then requires
86
+ * the invitee to sign up to create key. Then it can be followed by
87
+ * regular invitation flow.
88
+ */
89
+ encryptExternalInvitation(shareSessionKey: SessionKey, inviterKey: PrivateKey, inviteeEmail: string): Promise<{
90
+ base64ExternalInvitationSignature: string;
91
+ }>;
92
+ /**
93
+ * Verifies an external invitation.
94
+ */
95
+ decryptExternalInvitation(encryptedInvitation: EncryptedExternalInvitation): Promise<NonProtonInvitation>;
96
+ /**
97
+ * Verifies a member.
98
+ */
99
+ decryptMember(encryptedMember: EncryptedMember): Promise<Member>;
100
+ encryptPublicLink(creatorEmail: string, shareSessionKey: SessionKey, password: string): Promise<{
101
+ crypto: {
102
+ base64SharePasswordSalt: string;
103
+ base64SharePassphraseKeyPacket: string;
104
+ armoredPassword: string;
105
+ };
106
+ srp: SRPVerifier;
107
+ }>;
108
+ generatePublicLinkPassword(): Promise<string>;
109
+ private computeKeySaltAndPassphrase;
110
+ decryptPublicLink(encryptedPublicLink: EncryptedPublicLink): Promise<PublicLinkWithCreatorEmail>;
111
+ private decryptShareUrlPassword;
112
+ }
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SharingCryptoService = exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = void 0;
7
+ const bcryptjs_1 = __importDefault(require("bcryptjs"));
8
+ const ttag_1 = require("ttag");
9
+ const crypto_1 = require("../../crypto");
10
+ const interface_1 = require("../../interface");
11
+ const errors_1 = require("../errors");
12
+ // Version 2 of bcrypt with 2**10 rounds.
13
+ // https://en.wikipedia.org/wiki/Bcrypt#Description
14
+ const BCRYPT_PREFIX = '$2y$10$';
15
+ exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = 12;
16
+ // We do not support management of legacy public links anymore (that is no
17
+ // flag or bit 1). But we still need to support to read the legacy public
18
+ // link.
19
+ var PublicLinkFlags;
20
+ (function (PublicLinkFlags) {
21
+ PublicLinkFlags[PublicLinkFlags["Legacy"] = 0] = "Legacy";
22
+ PublicLinkFlags[PublicLinkFlags["CustomPassword"] = 1] = "CustomPassword";
23
+ PublicLinkFlags[PublicLinkFlags["GeneratedPasswordIncluded"] = 2] = "GeneratedPasswordIncluded";
24
+ PublicLinkFlags[PublicLinkFlags["GeneratedPasswordWithCustomPassword"] = 3] = "GeneratedPasswordWithCustomPassword";
25
+ })(PublicLinkFlags || (PublicLinkFlags = {}));
26
+ /**
27
+ * Provides crypto operations for sharing.
28
+ *
29
+ * The sharing crypto service is responsible for encrypting and decrypting
30
+ * shares, invitations, etc.
31
+ */
32
+ class SharingCryptoService {
33
+ driveCrypto;
34
+ account;
35
+ constructor(driveCrypto, account) {
36
+ this.driveCrypto = driveCrypto;
37
+ this.account = account;
38
+ this.driveCrypto = driveCrypto;
39
+ this.account = account;
40
+ }
41
+ /**
42
+ * Generates a share key for a standard share used for sharing with other users.
43
+ *
44
+ * Standard share, in contrast to a root share, is encrypted with node key and
45
+ * can be managed by any admin.
46
+ */
47
+ async generateShareKeys(nodeKeys, addressKey) {
48
+ const shareKey = await this.driveCrypto.generateKey([nodeKeys.key, addressKey], addressKey);
49
+ const { base64KeyPacket: base64PpassphraseKeyPacket } = await this.driveCrypto.encryptSessionKey(nodeKeys.passphraseSessionKey, shareKey.decrypted.key);
50
+ const { base64KeyPacket: base64NameKeyPacket } = await this.driveCrypto.encryptSessionKey(nodeKeys.nameSessionKey, shareKey.decrypted.key);
51
+ return {
52
+ shareKey,
53
+ base64PpassphraseKeyPacket,
54
+ base64NameKeyPacket,
55
+ };
56
+ }
57
+ ;
58
+ /**
59
+ * Decrypts a share using the node key.
60
+ *
61
+ * The share is encrypted with the node key and can be managed by any admin.
62
+ *
63
+ * Old shares are encrypted with address key only and thus available only
64
+ * to owners. `decryptShare` automatically tries to decrypt the share with
65
+ * address keys as fallback if available.
66
+ */
67
+ async decryptShare(share, nodeKey) {
68
+ // All standard shares should be encrypted with node key.
69
+ // Using node key is essential so any admin can manage the share.
70
+ // Old shares are encrypted with address key only and thus available
71
+ // only to owners. Adding address keys (if available) is a fallback
72
+ // solution until all shares are migrated.
73
+ const decryptionKeys = [nodeKey];
74
+ if (share.addressId) {
75
+ const address = await this.account.getOwnAddress(share.addressId);
76
+ decryptionKeys.push(...address.keys.map(({ key }) => key));
77
+ }
78
+ const addressPublicKeys = await this.account.getPublicKeys(share.creatorEmail);
79
+ const { key, passphraseSessionKey, verified } = await this.driveCrypto.decryptKey(share.encryptedCrypto.armoredKey, share.encryptedCrypto.armoredPassphrase, share.encryptedCrypto.armoredPassphraseSignature, decryptionKeys, addressPublicKeys);
80
+ const author = verified === crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID
81
+ ? (0, interface_1.resultOk)(share.creatorEmail)
82
+ : (0, interface_1.resultError)({
83
+ claimedAuthor: share.creatorEmail,
84
+ error: (0, errors_1.getVerificationMessage)(verified),
85
+ });
86
+ return {
87
+ author,
88
+ key,
89
+ passphraseSessionKey,
90
+ };
91
+ }
92
+ /**
93
+ * Encrypts an invitation for sharing a node with another user.
94
+ *
95
+ * `inviteeEmail` is used to load public key of the invitee and used to
96
+ * encrypt share's session key. `inviterKey` is used to sign the invitation.
97
+ */
98
+ async encryptInvitation(shareSessionKey, inviterKey, inviteeEmail) {
99
+ const inviteePublicKeys = await this.account.getPublicKeys(inviteeEmail);
100
+ const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey);
101
+ return result;
102
+ }
103
+ ;
104
+ /**
105
+ * Decrypts and verifies an invitation and node's name.
106
+ */
107
+ async decryptInvitationWithNode(encryptedInvitation) {
108
+ const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
109
+ const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
110
+ const shareKey = await this.driveCrypto.decryptUnsignedKey(encryptedInvitation.share.armoredKey, encryptedInvitation.share.armoredPassphrase, inviteeKey);
111
+ let nodeName;
112
+ try {
113
+ const result = await this.driveCrypto.decryptNodeName(encryptedInvitation.node.encryptedName, shareKey, []);
114
+ nodeName = (0, interface_1.resultOk)(result.name);
115
+ }
116
+ catch (error) {
117
+ const message = (0, errors_1.getErrorMessage)(error);
118
+ const errorMessage = (0, ttag_1.c)('Error').t `Failed to decrypt item name: ${message}`;
119
+ nodeName = (0, interface_1.resultError)(new Error(errorMessage));
120
+ }
121
+ return {
122
+ ...await this.decryptInvitation(encryptedInvitation),
123
+ node: {
124
+ name: nodeName,
125
+ type: encryptedInvitation.node.type,
126
+ mediaType: encryptedInvitation.node.mediaType,
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Verifies an invitation.
132
+ */
133
+ async decryptInvitation(encryptedInvitation) {
134
+ // TODO: verify addedByEmail (current client doesnt do this)
135
+ const addedByEmail = (0, interface_1.resultOk)(encryptedInvitation.addedByEmail);
136
+ return {
137
+ uid: encryptedInvitation.uid,
138
+ invitationTime: encryptedInvitation.invitationTime,
139
+ addedByEmail: addedByEmail,
140
+ inviteeEmail: encryptedInvitation.inviteeEmail,
141
+ role: encryptedInvitation.role,
142
+ };
143
+ }
144
+ /**
145
+ * Accepts an invitation by signing the session key by invitee.
146
+ */
147
+ async acceptInvitation(encryptedInvitation) {
148
+ const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
149
+ const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
150
+ const result = await this.driveCrypto.acceptInvitation(encryptedInvitation.base64KeyPacket, inviteeKey);
151
+ return result;
152
+ }
153
+ /**
154
+ * Encrypts an external invitation for sharing a node with another user.
155
+ *
156
+ * `inviteeEmail` is used to sign the invitation with `inviterKey`.
157
+ *
158
+ * External invitations are used to share nodes with users who are not
159
+ * registered with Proton Drive. The external invitation then requires
160
+ * the invitee to sign up to create key. Then it can be followed by
161
+ * regular invitation flow.
162
+ */
163
+ async encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail) {
164
+ const result = await this.driveCrypto.encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail);
165
+ return result;
166
+ }
167
+ /**
168
+ * Verifies an external invitation.
169
+ */
170
+ async decryptExternalInvitation(encryptedInvitation) {
171
+ // TODO: verify addedByEmail (current client doesnt do this)
172
+ const addedByEmail = (0, interface_1.resultOk)(encryptedInvitation.addedByEmail);
173
+ return {
174
+ uid: encryptedInvitation.uid,
175
+ invitationTime: encryptedInvitation.invitationTime,
176
+ addedByEmail: addedByEmail,
177
+ inviteeEmail: encryptedInvitation.inviteeEmail,
178
+ role: encryptedInvitation.role,
179
+ state: encryptedInvitation.state,
180
+ };
181
+ }
182
+ /**
183
+ * Verifies a member.
184
+ */
185
+ async decryptMember(encryptedMember) {
186
+ // TODO: verify addedByEmail (current client doesnt do this)
187
+ const addedByEmail = (0, interface_1.resultOk)(encryptedMember.addedByEmail);
188
+ return {
189
+ uid: encryptedMember.uid,
190
+ invitationTime: encryptedMember.invitationTime,
191
+ addedByEmail: addedByEmail,
192
+ inviteeEmail: encryptedMember.inviteeEmail,
193
+ role: encryptedMember.role,
194
+ };
195
+ }
196
+ async encryptPublicLink(creatorEmail, shareSessionKey, password) {
197
+ const address = await this.account.getOwnAddress(creatorEmail);
198
+ const addressKey = address.keys[address.primaryKeyIndex].key;
199
+ const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } = await this.computeKeySaltAndPassphrase(password);
200
+ const { base64SharePassphraseKeyPacket, armoredPassword, srp } = await this.driveCrypto.encryptPublicLinkPasswordAndSessionKey(password, addressKey, bcryptPassphrase, shareSessionKey);
201
+ return {
202
+ crypto: {
203
+ base64SharePasswordSalt,
204
+ base64SharePassphraseKeyPacket,
205
+ armoredPassword,
206
+ },
207
+ srp,
208
+ };
209
+ }
210
+ async generatePublicLinkPassword() {
211
+ const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
212
+ const values = crypto.getRandomValues(new Uint32Array(exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH));
213
+ let result = '';
214
+ for (let i = 0; i < exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH; i++) {
215
+ result += charset[values[i] % charset.length];
216
+ }
217
+ return result;
218
+ }
219
+ async computeKeySaltAndPassphrase(password) {
220
+ if (!password) {
221
+ throw new Error('Password required.');
222
+ }
223
+ const salt = crypto.getRandomValues(new Uint8Array(16));
224
+ const hash = await bcryptjs_1.default.hash(password, BCRYPT_PREFIX + bcryptjs_1.default.encodeBase64(salt, 16));
225
+ // Remove bcrypt prefix and salt (first 29 characters)
226
+ const bcryptPassphrase = hash.slice(29);
227
+ return {
228
+ base64Salt: (0, crypto_1.uint8ArrayToBase64String)(salt),
229
+ bcryptPassphrase,
230
+ };
231
+ }
232
+ ;
233
+ async decryptPublicLink(encryptedPublicLink) {
234
+ const address = await this.account.getOwnAddress(encryptedPublicLink.creatorEmail);
235
+ const addressKeys = address.keys.map(({ key }) => key);
236
+ const { password, customPassword } = await this.decryptShareUrlPassword(encryptedPublicLink, addressKeys);
237
+ return {
238
+ uid: encryptedPublicLink.uid,
239
+ creationTime: encryptedPublicLink.creationTime,
240
+ expirationTime: encryptedPublicLink.expirationTime,
241
+ role: encryptedPublicLink.role,
242
+ url: `${encryptedPublicLink.publicUrl}#${password}`,
243
+ customPassword,
244
+ creatorEmail: encryptedPublicLink.creatorEmail,
245
+ };
246
+ }
247
+ async decryptShareUrlPassword(encryptedPublicLink, addressKeys) {
248
+ const password = await this.driveCrypto.decryptShareUrlPassword(encryptedPublicLink.armoredUrlPassword, addressKeys);
249
+ switch (encryptedPublicLink.flags) {
250
+ // This is legacy that is not supported anymore.
251
+ // Availalbe only for reading.
252
+ case PublicLinkFlags.Legacy:
253
+ case PublicLinkFlags.CustomPassword:
254
+ return {
255
+ password,
256
+ };
257
+ case PublicLinkFlags.GeneratedPasswordIncluded:
258
+ case PublicLinkFlags.GeneratedPasswordWithCustomPassword:
259
+ return {
260
+ password: password.substring(0, exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH),
261
+ customPassword: password.substring(exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH) || undefined,
262
+ };
263
+ default:
264
+ throw new Error(`Unsupported public link with flags: ${encryptedPublicLink.flags}`);
265
+ }
266
+ }
267
+ }
268
+ exports.SharingCryptoService = SharingCryptoService;
269
+ //# sourceMappingURL=cryptoService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cryptoService.js","sourceRoot":"","sources":["../../../src/internal/sharing/cryptoService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { NodeEventCallback, Logger } from "../../interface";
2
+ import { DriveEventsService, DriveEvent } from "../events";
3
+ import { SharingCache } from "./cache";
4
+ import { SharingType, NodesService } from "./interface";
5
+ import { SharingAccess } from "./sharingAccess";
6
+ type Listeners = {
7
+ type: SharingType;
8
+ callback: NodeEventCallback;
9
+ }[];
10
+ /**
11
+ * Provides both event handling and subscription mechanism for user.
12
+ *
13
+ * The service is responsible for handling events regarding sharing listing
14
+ * from the DriveEventsService, and for providing a subscription mechanism
15
+ * for the user to listen to updates of specific group of nodes, such as
16
+ * any update to list of shared with me nodes.
17
+ */
18
+ export declare class SharingEvents {
19
+ private listeners;
20
+ constructor(logger: Logger, events: DriveEventsService, cache: SharingCache, nodesService: NodesService, sharingAccess: SharingAccess);
21
+ subscribeToSharedNodesByMe(callback: NodeEventCallback): () => void;
22
+ subscribeToSharedNodesWithMe(callback: NodeEventCallback): () => void;
23
+ }
24
+ /**
25
+ * Update cache and notify listeners accordingly for any updates
26
+ * to nodes that are shared by me.
27
+ *
28
+ * Any node create or update that is being shared, is automatically
29
+ * added to the cache and the listeners are notified about the
30
+ * update of the node.
31
+ *
32
+ * Any node delete or update that is not being shared, and the cache
33
+ * includes the node, is removed from the cache and the listeners are
34
+ * notified about the removal of the node.
35
+ *
36
+ * @throws Only if the client's callback throws.
37
+ */
38
+ export declare function handleSharedByMeNodes(logger: Logger, event: DriveEvent, cache: SharingCache, listeners: Listeners, nodesService: NodesService): Promise<void>;
39
+ /**
40
+ * Update cache and notify listeners accordingly for any updates
41
+ * to nodes that are shared with me.
42
+ *
43
+ * There is only one event type that is relevant for shared with me
44
+ * nodes, which is the ShareWithMeUpdated event. The event is triggered
45
+ * when the list of shared with me nodes is updated.
46
+ *
47
+ * The cache is cleared and re-populated fully when the client
48
+ * requests the list of shared with me, or is actively listening.
49
+ *
50
+ * If the client listenes to shared with me updates, the client receives
51
+ * update to the full list of shared with me nodes, including remove
52
+ * updates for nodes that are no longer shared with me, but was before.
53
+ *
54
+ * @throws Only if the client's callback throws.
55
+ */
56
+ export declare function handleSharedWithMeNodes(event: DriveEvent, cache: SharingCache, listeners: Listeners, sharingAccess: SharingAccess): Promise<void>;
57
+ export {};
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SharingEvents = void 0;
4
+ exports.handleSharedByMeNodes = handleSharedByMeNodes;
5
+ exports.handleSharedWithMeNodes = handleSharedWithMeNodes;
6
+ const transformers_1 = require("../../transformers");
7
+ const events_1 = require("../events");
8
+ const interface_1 = require("./interface");
9
+ /**
10
+ * Provides both event handling and subscription mechanism for user.
11
+ *
12
+ * The service is responsible for handling events regarding sharing listing
13
+ * from the DriveEventsService, and for providing a subscription mechanism
14
+ * for the user to listen to updates of specific group of nodes, such as
15
+ * any update to list of shared with me nodes.
16
+ */
17
+ class SharingEvents {
18
+ listeners = [];
19
+ constructor(logger, events, cache, nodesService, sharingAccess) {
20
+ events.addListener(async (events, fullRefreshVolumeId) => {
21
+ // Technically we need to refresh only the shared by me nodes for
22
+ // own volume, and shared with me nodes only when the event comes
23
+ // as core refresh event is converted to it.
24
+ // We can optimise later, for now we refresh everything to make
25
+ // it simpler. The cache is smart enough to not do unnecessary
26
+ // requests to the API and refresh on web is rare without
27
+ // persistant cache for now.
28
+ if (fullRefreshVolumeId) {
29
+ await cache.setSharedByMeNodeUids(undefined);
30
+ await cache.setSharedWithMeNodeUids(undefined);
31
+ return;
32
+ }
33
+ for (const event of events) {
34
+ await handleSharedByMeNodes(logger, event, cache, this.listeners, nodesService);
35
+ await handleSharedWithMeNodes(event, cache, this.listeners, sharingAccess);
36
+ }
37
+ });
38
+ }
39
+ subscribeToSharedNodesByMe(callback) {
40
+ this.listeners.push({ type: interface_1.SharingType.SharedByMe, callback });
41
+ return () => {
42
+ this.listeners = this.listeners.filter(listener => listener.callback !== callback);
43
+ };
44
+ }
45
+ subscribeToSharedNodesWithMe(callback) {
46
+ this.listeners.push({ type: interface_1.SharingType.sharedWithMe, callback });
47
+ return () => {
48
+ this.listeners = this.listeners.filter(listener => listener.callback !== callback);
49
+ };
50
+ }
51
+ }
52
+ exports.SharingEvents = SharingEvents;
53
+ /**
54
+ * Update cache and notify listeners accordingly for any updates
55
+ * to nodes that are shared by me.
56
+ *
57
+ * Any node create or update that is being shared, is automatically
58
+ * added to the cache and the listeners are notified about the
59
+ * update of the node.
60
+ *
61
+ * Any node delete or update that is not being shared, and the cache
62
+ * includes the node, is removed from the cache and the listeners are
63
+ * notified about the removal of the node.
64
+ *
65
+ * @throws Only if the client's callback throws.
66
+ */
67
+ async function handleSharedByMeNodes(logger, event, cache, listeners, nodesService) {
68
+ if (event.type === events_1.DriveEventType.ShareWithMeUpdated || !event.isOwnVolume) {
69
+ return;
70
+ }
71
+ const subscribedListeners = listeners.filter(({ type }) => type === interface_1.SharingType.SharedByMe);
72
+ if ([events_1.DriveEventType.NodeCreated, events_1.DriveEventType.NodeUpdated, events_1.DriveEventType.NodeUpdatedMetadata].includes(event.type) && event.isShared) {
73
+ try {
74
+ await cache.addSharedByMeNodeUid(event.nodeUid);
75
+ }
76
+ catch (error) {
77
+ logger.error(`Skipping shared by me node cache update`, error);
78
+ }
79
+ if (subscribedListeners.length) {
80
+ let node;
81
+ try {
82
+ node = await nodesService.getNode(event.nodeUid);
83
+ }
84
+ catch (error) {
85
+ logger.error(`Skipping shared by me node update event to listener`, error);
86
+ return;
87
+ }
88
+ subscribedListeners.forEach(({ callback }) => callback({ type: 'update', uid: node.uid, node: (0, transformers_1.convertInternalNode)(node) }));
89
+ }
90
+ }
91
+ if (((event.type === events_1.DriveEventType.NodeUpdated || event.type === events_1.DriveEventType.NodeUpdatedMetadata) && !event.isShared)
92
+ || event.type === events_1.DriveEventType.NodeDeleted) {
93
+ let nodeWasShared = false;
94
+ try {
95
+ const cachedNodeUids = await cache.getSharedByMeNodeUids();
96
+ nodeWasShared = cachedNodeUids.includes(event.nodeUid);
97
+ }
98
+ catch {
99
+ // Cache can be empty.
100
+ }
101
+ if (nodeWasShared) {
102
+ try {
103
+ await cache.removeSharedByMeNodeUid(event.nodeUid);
104
+ }
105
+ catch (error) {
106
+ logger.error(`Skipping shared by me node cache remove`, error);
107
+ }
108
+ subscribedListeners.forEach(({ callback }) => callback({ type: 'remove', uid: event.nodeUid }));
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Update cache and notify listeners accordingly for any updates
114
+ * to nodes that are shared with me.
115
+ *
116
+ * There is only one event type that is relevant for shared with me
117
+ * nodes, which is the ShareWithMeUpdated event. The event is triggered
118
+ * when the list of shared with me nodes is updated.
119
+ *
120
+ * The cache is cleared and re-populated fully when the client
121
+ * requests the list of shared with me, or is actively listening.
122
+ *
123
+ * If the client listenes to shared with me updates, the client receives
124
+ * update to the full list of shared with me nodes, including remove
125
+ * updates for nodes that are no longer shared with me, but was before.
126
+ *
127
+ * @throws Only if the client's callback throws.
128
+ */
129
+ async function handleSharedWithMeNodes(event, cache, listeners, sharingAccess) {
130
+ if (event.type !== events_1.DriveEventType.ShareWithMeUpdated) {
131
+ return;
132
+ }
133
+ let cachedNodeUids = [];
134
+ const subscribedListeners = listeners.filter(({ type }) => type === interface_1.SharingType.sharedWithMe);
135
+ if (subscribedListeners.length) {
136
+ cachedNodeUids = await cache.getSharedWithMeNodeUids();
137
+ }
138
+ // Clearing the cache must be first, sharingAccess is no-op if cache is set.
139
+ await cache.setSharedWithMeNodeUids(undefined);
140
+ if (subscribedListeners.length) {
141
+ const nodeUids = [];
142
+ for await (const node of sharingAccess.iterateSharedNodesWithMe()) {
143
+ nodeUids.push(node.uid);
144
+ subscribedListeners.forEach(({ callback }) => callback({ type: 'update', uid: node.uid, node: (0, transformers_1.convertInternalNode)(node) }));
145
+ }
146
+ for (const nodeUid of cachedNodeUids) {
147
+ if (!nodeUids.includes(nodeUid)) {
148
+ subscribedListeners.forEach(({ callback }) => callback({ type: 'remove', uid: nodeUid }));
149
+ }
150
+ }
151
+ }
152
+ }
153
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/internal/sharing/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};