@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
@@ -3,316 +3,66 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const logger_1 = require("../../tests/logger");
4
4
  const events_1 = require("../events");
5
5
  const events_2 = require("./events");
6
- describe("updateCacheByEvent", () => {
6
+ describe("NodesEventsHandler", () => {
7
7
  const logger = (0, logger_1.getMockLogger)();
8
8
  let cache;
9
+ let nodesEventsNodesEventsHandler;
9
10
  beforeEach(() => {
10
11
  jest.clearAllMocks();
11
12
  // @ts-expect-error No need to implement all methods for mocking
12
13
  cache = {
13
14
  getNode: jest.fn(() => Promise.resolve({
14
- uid: '123',
15
- parentUid: 'parentUid',
16
- name: { ok: true, value: 'name' },
15
+ uid: "nodeUid123",
16
+ parentUid: "parentUid",
17
+ name: { ok: true, value: "name" },
17
18
  })),
18
19
  setNode: jest.fn(),
19
20
  removeNodes: jest.fn(),
20
21
  resetFolderChildrenLoaded: jest.fn(),
21
22
  };
23
+ nodesEventsNodesEventsHandler = new events_2.NodesEventsHandler(logger, cache);
22
24
  });
23
- describe('NodeCreated event', () => {
25
+ it("should unset the parent listing complete status when a `NodeCreated` event is received.", async () => {
24
26
  const event = {
27
+ eventId: "event1",
25
28
  type: events_1.DriveEventType.NodeCreated,
26
29
  nodeUid: "nodeUid",
27
30
  parentNodeUid: "parentUid",
28
31
  isTrashed: false,
29
32
  isShared: false,
30
- isOwnVolume: true,
33
+ treeEventScopeId: "volume1",
31
34
  };
32
- it("should not update cache by node create event", async () => {
33
- await (0, events_2.updateCacheByEvent)(logger, event, cache);
34
- expect(cache.getNode).toHaveBeenCalledTimes(0);
35
- expect(cache.setNode).toHaveBeenCalledTimes(0);
36
- });
37
- it("should reset parent loaded state", async () => {
38
- await (0, events_2.updateCacheByEvent)(logger, event, cache);
39
- expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledWith('parentUid');
40
- });
41
- it("should skip reset parent loaded state if parent missing", async () => {
42
- await (0, events_2.updateCacheByEvent)(logger, { ...event, parentNodeUid: undefined }, cache);
43
- expect(cache.resetFolderChildrenLoaded).not.toHaveBeenCalled();
44
- });
35
+ await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
36
+ expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledTimes(1);
37
+ expect(cache.resetFolderChildrenLoaded).toHaveBeenCalledWith("parentUid");
38
+ expect(cache.setNode).toHaveBeenCalledTimes(0);
45
39
  });
46
- describe('NodeUpdated event', () => {
40
+ it("should update the node metadata when a `NodeUpdated` event is received.", async () => {
47
41
  const event = {
48
42
  type: events_1.DriveEventType.NodeUpdated,
49
- nodeUid: "nodeUid",
43
+ eventId: "event1",
44
+ nodeUid: "nodeUid123",
50
45
  parentNodeUid: "parentUid",
51
46
  isTrashed: false,
52
47
  isShared: false,
53
- isOwnVolume: true,
48
+ treeEventScopeId: "volume1",
54
49
  };
55
- it("should update cache if present in cache", async () => {
56
- await (0, events_2.updateCacheByEvent)(logger, event, cache);
57
- expect(cache.getNode).toHaveBeenCalledTimes(1);
58
- expect(cache.setNode).toHaveBeenCalledTimes(1);
59
- expect(cache.setNode).toHaveBeenCalledWith(expect.objectContaining({ uid: '123', isStale: true, parentUid: "parentUid" }));
60
- });
61
- it("should skip if missing in cache", async () => {
62
- cache.getNode = jest.fn(() => Promise.reject(new Error('Missing in the cache')));
63
- await (0, events_2.updateCacheByEvent)(logger, event, cache);
64
- expect(cache.getNode).toHaveBeenCalledTimes(1);
65
- expect(cache.setNode).toHaveBeenCalledTimes(0);
66
- });
67
- it("should remove from cache if not possible to set", async () => {
68
- cache.setNode = jest.fn(() => Promise.reject(new Error('Cannot set node')));
69
- await (0, events_2.updateCacheByEvent)(logger, event, cache);
70
- expect(cache.getNode).toHaveBeenCalledTimes(1);
71
- expect(cache.removeNodes).toHaveBeenCalledTimes(1);
72
- });
73
- it("should throw if remove fails", async () => {
74
- cache.setNode = jest.fn(() => Promise.reject(new Error('Cannot set node')));
75
- cache.removeNodes = jest.fn(() => Promise.reject(new Error('Cannot remove node')));
76
- await expect((0, events_2.updateCacheByEvent)(logger, event, cache)).rejects.toThrow('Cannot set node');
77
- });
50
+ await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
51
+ expect(cache.getNode).toHaveBeenCalledTimes(1);
52
+ expect(cache.setNode).toHaveBeenCalledTimes(1);
53
+ expect(cache.setNode).toHaveBeenCalledWith(expect.objectContaining({ uid: 'nodeUid123', isStale: true, parentUid: "parentUid", trashTime: undefined, isShared: false }));
78
54
  });
79
- describe('NodeDeleted event', () => {
55
+ it("should remove node from cache", async () => {
80
56
  const event = {
81
57
  type: events_1.DriveEventType.NodeDeleted,
82
- nodeUid: "nodeUid",
58
+ eventId: "event1",
59
+ nodeUid: "nodeUid123",
83
60
  parentNodeUid: "parentUid",
84
- isOwnVolume: true,
85
- };
86
- it("should remove node from cache", async () => {
87
- await (0, events_2.deleteFromCacheByEvent)(logger, event, cache);
88
- expect(cache.removeNodes).toHaveBeenCalledTimes(1);
89
- expect(cache.removeNodes).toHaveBeenCalledWith([event.nodeUid]);
90
- });
91
- });
92
- });
93
- describe("notifyListenersByEvent", () => {
94
- const logger = (0, logger_1.getMockLogger)();
95
- let cache;
96
- let nodesAccess;
97
- beforeEach(() => {
98
- jest.clearAllMocks();
99
- // @ts-expect-error No need to implement all methods for mocking
100
- cache = {
101
- getNode: jest.fn(() => Promise.resolve({
102
- uid: '123',
103
- parentUid: 'parentUid',
104
- name: { ok: true, value: 'name' },
105
- })),
106
- };
107
- // @ts-expect-error No need to implement all methods for mocking
108
- nodesAccess = {
109
- getNode: jest.fn(() => Promise.resolve({ uid: 'nodeUid', name: { ok: true, value: 'name' } })),
110
- };
111
- });
112
- describe('update event', () => {
113
- it("should notify listeners by parentNodeUid when there is update", async () => {
114
- const event = {
115
- type: events_1.DriveEventType.NodeUpdated,
116
- nodeUid: "nodeUid",
117
- parentNodeUid: "parentUid",
118
- isTrashed: false,
119
- isShared: false,
120
- isOwnVolume: true,
121
- };
122
- const listener = jest.fn();
123
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ parentNodeUid }) => parentNodeUid === 'parentUid', callback: listener }], cache, nodesAccess);
124
- expect(listener).toHaveBeenCalledTimes(1);
125
- expect(listener).toHaveBeenCalledWith(expect.objectContaining({ type: 'update', uid: 'nodeUid' }));
126
- expect(nodesAccess.getNode).toHaveBeenCalledTimes(1);
127
- expect(cache.getNode).toHaveBeenCalledTimes(0);
128
- });
129
- it("should notify listeners by parentNodeUid when it is moved to another parent", async () => {
130
- const event = {
131
- type: events_1.DriveEventType.NodeUpdated,
132
- nodeUid: "nodeUid",
133
- parentNodeUid: "newParentUid",
134
- isTrashed: false,
135
- isShared: false,
136
- isOwnVolume: true,
137
- };
138
- const listener = jest.fn();
139
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ parentNodeUid }) => parentNodeUid === 'parentUid', callback: listener }], cache, nodesAccess);
140
- expect(listener).toHaveBeenCalledTimes(1);
141
- expect(listener).toHaveBeenCalledWith(expect.objectContaining({ type: 'remove', uid: 'nodeUid' }));
142
- expect(nodesAccess.getNode).toHaveBeenCalledTimes(0);
143
- expect(cache.getNode).toHaveBeenCalledTimes(1);
144
- });
145
- it("should notify listeners by isTrashed when there is update", async () => {
146
- const event = {
147
- type: events_1.DriveEventType.NodeUpdated,
148
- nodeUid: "nodeUid",
149
- parentNodeUid: "parentUid",
150
- isTrashed: true,
151
- isShared: false,
152
- isOwnVolume: true,
153
- };
154
- const listener = jest.fn();
155
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ isTrashed }) => !!isTrashed, callback: listener }], cache, nodesAccess);
156
- expect(listener).toHaveBeenCalledTimes(1);
157
- expect(listener).toHaveBeenCalledWith(expect.objectContaining({ type: 'update', uid: 'nodeUid' }));
158
- expect(nodesAccess.getNode).toHaveBeenCalledTimes(1);
159
- expect(cache.getNode).toHaveBeenCalledTimes(0);
160
- });
161
- it("should notify listeners by isTrashed when it is moved out of trash", async () => {
162
- cache.getNode = jest.fn(() => Promise.resolve({
163
- uid: '123',
164
- parentUid: 'parentUid',
165
- name: { ok: true, value: 'name' },
166
- trashTime: new Date(),
167
- }));
168
- const event = {
169
- type: events_1.DriveEventType.NodeUpdated,
170
- nodeUid: "nodeUid",
171
- parentNodeUid: "parentUid",
172
- isTrashed: false,
173
- isShared: false,
174
- isOwnVolume: true,
175
- };
176
- const listener = jest.fn();
177
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ isTrashed }) => !!isTrashed, callback: listener }], cache, nodesAccess);
178
- expect(listener).toHaveBeenCalledTimes(1);
179
- expect(listener).toHaveBeenCalledWith(expect.objectContaining({ type: 'remove', uid: 'nodeUid' }));
180
- expect(nodesAccess.getNode).toHaveBeenCalledTimes(0);
181
- expect(cache.getNode).toHaveBeenCalledTimes(1);
182
- });
183
- it("should not notify listeners if neither condition match", async () => {
184
- const event = {
185
- type: events_1.DriveEventType.NodeUpdated,
186
- nodeUid: "nodeUid",
187
- parentNodeUid: "parentUid",
188
- isTrashed: false,
189
- isShared: false,
190
- isOwnVolume: true,
191
- };
192
- const listener = jest.fn();
193
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ parentNodeUid }) => parentNodeUid === 'lalalala', callback: listener }], cache, nodesAccess);
194
- expect(listener).toHaveBeenCalledTimes(0);
195
- expect(nodesAccess.getNode).toHaveBeenCalledTimes(0);
196
- });
197
- });
198
- describe('delete event', () => {
199
- it("should notify listeners by parentNodeUid", async () => {
200
- const event = {
201
- type: events_1.DriveEventType.NodeDeleted,
202
- nodeUid: "nodeUid",
203
- parentNodeUid: "parentUid",
204
- isOwnVolume: true,
205
- };
206
- const listener = jest.fn();
207
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ parentNodeUid }) => parentNodeUid === 'parentUid', callback: listener }], cache, nodesAccess);
208
- expect(listener).toHaveBeenCalledTimes(1);
209
- expect(listener).toHaveBeenCalledWith({ type: 'remove', uid: 'nodeUid' });
210
- });
211
- it("should notify listeners by isTrashed from cache", async () => {
212
- cache.getNode = jest.fn(() => Promise.resolve({ uid: 'nodeUid', trashTime: new Date() }));
213
- const event = {
214
- type: events_1.DriveEventType.NodeDeleted,
215
- nodeUid: "nodeUid",
216
- parentNodeUid: "parentUid",
217
- isOwnVolume: true,
218
- };
219
- const listener = jest.fn();
220
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ isTrashed }) => !!isTrashed, callback: listener }], cache, nodesAccess);
221
- expect(listener).toHaveBeenCalledTimes(1);
222
- expect(listener).toHaveBeenCalledWith({ type: 'remove', uid: 'nodeUid' });
223
- });
224
- it("should not notify listeners if cache is missing node", async () => {
225
- cache.getNode = jest.fn(() => Promise.reject(new Error('Missing in the cache')));
226
- const event = {
227
- type: events_1.DriveEventType.NodeDeleted,
228
- nodeUid: "nodeUid",
229
- parentNodeUid: "parentUid",
230
- isOwnVolume: true,
231
- };
232
- const listener = jest.fn();
233
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ isTrashed }) => !!isTrashed, callback: listener }], cache, nodesAccess);
234
- expect(listener).toHaveBeenCalledTimes(0);
235
- });
236
- it("should not notify listeners if neither condition match", async () => {
237
- const event = {
238
- type: events_1.DriveEventType.NodeDeleted,
239
- nodeUid: "nodeUid",
240
- parentNodeUid: "parentUid",
241
- isOwnVolume: true,
242
- };
243
- const listener = jest.fn();
244
- await (0, events_2.notifyListenersByEvent)(logger, event, [{ condition: ({ parentNodeUid }) => parentNodeUid === 'lalalala', callback: listener }], cache, nodesAccess);
245
- expect(listener).toHaveBeenCalledTimes(0);
246
- });
247
- });
248
- });
249
- describe("NodesEvents integration", () => {
250
- const logger = (0, logger_1.getMockLogger)();
251
- let eventsService;
252
- let eventsServiceCallback;
253
- let cache;
254
- let nodesAccess;
255
- let listener;
256
- let events;
257
- beforeEach(() => {
258
- jest.clearAllMocks();
259
- // @ts-expect-error No need to implement all methods for mocking
260
- eventsService = {
261
- addListener: jest.fn((callback) => {
262
- eventsServiceCallback = callback;
263
- }),
61
+ treeEventScopeId: "volume1",
264
62
  };
265
- // @ts-expect-error No need to implement all methods for mocking
266
- cache = {
267
- getNode: jest.fn(() => Promise.resolve({
268
- uid: 'nodeUid',
269
- parentUid: 'parentUid',
270
- name: { ok: true, value: 'name' },
271
- trashTime: new Date(),
272
- })),
273
- setNode: jest.fn(),
274
- removeNodes: jest.fn(),
275
- };
276
- // @ts-expect-error No need to implement all methods for mocking
277
- nodesAccess = {
278
- getNode: jest.fn(() => Promise.resolve({
279
- uid: 'nodeUid',
280
- parentUid: 'parentUid',
281
- name: { ok: true, value: 'name' },
282
- })),
283
- };
284
- listener = jest.fn();
285
- events = new events_2.NodesEvents(logger, eventsService, cache, nodesAccess);
286
- events.subscribeToTrashedNodes(listener);
287
- });
288
- it("should send remove to trash listener when node is restored from trash", async () => {
289
- await eventsServiceCallback([{
290
- type: events_1.DriveEventType.NodeUpdated,
291
- nodeUid: "nodeUid",
292
- parentNodeUid: "parentUid",
293
- isTrashed: false,
294
- isShared: false,
295
- isOwnVolume: true,
296
- }]);
297
- expect(listener).toHaveBeenCalledTimes(1);
298
- expect(listener).toHaveBeenCalledWith({ type: 'remove', uid: 'nodeUid' });
299
- expect(cache.setNode).toHaveBeenCalledTimes(1);
300
- expect(cache.setNode).toHaveBeenCalledWith(expect.objectContaining({ uid: 'nodeUid', isStale: true }));
301
- });
302
- it("should send remove to trash listener when node is deleted", async () => {
303
- await eventsServiceCallback([{
304
- type: events_1.DriveEventType.NodeDeleted,
305
- nodeUid: "nodeUid",
306
- parentNodeUid: "parentUid",
307
- isTrashed: false,
308
- isShared: false,
309
- isOwnVolume: true,
310
- }]);
311
- expect(listener).toHaveBeenCalledTimes(1);
312
- expect(listener).toHaveBeenCalledWith({ type: 'remove', uid: 'nodeUid' });
313
- expect(cache.setNode).toHaveBeenCalledTimes(0);
63
+ await nodesEventsNodesEventsHandler.updateNodesCacheOnEvent(event);
314
64
  expect(cache.removeNodes).toHaveBeenCalledTimes(1);
315
- expect(cache.removeNodes).toHaveBeenCalledWith(['nodeUid']);
65
+ expect(cache.removeNodes).toHaveBeenCalledWith([event.nodeUid]);
316
66
  });
317
67
  });
318
68
  //# sourceMappingURL=events.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../src/internal/nodes/events.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../src/internal/nodes/events.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import { DriveAPIService } from "../apiService";
2
2
  import { DriveCrypto } from "../../crypto";
3
- import { DriveEventsService } from "../events";
4
3
  import { ProtonDriveEntitiesCache, ProtonDriveCryptoCache, ProtonDriveAccount, ProtonDriveTelemetry } from "../../interface";
5
- import { NodesEvents } from "./events";
6
4
  import { SharesService } from "./interface";
7
5
  import { NodesAccess } from "./nodesAccess";
8
6
  import { NodesManagement } from "./nodesManagement";
9
7
  import { NodesRevisons } from "./nodesRevisions";
8
+ import { NodesEventsHandler } from "./events";
10
9
  export type { DecryptedNode, DecryptedRevision } from "./interface";
11
10
  export { generateFileExtendedAttributes } from "./extendedAttributes";
12
11
  /**
@@ -18,9 +17,9 @@ export { generateFileExtendedAttributes } from "./extendedAttributes";
18
17
  * This facade provides internal interface that other modules can use to
19
18
  * interact with the nodes.
20
19
  */
21
- export declare function initNodesModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveEntitiesCache: ProtonDriveEntitiesCache, driveCryptoCache: ProtonDriveCryptoCache, account: ProtonDriveAccount, driveCrypto: DriveCrypto, driveEvents: DriveEventsService, sharesService: SharesService): {
20
+ export declare function initNodesModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveEntitiesCache: ProtonDriveEntitiesCache, driveCryptoCache: ProtonDriveCryptoCache, account: ProtonDriveAccount, driveCrypto: DriveCrypto, sharesService: SharesService): {
22
21
  access: NodesAccess;
23
22
  management: NodesManagement;
24
23
  revisions: NodesRevisons;
25
- events: NodesEvents;
24
+ eventHandler: NodesEventsHandler;
26
25
  };
@@ -4,12 +4,12 @@ exports.generateFileExtendedAttributes = void 0;
4
4
  exports.initNodesModule = initNodesModule;
5
5
  const apiService_1 = require("./apiService");
6
6
  const cache_1 = require("./cache");
7
- const events_1 = require("./events");
8
7
  const cryptoCache_1 = require("./cryptoCache");
9
8
  const cryptoService_1 = require("./cryptoService");
10
9
  const nodesAccess_1 = require("./nodesAccess");
11
10
  const nodesManagement_1 = require("./nodesManagement");
12
11
  const nodesRevisions_1 = require("./nodesRevisions");
12
+ const events_1 = require("./events");
13
13
  var extendedAttributes_1 = require("./extendedAttributes");
14
14
  Object.defineProperty(exports, "generateFileExtendedAttributes", { enumerable: true, get: function () { return extendedAttributes_1.generateFileExtendedAttributes; } });
15
15
  /**
@@ -21,20 +21,20 @@ Object.defineProperty(exports, "generateFileExtendedAttributes", { enumerable: t
21
21
  * This facade provides internal interface that other modules can use to
22
22
  * interact with the nodes.
23
23
  */
24
- function initNodesModule(telemetry, apiService, driveEntitiesCache, driveCryptoCache, account, driveCrypto, driveEvents, sharesService) {
24
+ function initNodesModule(telemetry, apiService, driveEntitiesCache, driveCryptoCache, account, driveCrypto, sharesService) {
25
25
  const api = new apiService_1.NodeAPIService(telemetry.getLogger('nodes-api'), apiService);
26
26
  const cache = new cache_1.NodesCache(telemetry.getLogger('nodes-cache'), driveEntitiesCache);
27
27
  const cryptoCache = new cryptoCache_1.NodesCryptoCache(telemetry.getLogger('nodes-cache'), driveCryptoCache);
28
28
  const cryptoService = new cryptoService_1.NodesCryptoService(telemetry, driveCrypto, account, sharesService);
29
29
  const nodesAccess = new nodesAccess_1.NodesAccess(telemetry.getLogger('nodes'), api, cache, cryptoCache, cryptoService, sharesService);
30
- const nodesEvents = new events_1.NodesEvents(telemetry.getLogger('nodes-events'), driveEvents, cache, nodesAccess);
31
- const nodesManagement = new nodesManagement_1.NodesManagement(api, cryptoCache, cryptoService, nodesAccess, nodesEvents);
30
+ const nodesEventHandler = new events_1.NodesEventsHandler(telemetry.getLogger('nodes-events'), cache);
31
+ const nodesManagement = new nodesManagement_1.NodesManagement(api, cryptoCache, cryptoService, nodesAccess);
32
32
  const nodesRevisions = new nodesRevisions_1.NodesRevisons(telemetry.getLogger('nodes'), api, cryptoService, nodesAccess);
33
33
  return {
34
34
  access: nodesAccess,
35
35
  management: nodesManagement,
36
36
  revisions: nodesRevisions,
37
- events: nodesEvents,
37
+ eventHandler: nodesEventHandler,
38
38
  };
39
39
  }
40
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/nodes/index.ts"],"names":[],"mappings":";;;AA0BA,0CAyBC;AA/CD,6CAA8C;AAC9C,mCAAqC;AACrC,qCAAuC;AACvC,+CAAiD;AACjD,mDAAqD;AAErD,+CAA4C;AAC5C,uDAAoD;AACpD,qDAAiD;AAGjD,2DAAsE;AAA7D,oIAAA,8BAA8B,OAAA;AAEvC;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC3B,SAA+B,EAC/B,UAA2B,EAC3B,kBAA4C,EAC5C,gBAAwC,EACxC,OAA2B,EAC3B,WAAwB,EACxB,WAA+B,EAC/B,aAA4B;IAE5B,MAAM,GAAG,GAAG,IAAI,2BAAc,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,kBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrF,MAAM,WAAW,GAAG,IAAI,8BAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,IAAI,kCAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACzH,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1G,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACvG,MAAM,cAAc,GAAG,IAAI,8BAAa,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAExG,OAAO;QACH,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,WAAW;KACtB,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/nodes/index.ts"],"names":[],"mappings":";;;AAyBA,0CAwBC;AA9CD,6CAA8C;AAC9C,mCAAqC;AACrC,+CAAiD;AACjD,mDAAqD;AAErD,+CAA4C;AAC5C,uDAAoD;AACpD,qDAAiD;AACjD,qCAA8C;AAG9C,2DAAsE;AAA7D,oIAAA,8BAA8B,OAAA;AAEvC;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC3B,SAA+B,EAC/B,UAA2B,EAC3B,kBAA4C,EAC5C,gBAAwC,EACxC,OAA2B,EAC3B,WAAwB,EACxB,aAA4B;IAE5B,MAAM,GAAG,GAAG,IAAI,2BAAc,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,kBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrF,MAAM,WAAW,GAAG,IAAI,8BAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,IAAI,kCAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACzH,MAAM,iBAAiB,GAAG,IAAI,2BAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7F,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,IAAI,8BAAa,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAExG,OAAO;QACH,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,cAAc;QACzB,YAAY,EAAE,iBAAiB;KAClC,CAAC;AACN,CAAC"}
@@ -23,7 +23,7 @@ interface BaseNode {
23
23
  * Outside of the module, the decrypted node interface should be used.
24
24
  */
25
25
  export interface EncryptedNode extends BaseNode {
26
- encryptedCrypto: EncryptedNodeFolderCrypto | EncryptedNodeFileCrypto;
26
+ encryptedCrypto: EncryptedNodeFolderCrypto | EncryptedNodeFileCrypto | EncryptedNodeAlbumCrypto;
27
27
  }
28
28
  export interface EncryptedNodeCrypto {
29
29
  signatureEmail?: string;
@@ -45,6 +45,8 @@ export interface EncryptedNodeFolderCrypto extends EncryptedNodeCrypto {
45
45
  armoredHashKey: string;
46
46
  };
47
47
  }
48
+ export interface EncryptedNodeAlbumCrypto extends EncryptedNodeCrypto {
49
+ }
48
50
  /**
49
51
  * Interface used only internally in the nodes module.
50
52
  *
@@ -24,6 +24,21 @@ export declare class NodesAccess {
24
24
  iterateFolderChildren(parentNodeUid: string, signal?: AbortSignal): AsyncGenerator<DecryptedNode>;
25
25
  iterateTrashedNodes(signal?: AbortSignal): AsyncGenerator<DecryptedNode>;
26
26
  iterateNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode>;
27
+ /**
28
+ * Call to invalidate the folder listing cache. This should be refactored into a clean
29
+ * cache layer once the cache is split off.
30
+ */
31
+ notifyChildCreated(nodeUid: string): Promise<void>;
32
+ /**
33
+ * Call to invalidate the node cache when a node changes. Parent can be set after a move
34
+ * to ensure parent listing of new parent is up to date if cached.
35
+ * This should be refactored into a clean cache layer once the cache is split off.
36
+ */
37
+ notifyNodeChanged(nodeUid: string, newParentUid?: string): Promise<void>;
38
+ /**
39
+ * Call to remove a node from cache. This should be refactored when the cache is split off.
40
+ */
41
+ notifyNodeDeleted(nodeUid: string): Promise<void>;
27
42
  private loadNode;
28
43
  private loadNodes;
29
44
  private loadNodesWithMissingReport;
@@ -4,12 +4,21 @@ exports.NodesAccess = void 0;
4
4
  const ttag_1 = require("ttag");
5
5
  const interface_1 = require("../../interface");
6
6
  const errors_1 = require("../../errors");
7
+ const asyncIteratorMap_1 = require("../asyncIteratorMap");
7
8
  const errors_2 = require("../errors");
8
9
  const batchLoading_1 = require("../batchLoading");
9
10
  const uids_1 = require("../uids");
10
11
  const extendedAttributes_1 = require("./extendedAttributes");
11
12
  const validations_1 = require("./validations");
12
13
  const mediaTypes_1 = require("./mediaTypes");
14
+ // This is the number of nodes that are loaded in parallel.
15
+ // It is a trade-off between initial wait time and overhead of API calls.
16
+ const BATCH_LOADING_SIZE = 30;
17
+ // This is the number of nodes that are decrypted in parallel.
18
+ // It is a trade-off between performance and memory usage.
19
+ // Higher number means more memory usage, but faster decryption.
20
+ // Lower number means less memory usage, but slower decryption.
21
+ const DECRYPTION_CONCURRENCY = 15;
13
22
  /**
14
23
  * Provides access to node metadata.
15
24
  *
@@ -58,7 +67,7 @@ class NodesAccess {
58
67
  async *iterateFolderChildren(parentNodeUid, signal) {
59
68
  // Ensure the parent is loaded and up-to-date.
60
69
  const parentNode = await this.getNode(parentNodeUid);
61
- const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal) });
70
+ const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
62
71
  const areChildrenCached = await this.cache.isFolderChildrenLoaded(parentNodeUid);
63
72
  if (areChildrenCached) {
64
73
  for await (const node of this.cache.iterateChildren(parentNodeUid)) {
@@ -93,7 +102,7 @@ class NodesAccess {
93
102
  // Improvement requested: keep status of loaded trash and leverage cache.
94
103
  async *iterateTrashedNodes(signal) {
95
104
  const { volumeId } = await this.shareService.getMyFilesIDs();
96
- const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal) });
105
+ const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
97
106
  for await (const nodeUid of this.apiService.iterateTrashedNodeUids(volumeId, signal)) {
98
107
  let node;
99
108
  try {
@@ -111,7 +120,7 @@ class NodesAccess {
111
120
  yield* batchLoading.loadRest();
112
121
  }
113
122
  async *iterateNodes(nodeUids, signal) {
114
- const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodesWithMissingReport(nodeUids, signal) });
123
+ const batchLoading = new batchLoading_1.BatchLoading({ iterateItems: (nodeUids) => this.loadNodesWithMissingReport(nodeUids, signal), batchSize: BATCH_LOADING_SIZE });
115
124
  for await (const result of this.cache.iterateNodes(nodeUids)) {
116
125
  if (result.ok && !result.node.isStale) {
117
126
  yield result.node;
@@ -122,8 +131,43 @@ class NodesAccess {
122
131
  }
123
132
  yield* batchLoading.loadRest();
124
133
  }
134
+ /**
135
+ * Call to invalidate the folder listing cache. This should be refactored into a clean
136
+ * cache layer once the cache is split off.
137
+ */
138
+ async notifyChildCreated(nodeUid) {
139
+ await this.cache.resetFolderChildrenLoaded(nodeUid);
140
+ }
141
+ /**
142
+ * Call to invalidate the node cache when a node changes. Parent can be set after a move
143
+ * to ensure parent listing of new parent is up to date if cached.
144
+ * This should be refactored into a clean cache layer once the cache is split off.
145
+ */
146
+ async notifyNodeChanged(nodeUid, newParentUid) {
147
+ try {
148
+ const node = await this.cache.getNode(nodeUid);
149
+ if (node.isStale && newParentUid === null) {
150
+ return;
151
+ }
152
+ node.isStale = true;
153
+ if (newParentUid) {
154
+ node.parentUid = newParentUid;
155
+ }
156
+ await this.cache.setNode(node);
157
+ }
158
+ catch (error) {
159
+ this.logger.warn(`Failed to set node ${nodeUid} as stale after sharing: ${error}`);
160
+ }
161
+ }
162
+ /**
163
+ * Call to remove a node from cache. This should be refactored when the cache is split off.
164
+ */
165
+ async notifyNodeDeleted(nodeUid) {
166
+ await this.cache.removeNodes([nodeUid]);
167
+ }
125
168
  async loadNode(nodeUid) {
126
- const encryptedNode = await this.apiService.getNode(nodeUid);
169
+ const { volumeId: ownVolumeId } = await this.shareService.getMyFilesIDs();
170
+ const encryptedNode = await this.apiService.getNode(nodeUid, ownVolumeId);
127
171
  return this.decryptNode(encryptedNode);
128
172
  }
129
173
  async *loadNodes(nodeUids, signal) {
@@ -137,14 +181,25 @@ class NodesAccess {
137
181
  async *loadNodesWithMissingReport(nodeUids, signal) {
138
182
  const returnedNodeUids = [];
139
183
  const errors = [];
140
- for await (const encryptedNode of this.apiService.iterateNodes(nodeUids, signal)) {
184
+ const { volumeId: ownVolumeId } = await this.shareService.getMyFilesIDs();
185
+ const encryptedNodesIterator = this.apiService.iterateNodes(nodeUids, ownVolumeId, signal);
186
+ const decryptNodeMapper = async (encryptedNode) => {
141
187
  returnedNodeUids.push(encryptedNode.uid);
142
188
  try {
143
189
  const { node } = await this.decryptNode(encryptedNode);
144
- yield node;
190
+ return (0, interface_1.resultOk)(node);
145
191
  }
146
192
  catch (error) {
147
- errors.push(error);
193
+ return (0, interface_1.resultError)(error);
194
+ }
195
+ };
196
+ const decryptedNodesIterator = (0, asyncIteratorMap_1.asyncIteratorMap)(encryptedNodesIterator, decryptNodeMapper, DECRYPTION_CONCURRENCY);
197
+ for await (const node of decryptedNodesIterator) {
198
+ if (node.ok) {
199
+ yield node.value;
200
+ }
201
+ else {
202
+ errors.push(node.error);
148
203
  }
149
204
  }
150
205
  if (errors.length > 0) {
@@ -182,6 +237,7 @@ class NodesAccess {
182
237
  error: (0, errors_2.getErrorMessage)(error),
183
238
  }),
184
239
  errors: [error],
240
+ treeEventScopeId: (0, uids_1.splitNodeUid)(encryptedNode.uid).volumeId,
185
241
  },
186
242
  };
187
243
  }
@@ -236,6 +292,7 @@ class NodesAccess {
236
292
  ...extendedAttributes,
237
293
  }),
238
294
  folder: undefined,
295
+ treeEventScopeId: (0, uids_1.splitNodeUid)(unparsedNode.uid).volumeId,
239
296
  };
240
297
  }
241
298
  const extendedAttributes = unparsedNode.folder?.extendedAttributes
@@ -249,6 +306,7 @@ class NodesAccess {
249
306
  folder: extendedAttributes ? {
250
307
  ...extendedAttributes,
251
308
  } : undefined,
309
+ treeEventScopeId: (0, uids_1.splitNodeUid)(unparsedNode.uid).volumeId,
252
310
  };
253
311
  }
254
312
  async getParentKeys(node) {