@protontech/drive-sdk 0.0.12 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/dist/cache/index.d.ts +1 -0
  2. package/dist/cache/index.js +3 -1
  3. package/dist/cache/index.js.map +1 -1
  4. package/dist/cache/memoryCache.d.ts +1 -1
  5. package/dist/cache/nullCache.d.ts +14 -0
  6. package/dist/cache/nullCache.js +37 -0
  7. package/dist/cache/nullCache.js.map +1 -0
  8. package/dist/config.d.ts +16 -1
  9. package/dist/config.js +1 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/crypto/openPGPCrypto.js +2 -0
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.d.ts +14 -0
  14. package/dist/diagnostic/eventsGenerator.js +49 -0
  15. package/dist/diagnostic/eventsGenerator.js.map +1 -0
  16. package/dist/diagnostic/httpClient.d.ts +16 -0
  17. package/dist/diagnostic/httpClient.js +81 -0
  18. package/dist/diagnostic/httpClient.js.map +1 -0
  19. package/dist/diagnostic/index.d.ts +10 -0
  20. package/dist/diagnostic/index.js +35 -0
  21. package/dist/diagnostic/index.js.map +1 -0
  22. package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
  23. package/dist/diagnostic/integrityVerificationStream.js +56 -0
  24. package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
  25. package/dist/diagnostic/interface.d.ts +102 -0
  26. package/dist/diagnostic/interface.js +3 -0
  27. package/dist/diagnostic/interface.js.map +1 -0
  28. package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
  29. package/dist/diagnostic/sdkDiagnostic.js +216 -0
  30. package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
  31. package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
  32. package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
  33. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
  34. package/dist/diagnostic/telemetry.d.ts +25 -0
  35. package/dist/diagnostic/telemetry.js +70 -0
  36. package/dist/diagnostic/telemetry.js.map +1 -0
  37. package/dist/diagnostic/zipGenerators.d.ts +9 -0
  38. package/dist/diagnostic/zipGenerators.js +64 -0
  39. package/dist/diagnostic/zipGenerators.js.map +1 -0
  40. package/dist/diagnostic/zipGenerators.test.js +144 -0
  41. package/dist/diagnostic/zipGenerators.test.js.map +1 -0
  42. package/dist/errors.d.ts +8 -3
  43. package/dist/errors.js +11 -4
  44. package/dist/errors.js.map +1 -1
  45. package/dist/interface/config.d.ts +26 -0
  46. package/dist/interface/config.js +3 -0
  47. package/dist/interface/config.js.map +1 -0
  48. package/dist/interface/download.d.ts +2 -2
  49. package/dist/interface/events.d.ts +60 -20
  50. package/dist/interface/events.js +11 -1
  51. package/dist/interface/events.js.map +1 -1
  52. package/dist/interface/httpClient.d.ts +0 -14
  53. package/dist/interface/index.d.ts +9 -5
  54. package/dist/interface/index.js +2 -1
  55. package/dist/interface/index.js.map +1 -1
  56. package/dist/interface/nodes.d.ts +21 -1
  57. package/dist/interface/nodes.js +11 -0
  58. package/dist/interface/nodes.js.map +1 -1
  59. package/dist/interface/sharing.d.ts +1 -0
  60. package/dist/interface/upload.d.ts +57 -3
  61. package/dist/internal/apiService/driveTypes.d.ts +1341 -465
  62. package/dist/internal/apiService/errors.js +2 -2
  63. package/dist/internal/apiService/errors.js.map +1 -1
  64. package/dist/internal/apiService/transformers.js +2 -0
  65. package/dist/internal/apiService/transformers.js.map +1 -1
  66. package/dist/internal/asyncIteratorMap.d.ts +15 -0
  67. package/dist/internal/asyncIteratorMap.js +59 -0
  68. package/dist/internal/asyncIteratorMap.js.map +1 -0
  69. package/dist/internal/asyncIteratorMap.test.js +120 -0
  70. package/dist/internal/asyncIteratorMap.test.js.map +1 -0
  71. package/dist/internal/download/apiService.js +32 -31
  72. package/dist/internal/download/apiService.js.map +1 -1
  73. package/dist/internal/download/fileDownloader.d.ts +2 -2
  74. package/dist/internal/download/fileDownloader.js.map +1 -1
  75. package/dist/internal/events/apiService.d.ts +4 -6
  76. package/dist/internal/events/apiService.js +15 -22
  77. package/dist/internal/events/apiService.js.map +1 -1
  78. package/dist/internal/events/coreEventManager.d.ts +7 -10
  79. package/dist/internal/events/coreEventManager.js +19 -36
  80. package/dist/internal/events/coreEventManager.js.map +1 -1
  81. package/dist/internal/events/coreEventManager.test.d.ts +1 -0
  82. package/dist/internal/events/coreEventManager.test.js +87 -0
  83. package/dist/internal/events/coreEventManager.test.js.map +1 -0
  84. package/dist/internal/events/eventManager.d.ts +11 -36
  85. package/dist/internal/events/eventManager.js +59 -105
  86. package/dist/internal/events/eventManager.js.map +1 -1
  87. package/dist/internal/events/eventManager.test.js +167 -82
  88. package/dist/internal/events/eventManager.test.js.map +1 -1
  89. package/dist/internal/events/index.d.ts +13 -33
  90. package/dist/internal/events/index.js +56 -72
  91. package/dist/internal/events/index.js.map +1 -1
  92. package/dist/internal/events/interface.d.ts +59 -14
  93. package/dist/internal/events/interface.js +13 -3
  94. package/dist/internal/events/interface.js.map +1 -1
  95. package/dist/internal/events/volumeEventManager.d.ts +7 -17
  96. package/dist/internal/events/volumeEventManager.js +58 -45
  97. package/dist/internal/events/volumeEventManager.js.map +1 -1
  98. package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
  99. package/dist/internal/events/volumeEventManager.test.js +203 -0
  100. package/dist/internal/events/volumeEventManager.test.js.map +1 -0
  101. package/dist/internal/nodes/apiService.d.ts +2 -2
  102. package/dist/internal/nodes/apiService.js +16 -6
  103. package/dist/internal/nodes/apiService.js.map +1 -1
  104. package/dist/internal/nodes/apiService.test.js +30 -8
  105. package/dist/internal/nodes/apiService.test.js.map +1 -1
  106. package/dist/internal/nodes/cache.d.ts +10 -1
  107. package/dist/internal/nodes/cache.js +18 -0
  108. package/dist/internal/nodes/cache.js.map +1 -1
  109. package/dist/internal/nodes/cache.test.js +1 -0
  110. package/dist/internal/nodes/cache.test.js.map +1 -1
  111. package/dist/internal/nodes/cryptoService.d.ts +1 -1
  112. package/dist/internal/nodes/cryptoService.js.map +1 -1
  113. package/dist/internal/nodes/cryptoService.test.js +34 -0
  114. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  115. package/dist/internal/nodes/events.d.ts +7 -83
  116. package/dist/internal/nodes/events.js +43 -217
  117. package/dist/internal/nodes/events.js.map +1 -1
  118. package/dist/internal/nodes/events.test.js +27 -277
  119. package/dist/internal/nodes/events.test.js.map +1 -1
  120. package/dist/internal/nodes/index.d.ts +3 -4
  121. package/dist/internal/nodes/index.js +5 -5
  122. package/dist/internal/nodes/index.js.map +1 -1
  123. package/dist/internal/nodes/interface.d.ts +3 -1
  124. package/dist/internal/nodes/nodesAccess.d.ts +15 -0
  125. package/dist/internal/nodes/nodesAccess.js +65 -7
  126. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  127. package/dist/internal/nodes/nodesAccess.test.js +132 -93
  128. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  129. package/dist/internal/nodes/nodesManagement.d.ts +1 -3
  130. package/dist/internal/nodes/nodesManagement.js +12 -26
  131. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  132. package/dist/internal/nodes/nodesManagement.test.js +35 -14
  133. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  134. package/dist/internal/shares/cache.d.ts +2 -0
  135. package/dist/internal/shares/cache.js +2 -0
  136. package/dist/internal/shares/cache.js.map +1 -1
  137. package/dist/internal/shares/manager.d.ts +1 -0
  138. package/dist/internal/shares/manager.js +3 -0
  139. package/dist/internal/shares/manager.js.map +1 -1
  140. package/dist/internal/sharing/apiService.js +20 -2
  141. package/dist/internal/sharing/apiService.js.map +1 -1
  142. package/dist/internal/sharing/cryptoService.js +1 -0
  143. package/dist/internal/sharing/cryptoService.js.map +1 -1
  144. package/dist/internal/sharing/events.d.ts +23 -55
  145. package/dist/internal/sharing/events.js +46 -138
  146. package/dist/internal/sharing/events.js.map +1 -1
  147. package/dist/internal/sharing/events.test.js +77 -180
  148. package/dist/internal/sharing/events.test.js.map +1 -1
  149. package/dist/internal/sharing/index.d.ts +4 -5
  150. package/dist/internal/sharing/index.js +5 -5
  151. package/dist/internal/sharing/index.js.map +1 -1
  152. package/dist/internal/sharing/interface.d.ts +3 -0
  153. package/dist/internal/sharing/sharingManagement.d.ts +2 -3
  154. package/dist/internal/sharing/sharingManagement.js +7 -9
  155. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  156. package/dist/internal/sharing/sharingManagement.test.js +9 -39
  157. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  158. package/dist/internal/upload/apiService.d.ts +2 -3
  159. package/dist/internal/upload/apiService.js +7 -4
  160. package/dist/internal/upload/apiService.js.map +1 -1
  161. package/dist/internal/upload/fileUploader.d.ts +49 -53
  162. package/dist/internal/upload/fileUploader.js +91 -395
  163. package/dist/internal/upload/fileUploader.js.map +1 -1
  164. package/dist/internal/upload/fileUploader.test.js +38 -292
  165. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  166. package/dist/internal/upload/index.d.ts +5 -5
  167. package/dist/internal/upload/index.js +23 -44
  168. package/dist/internal/upload/index.js.map +1 -1
  169. package/dist/internal/upload/interface.d.ts +2 -0
  170. package/dist/internal/upload/manager.d.ts +6 -6
  171. package/dist/internal/upload/manager.js +32 -66
  172. package/dist/internal/upload/manager.js.map +1 -1
  173. package/dist/internal/upload/manager.test.js +100 -117
  174. package/dist/internal/upload/manager.test.js.map +1 -1
  175. package/dist/internal/upload/streamUploader.d.ts +62 -0
  176. package/dist/internal/upload/streamUploader.js +440 -0
  177. package/dist/internal/upload/streamUploader.js.map +1 -0
  178. package/dist/internal/upload/streamUploader.test.d.ts +1 -0
  179. package/dist/internal/upload/streamUploader.test.js +358 -0
  180. package/dist/internal/upload/streamUploader.test.js.map +1 -0
  181. package/dist/protonDriveClient.d.ts +22 -165
  182. package/dist/protonDriveClient.js +27 -191
  183. package/dist/protonDriveClient.js.map +1 -1
  184. package/dist/protonDrivePhotosClient.js +3 -2
  185. package/dist/protonDrivePhotosClient.js.map +1 -1
  186. package/package.json +4 -4
  187. package/src/cache/index.ts +1 -0
  188. package/src/cache/memoryCache.ts +1 -1
  189. package/src/cache/nullCache.ts +38 -0
  190. package/src/config.ts +17 -2
  191. package/src/crypto/openPGPCrypto.ts +2 -0
  192. package/src/diagnostic/eventsGenerator.ts +48 -0
  193. package/src/diagnostic/httpClient.ts +80 -0
  194. package/src/diagnostic/index.ts +38 -0
  195. package/src/diagnostic/integrityVerificationStream.ts +56 -0
  196. package/src/diagnostic/interface.ts +158 -0
  197. package/src/diagnostic/sdkDiagnostic.ts +238 -0
  198. package/src/diagnostic/sdkDiagnosticFull.ts +40 -0
  199. package/src/diagnostic/telemetry.ts +71 -0
  200. package/src/diagnostic/zipGenerators.test.ts +177 -0
  201. package/src/diagnostic/zipGenerators.ts +70 -0
  202. package/src/errors.ts +13 -4
  203. package/src/interface/config.ts +28 -0
  204. package/src/interface/download.ts +2 -2
  205. package/src/interface/events.ts +66 -21
  206. package/src/interface/httpClient.ts +0 -16
  207. package/src/interface/index.ts +9 -5
  208. package/src/interface/nodes.ts +32 -12
  209. package/src/interface/sharing.ts +1 -0
  210. package/src/interface/upload.ts +59 -3
  211. package/src/internal/apiService/driveTypes.ts +1341 -465
  212. package/src/internal/apiService/errors.ts +3 -2
  213. package/src/internal/apiService/transformers.ts +2 -0
  214. package/src/internal/asyncIteratorMap.test.ts +150 -0
  215. package/src/internal/asyncIteratorMap.ts +64 -0
  216. package/src/internal/download/apiService.ts +11 -8
  217. package/src/internal/download/fileDownloader.ts +2 -2
  218. package/src/internal/events/apiService.ts +25 -28
  219. package/src/internal/events/coreEventManager.test.ts +101 -0
  220. package/src/internal/events/coreEventManager.ts +20 -45
  221. package/src/internal/events/eventManager.test.ts +201 -88
  222. package/src/internal/events/eventManager.ts +69 -115
  223. package/src/internal/events/index.ts +54 -84
  224. package/src/internal/events/interface.ts +70 -15
  225. package/src/internal/events/volumeEventManager.test.ts +243 -0
  226. package/src/internal/events/volumeEventManager.ts +55 -53
  227. package/src/internal/nodes/apiService.test.ts +36 -7
  228. package/src/internal/nodes/apiService.ts +19 -7
  229. package/src/internal/nodes/cache.test.ts +1 -0
  230. package/src/internal/nodes/cache.ts +21 -2
  231. package/src/internal/nodes/cryptoService.test.ts +38 -0
  232. package/src/internal/nodes/cryptoService.ts +1 -1
  233. package/src/internal/nodes/events.test.ts +29 -335
  234. package/src/internal/nodes/events.ts +45 -253
  235. package/src/internal/nodes/index.ts +6 -8
  236. package/src/internal/nodes/interface.ts +6 -3
  237. package/src/internal/nodes/nodesAccess.test.ts +133 -91
  238. package/src/internal/nodes/nodesAccess.ts +70 -8
  239. package/src/internal/nodes/nodesManagement.test.ts +39 -15
  240. package/src/internal/nodes/nodesManagement.ts +12 -30
  241. package/src/internal/shares/cache.ts +4 -2
  242. package/src/internal/shares/manager.ts +9 -5
  243. package/src/internal/sharing/apiService.ts +25 -2
  244. package/src/internal/sharing/cache.ts +1 -1
  245. package/src/internal/sharing/cryptoService.ts +1 -0
  246. package/src/internal/sharing/events.test.ts +89 -195
  247. package/src/internal/sharing/events.ts +42 -156
  248. package/src/internal/sharing/index.ts +6 -9
  249. package/src/internal/sharing/interface.ts +6 -2
  250. package/src/internal/sharing/sharingManagement.test.ts +10 -40
  251. package/src/internal/sharing/sharingManagement.ts +7 -11
  252. package/src/internal/upload/apiService.ts +5 -6
  253. package/src/internal/upload/fileUploader.test.ts +46 -376
  254. package/src/internal/upload/fileUploader.ts +114 -494
  255. package/src/internal/upload/index.ts +30 -54
  256. package/src/internal/upload/interface.ts +2 -0
  257. package/src/internal/upload/manager.test.ts +107 -124
  258. package/src/internal/upload/manager.ts +48 -80
  259. package/src/internal/upload/streamUploader.test.ts +468 -0
  260. package/src/internal/upload/streamUploader.ts +550 -0
  261. package/src/protonDriveClient.ts +80 -248
  262. package/src/protonDrivePhotosClient.ts +4 -3
  263. package/dist/internal/events/cache.d.ts +0 -28
  264. package/dist/internal/events/cache.js +0 -67
  265. package/dist/internal/events/cache.js.map +0 -1
  266. package/dist/internal/events/cache.test.js +0 -43
  267. package/dist/internal/events/cache.test.js.map +0 -1
  268. package/dist/internal/nodes/index.test.js +0 -112
  269. package/dist/internal/nodes/index.test.js.map +0 -1
  270. package/src/internal/events/cache.test.ts +0 -47
  271. package/src/internal/events/cache.ts +0 -80
  272. package/src/internal/nodes/index.test.ts +0 -135
  273. /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
  274. /package/dist/internal/{nodes/index.test.d.ts → asyncIteratorMap.test.d.ts} +0 -0
@@ -2,7 +2,7 @@ import { getMockLogger } from "../../tests/logger";
2
2
  import { Member, MemberRole, NonProtonInvitation, NonProtonInvitationState, ProtonDriveAccount, ProtonInvitation, PublicLink, resultOk } from "../../interface";
3
3
  import { SharingAPIService } from "./apiService";
4
4
  import { SharingCryptoService } from "./cryptoService";
5
- import { SharesService, NodesService, NodesEvents } from "./interface";
5
+ import { SharesService, NodesService } from "./interface";
6
6
  import { SharingManagement } from "./sharingManagement";
7
7
 
8
8
  describe("SharingManagement", () => {
@@ -11,7 +11,6 @@ describe("SharingManagement", () => {
11
11
  let accountService: ProtonDriveAccount;
12
12
  let sharesService: SharesService;
13
13
  let nodesService: NodesService;
14
- let nodesEvents: NodesEvents;
15
14
 
16
15
  let sharingManagement: SharingManagement;
17
16
 
@@ -82,12 +81,10 @@ describe("SharingManagement", () => {
82
81
  getNodeKeys: jest.fn().mockImplementation((nodeUid) => ({ key: "node-key" })),
83
82
  getNodePrivateAndSessionKeys: jest.fn().mockImplementation((nodeUid) => ({})),
84
83
  getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: "volume-email", addressKey: "volume-key" }),
85
- }
86
- nodesEvents = {
87
- nodeUpdated: jest.fn(),
84
+ notifyNodeChanged: jest.fn(),
88
85
  }
89
86
 
90
- sharingManagement = new SharingManagement(getMockLogger(), apiService, cryptoService, accountService, sharesService, nodesService, nodesEvents);
87
+ sharingManagement = new SharingManagement(getMockLogger(), apiService, cryptoService, accountService, sharesService, nodesService);
91
88
  });
92
89
 
93
90
  describe("getSharingInfo", () => {
@@ -175,6 +172,7 @@ describe("SharingManagement", () => {
175
172
 
176
173
  it("should create share if no exists", async () => {
177
174
  nodesService.getNode = jest.fn().mockImplementation((nodeUid) => ({ nodeUid, parentUid: 'parentUid', name: { ok: true, value: "name" } }));
175
+ nodesService.notifyNodeChanged = jest.fn();
178
176
 
179
177
  const sharingInfo = await sharingManagement.shareNode(nodeUid, { users: ["email"] });
180
178
 
@@ -191,11 +189,7 @@ describe("SharingManagement", () => {
191
189
  });
192
190
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
193
191
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
194
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
195
- uid: nodeUid,
196
- shareId: "newShareId",
197
- isShared: true,
198
- });
192
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalledWith(nodeUid);
199
193
  });
200
194
  })
201
195
 
@@ -264,7 +258,6 @@ describe("SharingManagement", () => {
264
258
  });
265
259
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
266
260
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
267
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
268
261
  });
269
262
 
270
263
  it("should share node with proton email with specific role", async () => {
@@ -283,7 +276,6 @@ describe("SharingManagement", () => {
283
276
  });
284
277
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
285
278
  expect(apiService.inviteProtonUser).toHaveBeenCalled();
286
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
287
279
  });
288
280
 
289
281
  it("should update existing role", async () => {
@@ -300,7 +292,6 @@ describe("SharingManagement", () => {
300
292
  });
301
293
  expect(apiService.updateInvitation).toHaveBeenCalled();
302
294
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
303
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
304
295
  });
305
296
 
306
297
  it("should be no-op if no change", async () => {
@@ -314,7 +305,6 @@ describe("SharingManagement", () => {
314
305
  });
315
306
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
316
307
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
317
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
318
308
  });
319
309
  });
320
310
 
@@ -340,7 +330,6 @@ describe("SharingManagement", () => {
340
330
  });
341
331
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
342
332
  expect(apiService.inviteExternalUser).toHaveBeenCalled();
343
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
344
333
  });
345
334
 
346
335
  it("should share node with external email with specific role", async () => {
@@ -360,7 +349,6 @@ describe("SharingManagement", () => {
360
349
  });
361
350
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
362
351
  expect(apiService.inviteExternalUser).toHaveBeenCalled();
363
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
364
352
  });
365
353
 
366
354
  it("should update existing role", async () => {
@@ -377,7 +365,6 @@ describe("SharingManagement", () => {
377
365
  });
378
366
  expect(apiService.updateExternalInvitation).toHaveBeenCalled();
379
367
  expect(apiService.inviteExternalUser).not.toHaveBeenCalled();
380
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
381
368
  });
382
369
 
383
370
  it("should be no-op if no change", async () => {
@@ -391,7 +378,6 @@ describe("SharingManagement", () => {
391
378
  });
392
379
  expect(apiService.updateExternalInvitation).not.toHaveBeenCalled();
393
380
  expect(apiService.inviteExternalUser).not.toHaveBeenCalled();
394
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
395
381
  });
396
382
  });
397
383
 
@@ -429,7 +415,6 @@ describe("SharingManagement", () => {
429
415
  expect(apiService.inviteExternalUser).toHaveBeenCalledWith("shareId", expect.objectContaining({
430
416
  inviteeEmail: "email2",
431
417
  }), expect.anything());
432
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
433
418
  });
434
419
  });
435
420
 
@@ -449,7 +434,6 @@ describe("SharingManagement", () => {
449
434
  expect(apiService.updateMember).toHaveBeenCalled();
450
435
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
451
436
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
452
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
453
437
  });
454
438
 
455
439
  it("should be no-op if no change via proton user", async () => {
@@ -464,7 +448,6 @@ describe("SharingManagement", () => {
464
448
  expect(apiService.updateMember).not.toHaveBeenCalled();
465
449
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
466
450
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
467
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
468
451
  });
469
452
 
470
453
  it("should update member via non-proton user", async () => {
@@ -482,7 +465,6 @@ describe("SharingManagement", () => {
482
465
  expect(apiService.updateMember).toHaveBeenCalled();
483
466
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
484
467
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
485
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
486
468
  });
487
469
 
488
470
  it("should be no-op if no change via non-proton user", async () => {
@@ -497,7 +479,6 @@ describe("SharingManagement", () => {
497
479
  expect(apiService.updateMember).not.toHaveBeenCalled();
498
480
  expect(apiService.updateInvitation).not.toHaveBeenCalled();
499
481
  expect(apiService.inviteProtonUser).not.toHaveBeenCalled();
500
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
501
482
  });
502
483
  });
503
484
 
@@ -526,6 +507,7 @@ describe("SharingManagement", () => {
526
507
  expirationTime: undefined,
527
508
  customPassword: undefined,
528
509
  creatorEmail: "volume-email",
510
+ numberOfInitializedDownloads: 0,
529
511
  },
530
512
  });
531
513
  expect(cryptoService.generatePublicLinkPassword).toHaveBeenCalled();
@@ -563,6 +545,7 @@ describe("SharingManagement", () => {
563
545
  expirationTime: new Date('2025-01-02'),
564
546
  customPassword: "customPassword",
565
547
  creatorEmail: "volume-email",
548
+ numberOfInitializedDownloads: 0,
566
549
  },
567
550
  });
568
551
  expect(cryptoService.generatePublicLinkPassword).toHaveBeenCalled();
@@ -661,7 +644,7 @@ describe("SharingManagement", () => {
661
644
  });
662
645
  });
663
646
 
664
- describe("unsahreNode", () => {
647
+ describe("unshareNode", () => {
665
648
  const nodeUid = "volumeId~nodeUid";
666
649
 
667
650
  let invitation: ProtonInvitation;
@@ -697,6 +680,7 @@ describe("SharingManagement", () => {
697
680
  creationTime: new Date(),
698
681
  role: MemberRole.Viewer,
699
682
  url: "url",
683
+ numberOfInitializedDownloads: 0,
700
684
  }
701
685
 
702
686
  apiService.getShareInvitations = jest.fn().mockResolvedValue([
@@ -725,7 +709,6 @@ describe("SharingManagement", () => {
725
709
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
726
710
  expect(apiService.removeMember).not.toHaveBeenCalled();
727
711
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
728
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
729
712
  });
730
713
 
731
714
  it("should delete external invitation", async () => {
@@ -742,7 +725,6 @@ describe("SharingManagement", () => {
742
725
  expect(apiService.deleteExternalInvitation).toHaveBeenCalled();
743
726
  expect(apiService.removeMember).not.toHaveBeenCalled();
744
727
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
745
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
746
728
  });
747
729
 
748
730
  it("should remove member", async () => {
@@ -759,7 +741,6 @@ describe("SharingManagement", () => {
759
741
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
760
742
  expect(apiService.removeMember).toHaveBeenCalled();
761
743
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
762
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
763
744
  });
764
745
 
765
746
  it("should be no-op if not shared with email", async () => {
@@ -776,7 +757,6 @@ describe("SharingManagement", () => {
776
757
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
777
758
  expect(apiService.removeMember).not.toHaveBeenCalled();
778
759
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
779
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
780
760
  });
781
761
 
782
762
  it("should remove public link", async () => {
@@ -793,7 +773,6 @@ describe("SharingManagement", () => {
793
773
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
794
774
  expect(apiService.removeMember).not.toHaveBeenCalled();
795
775
  expect(apiService.removePublicLink).toHaveBeenCalled();
796
- expect(nodesEvents.nodeUpdated).not.toHaveBeenCalled();
797
776
  });
798
777
 
799
778
  it("should remove share if all is removed", async () => {
@@ -805,11 +784,7 @@ describe("SharingManagement", () => {
805
784
  expect(apiService.deleteExternalInvitation).not.toHaveBeenCalled();
806
785
  expect(apiService.removeMember).not.toHaveBeenCalled();
807
786
  expect(apiService.removePublicLink).not.toHaveBeenCalled();
808
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
809
- uid: nodeUid,
810
- shareId: undefined,
811
- isShared: false,
812
- });
787
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalled();
813
788
  });
814
789
 
815
790
  it("should remove share if everything is manually removed", async () => {
@@ -824,11 +799,6 @@ describe("SharingManagement", () => {
824
799
  expect(apiService.deleteExternalInvitation).toHaveBeenCalled();
825
800
  expect(apiService.removeMember).toHaveBeenCalled();
826
801
  expect(apiService.removePublicLink).toHaveBeenCalled();
827
- expect(nodesEvents.nodeUpdated).toHaveBeenCalledWith({
828
- uid: nodeUid,
829
- shareId: undefined,
830
- isShared: false,
831
- });
832
802
  });
833
803
  });
834
804
 
@@ -7,7 +7,7 @@ import { splitNodeUid } from "../uids";
7
7
  import { getErrorMessage } from '../errors';
8
8
  import { SharingAPIService } from "./apiService";
9
9
  import { PUBLIC_LINK_GENERATED_PASSWORD_LENGTH, SharingCryptoService } from "./cryptoService";
10
- import { SharesService, NodesService, NodesEvents, ShareResultWithCreatorEmail, PublicLinkWithCreatorEmail } from "./interface";
10
+ import { SharesService, NodesService, ShareResultWithCreatorEmail, PublicLinkWithCreatorEmail } from "./interface";
11
11
 
12
12
  interface InternalShareResult extends ShareResultWithCreatorEmail {
13
13
  share: Share;
@@ -40,7 +40,6 @@ export class SharingManagement {
40
40
  private account: ProtonDriveAccount,
41
41
  private sharesService: SharesService,
42
42
  private nodesService: NodesService,
43
- private nodesEvents: NodesEvents,
44
43
  ) {
45
44
  this.logger = logger;
46
45
  this.apiService = apiService;
@@ -48,7 +47,6 @@ export class SharingManagement {
48
47
  this.account = account;
49
48
  this.sharesService = sharesService;
50
49
  this.nodesService = nodesService;
51
- this.nodesEvents = nodesEvents;
52
50
  }
53
51
 
54
52
  async getSharingInfo(nodeUid: string): Promise<ShareResultWithCreatorEmail | undefined> {
@@ -239,7 +237,7 @@ export class SharingManagement {
239
237
 
240
238
  if (!settings) {
241
239
  this.logger.info(`Unsharing node ${nodeUid}`);
242
- await this.deleteShare(nodeUid, currentSharing.share.shareId);
240
+ await this.deleteShare(currentSharing.share.shareId, nodeUid);
243
241
  return;
244
242
  }
245
243
 
@@ -293,7 +291,7 @@ export class SharingManagement {
293
291
  // update local state immediately.
294
292
  this.logger.info(`Deleting share ${currentSharing.share.shareId} for node ${nodeUid}`);
295
293
  try {
296
- await this.deleteShare(nodeUid, currentSharing.share.shareId);
294
+ await this.deleteShare(currentSharing.share.shareId, nodeUid);
297
295
  } catch (error: unknown) {
298
296
  // If deleting the share fails, we don't want to throw an error
299
297
  // as it might be a race condition that other client updated
@@ -359,9 +357,7 @@ export class SharingManagement {
359
357
  base64NameKeyPacket: keys.base64NameKeyPacket,
360
358
  },
361
359
  );
362
-
363
- await this.nodesEvents.nodeUpdated({ uid: nodeUid, shareId, isShared: true });
364
-
360
+ await this.nodesService.notifyNodeChanged(nodeUid);
365
361
  return {
366
362
  volumeId,
367
363
  shareId,
@@ -370,10 +366,9 @@ export class SharingManagement {
370
366
  }
371
367
  }
372
368
 
373
- private async deleteShare(nodeUid: string, shareId: string): Promise<void> {
369
+ private async deleteShare(shareId: string, nodeUid: string): Promise<void> {
374
370
  await this.apiService.deleteShare(shareId);
375
-
376
- await this.nodesEvents.nodeUpdated({ uid: nodeUid, shareId: undefined, isShared: false });
371
+ await this.nodesService.notifyNodeChanged(nodeUid);
377
372
  }
378
373
 
379
374
  private async inviteProtonUser(share: Share, inviteeEmail: string, role: MemberRole, emailOptions: EmailOptions): Promise<ProtonInvitation> {
@@ -486,6 +481,7 @@ export class SharingManagement {
486
481
  url: `${publicLink.publicUrl}#${generatedPassword}`,
487
482
  customPassword: options.customPassword,
488
483
  expirationTime: options.expiration,
484
+ numberOfInitializedDownloads: 0,
489
485
  creatorEmail,
490
486
  }
491
487
  }
@@ -27,8 +27,9 @@ type PostDeleteNodesRequest = Extract<drivePaths['/drive/v2/volumes/{volumeID}/d
27
27
  type PostDeleteNodesResponse = drivePaths['/drive/v2/volumes/{volumeID}/delete_multiple']['post']['responses']['200']['content']['application/json'];
28
28
 
29
29
  export class UploadAPIService {
30
- constructor(private apiService: DriveAPIService) {
30
+ constructor(private apiService: DriveAPIService, private clientUid: string | undefined) {
31
31
  this.apiService = apiService;
32
+ this.clientUid = clientUid;
32
33
  }
33
34
 
34
35
  async checkAvailableHashes(parentNodeUid: string, hashes: string[]): Promise<{
@@ -46,7 +47,7 @@ export class UploadAPIService {
46
47
  PostCheckAvailableHashesResponse
47
48
  >(`drive/v2/volumes/${volumeId}/links/${parentNodeId}/checkAvailableHashes`, {
48
49
  Hashes: hashes,
49
- ClientUID: null,
50
+ ClientUID: this.clientUid ? [this.clientUid] : null,
50
51
  });
51
52
 
52
53
  return {
@@ -64,7 +65,6 @@ export class UploadAPIService {
64
65
  armoredEncryptedName: string,
65
66
  hash: string,
66
67
  mediaType: string,
67
- clientUID?: string,
68
68
  intendedUploadSize?: number,
69
69
  armoredNodeKey: string,
70
70
  armoredNodePassphrase: string,
@@ -85,7 +85,7 @@ export class UploadAPIService {
85
85
  Name: node.armoredEncryptedName,
86
86
  Hash: node.hash,
87
87
  MIMEType: node.mediaType,
88
- ClientUID: node.clientUID || null,
88
+ ClientUID: this.clientUid || null,
89
89
  IntendedUploadSize: node.intendedUploadSize || null,
90
90
  NodeKey: node.armoredNodeKey,
91
91
  NodePassphrase: node.armoredNodePassphrase,
@@ -103,7 +103,6 @@ export class UploadAPIService {
103
103
 
104
104
  async createDraftRevision(nodeUid: string, revision: {
105
105
  currentRevisionUid: string,
106
- clientUID?: string,
107
106
  intendedUploadSize?: number,
108
107
  }): Promise<{
109
108
  nodeRevisionUid: string,
@@ -116,7 +115,7 @@ export class UploadAPIService {
116
115
  PostCreateDraftRevisionResponse
117
116
  >(`drive/v2/volumes/${volumeId}/files/${nodeId}/revisions`, {
118
117
  CurrentRevisionID: currentRevisionId,
119
- ClientUID: revision.clientUID || null,
118
+ ClientUID: this.clientUid || null,
120
119
  IntendedUploadSize: revision.intendedUploadSize || null,
121
120
  });
122
121