@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,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUid = getUid;
4
+ exports.getUids = getUids;
5
+ exports.convertInternalNodeIterator = convertInternalNodeIterator;
6
+ exports.convertInternalMissingNodeIterator = convertInternalMissingNodeIterator;
7
+ exports.convertInternalNodePromise = convertInternalNodePromise;
8
+ exports.convertInternalNode = convertInternalNode;
9
+ const interface_1 = require("./interface");
10
+ function getUid(nodeUid) {
11
+ if (typeof nodeUid === "string") {
12
+ return nodeUid;
13
+ }
14
+ // Directly passed NodeEntity or DegradedNode that has UID directly.
15
+ if ('uid' in nodeUid) {
16
+ return nodeUid.uid;
17
+ }
18
+ // MaybeNode that can be either NodeEntity or DegradedNode.
19
+ if (nodeUid.ok) {
20
+ return nodeUid.value.uid;
21
+ }
22
+ return nodeUid.error.uid;
23
+ }
24
+ function getUids(nodeUids) {
25
+ return nodeUids.map(getUid);
26
+ }
27
+ async function* convertInternalNodeIterator(nodeIterator) {
28
+ for await (const node of nodeIterator) {
29
+ yield convertInternalNode(node);
30
+ }
31
+ }
32
+ async function* convertInternalMissingNodeIterator(nodeIterator) {
33
+ for await (const node of nodeIterator) {
34
+ if ('missingUid' in node) {
35
+ yield (0, interface_1.resultError)(node);
36
+ }
37
+ else {
38
+ yield convertInternalNode(node);
39
+ }
40
+ }
41
+ }
42
+ async function convertInternalNodePromise(nodePromise) {
43
+ const node = await nodePromise;
44
+ return convertInternalNode(node);
45
+ }
46
+ function convertInternalNode(node) {
47
+ const baseNodeMetadata = {
48
+ uid: node.uid,
49
+ parentUid: node.parentUid,
50
+ keyAuthor: node.keyAuthor,
51
+ nameAuthor: node.nameAuthor,
52
+ directMemberRole: node.directMemberRole,
53
+ type: node.type,
54
+ mediaType: node.mediaType,
55
+ isShared: node.isShared,
56
+ creationTime: node.creationTime,
57
+ trashTime: node.trashTime,
58
+ totalStorageSize: node.totalStorageSize,
59
+ folder: node.folder,
60
+ };
61
+ const name = node.name;
62
+ const activeRevision = node.activeRevision;
63
+ if (node.errors?.length || !name.ok || (activeRevision && !activeRevision.ok)) {
64
+ return (0, interface_1.resultError)({
65
+ ...baseNodeMetadata,
66
+ name,
67
+ activeRevision,
68
+ errors: node.errors,
69
+ });
70
+ }
71
+ return (0, interface_1.resultOk)({
72
+ ...baseNodeMetadata,
73
+ name: name.value,
74
+ activeRevision: activeRevision?.value,
75
+ });
76
+ }
77
+ //# sourceMappingURL=transformers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":";;AAwBA,wBAaC;AAED,0BAEC;AAED,kEAIC;AAED,gFAQC;AAED,gEAGC;AAED,kDAiCC;AAjGD,2CAAuN;AAwBvN,SAAgB,MAAM,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,oEAAoE;IACpE,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC;IACD,2DAA2D;IAC3D,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,CAAC;AAED,SAAgB,OAAO,CAAC,QAAmB;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAEM,KAAK,SAAU,CAAC,CAAA,2BAA2B,CAAC,YAAiD;IAChG,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;AACL,CAAC;AAEM,KAAK,SAAU,CAAC,CAAA,kCAAkC,CAAC,YAA+D;IACrH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAA,uBAAW,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAAC,WAAyC;IACtF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;IAC/B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAyB;IACzD,MAAM,gBAAgB,GAAG;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,IAAI,CAAC,MAAM;KACtB,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAE3C,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAA,uBAAW,EAAC;YACf,GAAG,gBAAgB;YACnB,IAAI;YACJ,cAAc;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACA,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,IAAA,oBAAQ,EAAC;QACZ,GAAG,gBAAgB;QACnB,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,cAAc,EAAE,cAAc,EAAE,KAAK;KACpB,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const VERSION: string;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VERSION = void 0;
4
+ const package_json_1 = require("../package.json");
5
+ exports.VERSION = package_json_1.version;
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE7B,QAAA,OAAO,GAAG,sBAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@protontech/drive-sdk",
3
+ "version": "0.0.10",
4
+ "description": "Proton Drive SDK",
5
+ "license": "GPL-3.0",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "src"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "build:ci": "rm -rf dist && tsc",
15
+ "check-types": "tsc --noEmit",
16
+ "generate-doc:interface": "typedoc src/index.ts --out ${OUTPUT_PATH}",
17
+ "generate-doc:internal": "typedoc src/**/*.ts --out ${OUTPUT_PATH}",
18
+ "generate-types": "openapi-typescript ../../api/openapi-drive.json -o ./src/internal/apiService/driveTypes.ts && openapi-typescript ../../api/openapi-core.json -o ./src/internal/apiService/coreTypes.ts",
19
+ "lint": "eslint src --ext .ts --cache --ignore-pattern '**/apiService/*Types.ts'",
20
+ "pretty": "prettier --write $(find src -type f -name '*.ts')",
21
+ "test": "jest",
22
+ "test:ci": "jest --runInBand --no-cache",
23
+ "test:watch": "jest --watch --coverage=false",
24
+ "lint:ttag": "node tasks/linter.mjs src --verbose",
25
+ "extract:ttag": "ttag extract src --output po/template.pot"
26
+ },
27
+ "dependencies": {
28
+ "@noble/hashes": "^1.8.0",
29
+ "bcryptjs": "^2.4.3",
30
+ "ttag": "^1.8.7"
31
+ },
32
+ "devDependencies": {
33
+ "@swc/core": "^1.12.3",
34
+ "@swc/jest": "^0.2.38",
35
+ "@types/jest": "^29.5.14",
36
+ "@types/mocha": "^10.0.10",
37
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
38
+ "@web/dev-server-esbuild": "^1.0.3",
39
+ "eslint": "^8.57.1",
40
+ "eslint-plugin-tsdoc": "^0.3.0",
41
+ "glob": "^11.0.3",
42
+ "jest": "^29.7.0",
43
+ "openapi-typescript": "^7.4.1",
44
+ "prettier": "^3.4.2",
45
+ "ttag-cli": "^1.10.18",
46
+ "typedoc": "^0.26.11",
47
+ "typescript": "^5.6.3"
48
+ }
49
+ }
@@ -0,0 +1,2 @@
1
+ export type { ProtonDriveCache, EntityResult } from './interface';
2
+ export { MemoryCache } from './memoryCache';
@@ -0,0 +1,104 @@
1
+ export interface ProtonDriveCacheConstructor<T> {
2
+ /**
3
+ * Initialize the cache.
4
+ *
5
+ * The local database should follow document-based structure. The SDK does
6
+ * serialisation and data is not intended to be read by 3rd party. The SDK,
7
+ * however, provides also clear fields in form of tags that is used for
8
+ * search. Local database should have index or other structure for easier
9
+ * look-up.
10
+ *
11
+ * See {@link setEntity} for more details how tags are used.
12
+ */
13
+ new (): ProtonDriveCache<T>,
14
+ }
15
+
16
+ export interface ProtonDriveCache<T> {
17
+ /**
18
+ * Re-creates the whole persistent cache.
19
+ *
20
+ * The SDK can call this when there is some inconsistency and it is better
21
+ * to start from scratch rather than fix it.
22
+ */
23
+ clear(): Promise<void>,
24
+
25
+ /**
26
+ * Adds or updates entity in the local database.
27
+ *
28
+ * The `tags` is a list of strings that should be stored properly for fast
29
+ * look-up.
30
+ *
31
+ * @example Usage by the SDK
32
+ * ```ts
33
+ * await cache.setEntity("node-abc42", "{ node abc42 serialised data }", ["parentUid:abc123", "sharedWithMe"] });
34
+ * await Array.fromAsync(cache.iterateEntitiesByTag("parentUid:abc123")); // returns ["node-abc42"]
35
+ * await cache.getEntity("node-abc42"); // returns "{ node abc42 serialised data }"
36
+ * await Array.fromAsync(cache.iterateEntities(["node-abc42"])); // returns ["{ node abc42 serialised data }"]
37
+ * ```
38
+ *
39
+ * @example Stored data
40
+ * ```json
41
+ * {
42
+ * type: "node",
43
+ * version: 1,
44
+ * internal: {
45
+ * isStale,
46
+ * claimedDigests,
47
+ * // ...
48
+ * }
49
+ * node: {
50
+ * // same as node entity, here some example
51
+ * uid,
52
+ * parentUid,
53
+ * // ...
54
+ * }
55
+ * }
56
+ * ```
57
+ *
58
+ * @param key - Key is internal ID controlled by the SDK. It combines type and ID of the entity.
59
+ * @param value - Serialised JSON object controlled by the SDK. It is not intended for use outside of the SDK.
60
+ * @param tags - Clear metadata about the entity used for filtering. It is intended to store efficiently for fast look-up.
61
+ * @throws Exception if `key` from `tags` is not one of the tag keys provided from `usedTagKeysBySDK` in constructor.
62
+ */
63
+ setEntity(key: string, value: T, tags?: string[] ): Promise<void>,
64
+
65
+ /**
66
+ * Returns the data of the entity stored locally.
67
+ *
68
+ * @throws Exception if entity is not present.
69
+ */
70
+ getEntity(key: string): Promise<T>,
71
+
72
+ /**
73
+ * Generator providing the data of the entities stored locally for given
74
+ * list of keys.
75
+ *
76
+ * No exception is thrown when data is missing.
77
+ */
78
+ iterateEntities(keys: string[]): AsyncGenerator<EntityResult<T>>,
79
+
80
+ /**
81
+ * Generator providing the data of the entities stored locally for given
82
+ * filter option.
83
+ *
84
+ * No exception is thrown when data is missing.
85
+ *
86
+ * @example Usage by the SDK
87
+ * ```ts
88
+ * await cache.setEntity("node-abc42", "{ node abc42 serialised data }", { "parentUid": "abc123", "shared": "withMe" });
89
+ * await Array.fromAsync(cache.iterateEntitiesByTag("parentUid", "abc123")); // returns ["node-abc42"]
90
+ * ```
91
+ *
92
+ * @param tag - The tag, for example `parentUid:abc123`
93
+ */
94
+ iterateEntitiesByTag(tag: string): AsyncGenerator<EntityResult<T>>,
95
+
96
+ /**
97
+ * Removes completely the entity stored locally from the database.
98
+ *
99
+ * It is no-op if entity is not present.
100
+ */
101
+ removeEntities(keys: string[]): Promise<void>,
102
+ }
103
+
104
+ export type EntityResult<T> = {key: string, ok: true, value: T} | {key: string, ok: false, error: string};
@@ -0,0 +1,150 @@
1
+ import { EntityResult } from "./interface";
2
+ import { MemoryCache } from "./memoryCache";
3
+
4
+ describe('MemoryCache', () => {
5
+ let cache: MemoryCache<string>;
6
+
7
+ beforeEach(async () => {
8
+ cache = new MemoryCache();
9
+
10
+ await cache.setEntity('key1', 'value1', ['tag1:hello', 'tag2:world']);
11
+ await cache.setEntity('key2', 'value2', ['tag2:world']);
12
+ await cache.setEntity('key3', 'value3');
13
+ });
14
+
15
+ it('should store and retrieve an entity', async () => {
16
+ const key = 'newkey';
17
+ const value = 'newvalue';
18
+
19
+ await cache.setEntity(key, value);
20
+ const result = await cache.getEntity(key);
21
+
22
+ expect(result).toBe(value);
23
+ });
24
+
25
+ it('should update an entity with tags - remove old and add new tags', async () => {
26
+ const key = 'newkey';
27
+
28
+ await cache.setEntity(key, 'value1', ['tag1', 'tag2']);
29
+ await cache.setEntity(key, 'value2', ['tag2', 'tag3']);
30
+
31
+ const result = await cache.getEntity(key);
32
+ expect(result).toBe('value2');
33
+
34
+ const tag1 = await Array.fromAsync(cache.iterateEntitiesByTag('tag1'));
35
+ expect(tag1).toEqual([]);
36
+ const tag2 = await Array.fromAsync(cache.iterateEntitiesByTag('tag2'));
37
+ expect(tag2).toEqual([{ key, ok: true, value: 'value2' }]);
38
+ const tag3 = await Array.fromAsync(cache.iterateEntitiesByTag('tag3'));
39
+ expect(tag3).toEqual([{ key, ok: true, value: 'value2' }]);
40
+ });
41
+
42
+ it('should throw an error when retrieving a non-existing entity', async () => {
43
+ const key = 'newkey';
44
+
45
+ try {
46
+ await cache.getEntity(key);
47
+ fail('Should have thrown an error');
48
+ } catch (error) {
49
+ expect(`${error}`).toBe('Error: Entity not found');
50
+ }
51
+ });
52
+
53
+ it('should iterate over entities', async () => {
54
+ const results = [];
55
+ for await (const result of cache.iterateEntities(['key1', 'key2', 'key100'])) {
56
+ results.push(result);
57
+ }
58
+
59
+ expect(results).toEqual([
60
+ { key: 'key1', ok: true, value: 'value1' },
61
+ { key: 'key2', ok: true, value: 'value2' },
62
+ { key: 'key100', ok: false, error: 'Error: Entity not found' },
63
+ ]);
64
+ });
65
+
66
+ it('should iterate over entities by tag', async () => {
67
+ const results = [];
68
+ for await (const result of cache.iterateEntitiesByTag('tag2:world')) {
69
+ results.push(result);
70
+ }
71
+
72
+ expect(results).toEqual([
73
+ { key: 'key1', ok: true, value: 'value1' },
74
+ { key: 'key2', ok: true, value: 'value2' },
75
+ ]);
76
+ });
77
+
78
+ it('should iterate over entities with multiple tags by tag', async () => {
79
+ const results = [];
80
+ for await (const result of cache.iterateEntitiesByTag('tag1:hello')) {
81
+ results.push(result);
82
+ }
83
+
84
+ expect(results).toEqual([
85
+ { key: 'key1', ok: true, value: 'value1' },
86
+ ]);
87
+ });
88
+
89
+ it('should iterate over entities by empty tag', async () => {
90
+ const results = [];
91
+ for await (const result of cache.iterateEntitiesByTag('nonexistent')) {
92
+ results.push(result);
93
+ }
94
+
95
+ expect(results).toEqual([]);
96
+ });
97
+
98
+ it('should iterate over entities with concurrent changes to the same set', async () => {
99
+ const iterator = cache.iterateEntities(['key1', 'key2', 'key3']);
100
+
101
+ const results: string[] = [];
102
+ const { value: { key: key1 } } = await iterator.next();
103
+ results.push(key1);
104
+ await cache.removeEntities([key1]);
105
+
106
+ let value = await iterator.next(); // key2
107
+ results.push(value.value.key);
108
+
109
+ value = await iterator.next(); // key3
110
+ results.push(value.value.key);
111
+
112
+ expect(results).toEqual(['key1', 'key2', 'key3']);
113
+ });
114
+
115
+ it('should remove entities', async () => {
116
+ await cache.removeEntities(['key1', 'key3']);
117
+
118
+ const results = [];
119
+ for await (const result of cache.iterateEntities(['key1', 'key2', 'key3'])) {
120
+ results.push(result);
121
+ }
122
+
123
+ expect(results).toEqual([
124
+ { key: 'key1', ok: false, error: 'Error: Entity not found' },
125
+ { key: 'key2', ok: true, value: 'value2' },
126
+ { key: 'key3', ok: false, error: 'Error: Entity not found' },
127
+ ]);
128
+
129
+ const results2 = [];
130
+ for await (const result of cache.iterateEntitiesByTag('tag1:hello')) {
131
+ results2.push(result);
132
+ }
133
+ expect(results2).toEqual([]);
134
+ });
135
+
136
+ it('should clear the cache', async () => {
137
+ await cache.clear();
138
+
139
+ const results = [];
140
+ for await (const result of cache.iterateEntities(['key1', 'key2', 'key3'])) {
141
+ results.push(result);
142
+ }
143
+
144
+ expect(results).toEqual([
145
+ { key: 'key1', ok: false, error: 'Error: Entity not found' },
146
+ { key: 'key2', ok: false, error: 'Error: Entity not found' },
147
+ { key: 'key3', ok: false, error: 'Error: Entity not found' },
148
+ ]);
149
+ });
150
+ });
@@ -0,0 +1,85 @@
1
+ import type { ProtonDriveCache, EntityResult } from './interface';
2
+
3
+ type KeyValueCache<T> = { [ key: string ]: T };
4
+ type TagsCache = { [ tag: string ]: string[] };
5
+
6
+ /**
7
+ * In-memory cache implementation for Proton Drive SDK.
8
+ *
9
+ * This cache is not persistent and is intended for mostly for testing or
10
+ * development only. It is not recommended to use this cache in production
11
+ * environments.
12
+ */
13
+ export class MemoryCache<T> implements ProtonDriveCache<T> {
14
+ private entities: KeyValueCache<T> = {};
15
+ private entitiesByTag: TagsCache = {};
16
+
17
+ async clear() {
18
+ this.entities = {};
19
+ }
20
+
21
+ async setEntity(key: string, value: T, tags?: string[]) {
22
+ this.entities[key] = value;
23
+
24
+ for (const tag of Object.keys(this.entitiesByTag)) {
25
+ const index = this.entitiesByTag[tag].indexOf(key);
26
+ if (index !== -1) {
27
+ this.entitiesByTag[tag].splice(index, 1);
28
+ if (this.entitiesByTag[tag].length === 0) {
29
+ delete this.entitiesByTag[tag];
30
+ }
31
+ }
32
+ }
33
+
34
+ if (tags) {
35
+ for (const tag of tags) {
36
+ if (!this.entitiesByTag[tag]) {
37
+ this.entitiesByTag[tag] = [];
38
+ }
39
+ this.entitiesByTag[tag].push(key);
40
+ }
41
+ }
42
+ }
43
+
44
+ async getEntity(key: string) {
45
+ const value = this.entities[key];
46
+ if (!value) {
47
+ throw Error('Entity not found');
48
+ }
49
+ return value;
50
+ }
51
+
52
+ async *iterateEntities(keys: string[]): AsyncGenerator<EntityResult<T>> {
53
+ for (const key of keys) {
54
+ try {
55
+ const value = await this.getEntity(key);
56
+ yield { key, ok: true, value };
57
+ } catch (error) {
58
+ yield { key, ok: false, error: `${error}` };
59
+ }
60
+ }
61
+ }
62
+
63
+ async *iterateEntitiesByTag(tag: string): AsyncGenerator<EntityResult<T>> {
64
+ const keys = this.entitiesByTag[tag];
65
+ if (!keys) {
66
+ return;
67
+ }
68
+
69
+ // Pass copy of keys so concurrent changes to the cache do not affect
70
+ // results from iterating entities.
71
+ yield* this.iterateEntities([...keys]);
72
+ }
73
+
74
+ async removeEntities(keys: string[]) {
75
+ for (const key of keys) {
76
+ delete this.entities[key];
77
+ Object.values(this.entitiesByTag).forEach((tagKeys) => {
78
+ const index = tagKeys.indexOf(key);
79
+ if (index !== -1) {
80
+ tagKeys.splice(index, 1);
81
+ }
82
+ });
83
+ }
84
+ }
85
+ };
package/src/config.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { ProtonDriveConfig } from './interface';
2
+
3
+ export function getConfig(config?: ProtonDriveConfig): Required<ProtonDriveConfig> {
4
+ return {
5
+ ...config,
6
+ baseUrl: config?.baseUrl ? `https://${config.baseUrl}` : 'https://drive-api.proton.me',
7
+ language: config?.language || 'en',
8
+ };
9
+ }
@@ -0,0 +1,45 @@
1
+ import { uint8ArrayToUtf8, arrayToHexString } from "./driveCrypto";
2
+
3
+ describe("uint8ArrayToUtf8", () => {
4
+ it("should convert a Uint8Array to a UTF-8 string", () => {
5
+ const input = new Uint8Array([72, 101, 108, 108, 111]);
6
+ const expectedOutput = "Hello";
7
+ const result = uint8ArrayToUtf8(input);
8
+ expect(result).toBe(expectedOutput);
9
+ });
10
+
11
+ it("should handle an empty Uint8Array", () => {
12
+ const input = new Uint8Array([]);
13
+ const expectedOutput = "";
14
+ const result = uint8ArrayToUtf8(input);
15
+ expect(result).toBe(expectedOutput);
16
+ });
17
+
18
+ it("should throw if input is invalid", () => {
19
+ const input = new Uint8Array([887987979887897989]);
20
+ expect(() => uint8ArrayToUtf8(input)).toThrow("The encoded data was not valid for encoding utf-8");
21
+ });
22
+ });
23
+
24
+ describe("arrayToHexString", () => {
25
+ it("should convert a Uint8Array to a hex string", () => {
26
+ const input = new Uint8Array([0, 255, 16, 32]);
27
+ const expectedOutput = "00ff1020";
28
+ const result = arrayToHexString(input);
29
+ expect(result).toBe(expectedOutput);
30
+ });
31
+
32
+ it("should handle an empty Uint8Array", () => {
33
+ const input = new Uint8Array([]);
34
+ const expectedOutput = "";
35
+ const result = arrayToHexString(input);
36
+ expect(result).toBe(expectedOutput);
37
+ });
38
+
39
+ it("should handle a Uint8Array with one element", () => {
40
+ const input = new Uint8Array([1]);
41
+ const expectedOutput = "01";
42
+ const result = arrayToHexString(input);
43
+ expect(result).toBe(expectedOutput);
44
+ });
45
+ });