@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.
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.js +3 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/memoryCache.d.ts +1 -1
- package/dist/cache/nullCache.d.ts +14 -0
- package/dist/cache/nullCache.js +37 -0
- package/dist/cache/nullCache.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/crypto/openPGPCrypto.js +2 -0
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/eventsGenerator.d.ts +14 -0
- package/dist/diagnostic/eventsGenerator.js +49 -0
- package/dist/diagnostic/eventsGenerator.js.map +1 -0
- package/dist/diagnostic/httpClient.d.ts +16 -0
- package/dist/diagnostic/httpClient.js +81 -0
- package/dist/diagnostic/httpClient.js.map +1 -0
- package/dist/diagnostic/index.d.ts +10 -0
- package/dist/diagnostic/index.js +35 -0
- package/dist/diagnostic/index.js.map +1 -0
- package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
- package/dist/diagnostic/integrityVerificationStream.js +56 -0
- package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
- package/dist/diagnostic/interface.d.ts +102 -0
- package/dist/diagnostic/interface.js +3 -0
- package/dist/diagnostic/interface.js.map +1 -0
- package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
- package/dist/diagnostic/sdkDiagnostic.js +216 -0
- package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
- package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
- package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
- package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
- package/dist/diagnostic/telemetry.d.ts +25 -0
- package/dist/diagnostic/telemetry.js +70 -0
- package/dist/diagnostic/telemetry.js.map +1 -0
- package/dist/diagnostic/zipGenerators.d.ts +9 -0
- package/dist/diagnostic/zipGenerators.js +64 -0
- package/dist/diagnostic/zipGenerators.js.map +1 -0
- package/dist/diagnostic/zipGenerators.test.js +144 -0
- package/dist/diagnostic/zipGenerators.test.js.map +1 -0
- package/dist/errors.d.ts +8 -3
- package/dist/errors.js +11 -4
- package/dist/errors.js.map +1 -1
- package/dist/interface/config.d.ts +26 -0
- package/dist/interface/config.js +3 -0
- package/dist/interface/config.js.map +1 -0
- package/dist/interface/download.d.ts +2 -2
- package/dist/interface/events.d.ts +60 -20
- package/dist/interface/events.js +11 -1
- package/dist/interface/events.js.map +1 -1
- package/dist/interface/httpClient.d.ts +0 -14
- package/dist/interface/index.d.ts +9 -5
- package/dist/interface/index.js +2 -1
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/nodes.d.ts +21 -1
- package/dist/interface/nodes.js +11 -0
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/sharing.d.ts +1 -0
- package/dist/interface/upload.d.ts +57 -3
- package/dist/internal/apiService/driveTypes.d.ts +1341 -465
- package/dist/internal/apiService/errors.js +2 -2
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/transformers.js +2 -0
- package/dist/internal/apiService/transformers.js.map +1 -1
- package/dist/internal/asyncIteratorMap.d.ts +15 -0
- package/dist/internal/asyncIteratorMap.js +59 -0
- package/dist/internal/asyncIteratorMap.js.map +1 -0
- package/dist/internal/asyncIteratorMap.test.js +120 -0
- package/dist/internal/asyncIteratorMap.test.js.map +1 -0
- package/dist/internal/download/apiService.js +32 -31
- package/dist/internal/download/apiService.js.map +1 -1
- package/dist/internal/download/fileDownloader.d.ts +2 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/events/apiService.d.ts +4 -6
- package/dist/internal/events/apiService.js +15 -22
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.d.ts +7 -10
- package/dist/internal/events/coreEventManager.js +19 -36
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.d.ts +1 -0
- package/dist/internal/events/coreEventManager.test.js +87 -0
- package/dist/internal/events/coreEventManager.test.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +11 -36
- package/dist/internal/events/eventManager.js +59 -105
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +167 -82
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +13 -33
- package/dist/internal/events/index.js +56 -72
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +59 -14
- package/dist/internal/events/interface.js +13 -3
- package/dist/internal/events/interface.js.map +1 -1
- package/dist/internal/events/volumeEventManager.d.ts +7 -17
- package/dist/internal/events/volumeEventManager.js +58 -45
- package/dist/internal/events/volumeEventManager.js.map +1 -1
- package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
- package/dist/internal/events/volumeEventManager.test.js +203 -0
- package/dist/internal/events/volumeEventManager.test.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +2 -2
- package/dist/internal/nodes/apiService.js +16 -6
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +30 -8
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.d.ts +10 -1
- package/dist/internal/nodes/cache.js +18 -0
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cache.test.js +1 -0
- package/dist/internal/nodes/cache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.d.ts +1 -1
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +34 -0
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/events.d.ts +7 -83
- package/dist/internal/nodes/events.js +43 -217
- package/dist/internal/nodes/events.js.map +1 -1
- package/dist/internal/nodes/events.test.js +27 -277
- package/dist/internal/nodes/events.test.js.map +1 -1
- package/dist/internal/nodes/index.d.ts +3 -4
- package/dist/internal/nodes/index.js +5 -5
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +3 -1
- package/dist/internal/nodes/nodesAccess.d.ts +15 -0
- package/dist/internal/nodes/nodesAccess.js +65 -7
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +132 -93
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +1 -3
- package/dist/internal/nodes/nodesManagement.js +12 -26
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +35 -14
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
- package/dist/internal/shares/cache.d.ts +2 -0
- package/dist/internal/shares/cache.js +2 -0
- package/dist/internal/shares/cache.js.map +1 -1
- package/dist/internal/shares/manager.d.ts +1 -0
- package/dist/internal/shares/manager.js +3 -0
- package/dist/internal/shares/manager.js.map +1 -1
- package/dist/internal/sharing/apiService.js +20 -2
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.js +1 -0
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/events.d.ts +23 -55
- package/dist/internal/sharing/events.js +46 -138
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +77 -180
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.d.ts +4 -5
- package/dist/internal/sharing/index.js +5 -5
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +3 -0
- package/dist/internal/sharing/sharingManagement.d.ts +2 -3
- package/dist/internal/sharing/sharingManagement.js +7 -9
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +9 -39
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
- package/dist/internal/upload/apiService.d.ts +2 -3
- package/dist/internal/upload/apiService.js +7 -4
- package/dist/internal/upload/apiService.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +49 -53
- package/dist/internal/upload/fileUploader.js +91 -395
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/fileUploader.test.js +38 -292
- package/dist/internal/upload/fileUploader.test.js.map +1 -1
- package/dist/internal/upload/index.d.ts +5 -5
- package/dist/internal/upload/index.js +23 -44
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/interface.d.ts +2 -0
- package/dist/internal/upload/manager.d.ts +6 -6
- package/dist/internal/upload/manager.js +32 -66
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +100 -117
- package/dist/internal/upload/manager.test.js.map +1 -1
- package/dist/internal/upload/streamUploader.d.ts +62 -0
- package/dist/internal/upload/streamUploader.js +440 -0
- package/dist/internal/upload/streamUploader.js.map +1 -0
- package/dist/internal/upload/streamUploader.test.d.ts +1 -0
- package/dist/internal/upload/streamUploader.test.js +358 -0
- package/dist/internal/upload/streamUploader.test.js.map +1 -0
- package/dist/protonDriveClient.d.ts +22 -165
- package/dist/protonDriveClient.js +27 -191
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePhotosClient.js +3 -2
- package/dist/protonDrivePhotosClient.js.map +1 -1
- package/package.json +4 -4
- package/src/cache/index.ts +1 -0
- package/src/cache/memoryCache.ts +1 -1
- package/src/cache/nullCache.ts +38 -0
- package/src/config.ts +17 -2
- package/src/crypto/openPGPCrypto.ts +2 -0
- package/src/diagnostic/eventsGenerator.ts +48 -0
- package/src/diagnostic/httpClient.ts +80 -0
- package/src/diagnostic/index.ts +38 -0
- package/src/diagnostic/integrityVerificationStream.ts +56 -0
- package/src/diagnostic/interface.ts +158 -0
- package/src/diagnostic/sdkDiagnostic.ts +238 -0
- package/src/diagnostic/sdkDiagnosticFull.ts +40 -0
- package/src/diagnostic/telemetry.ts +71 -0
- package/src/diagnostic/zipGenerators.test.ts +177 -0
- package/src/diagnostic/zipGenerators.ts +70 -0
- package/src/errors.ts +13 -4
- package/src/interface/config.ts +28 -0
- package/src/interface/download.ts +2 -2
- package/src/interface/events.ts +66 -21
- package/src/interface/httpClient.ts +0 -16
- package/src/interface/index.ts +9 -5
- package/src/interface/nodes.ts +32 -12
- package/src/interface/sharing.ts +1 -0
- package/src/interface/upload.ts +59 -3
- package/src/internal/apiService/driveTypes.ts +1341 -465
- package/src/internal/apiService/errors.ts +3 -2
- package/src/internal/apiService/transformers.ts +2 -0
- package/src/internal/asyncIteratorMap.test.ts +150 -0
- package/src/internal/asyncIteratorMap.ts +64 -0
- package/src/internal/download/apiService.ts +11 -8
- package/src/internal/download/fileDownloader.ts +2 -2
- package/src/internal/events/apiService.ts +25 -28
- package/src/internal/events/coreEventManager.test.ts +101 -0
- package/src/internal/events/coreEventManager.ts +20 -45
- package/src/internal/events/eventManager.test.ts +201 -88
- package/src/internal/events/eventManager.ts +69 -115
- package/src/internal/events/index.ts +54 -84
- package/src/internal/events/interface.ts +70 -15
- package/src/internal/events/volumeEventManager.test.ts +243 -0
- package/src/internal/events/volumeEventManager.ts +55 -53
- package/src/internal/nodes/apiService.test.ts +36 -7
- package/src/internal/nodes/apiService.ts +19 -7
- package/src/internal/nodes/cache.test.ts +1 -0
- package/src/internal/nodes/cache.ts +21 -2
- package/src/internal/nodes/cryptoService.test.ts +38 -0
- package/src/internal/nodes/cryptoService.ts +1 -1
- package/src/internal/nodes/events.test.ts +29 -335
- package/src/internal/nodes/events.ts +45 -253
- package/src/internal/nodes/index.ts +6 -8
- package/src/internal/nodes/interface.ts +6 -3
- package/src/internal/nodes/nodesAccess.test.ts +133 -91
- package/src/internal/nodes/nodesAccess.ts +70 -8
- package/src/internal/nodes/nodesManagement.test.ts +39 -15
- package/src/internal/nodes/nodesManagement.ts +12 -30
- package/src/internal/shares/cache.ts +4 -2
- package/src/internal/shares/manager.ts +9 -5
- package/src/internal/sharing/apiService.ts +25 -2
- package/src/internal/sharing/cache.ts +1 -1
- package/src/internal/sharing/cryptoService.ts +1 -0
- package/src/internal/sharing/events.test.ts +89 -195
- package/src/internal/sharing/events.ts +42 -156
- package/src/internal/sharing/index.ts +6 -9
- package/src/internal/sharing/interface.ts +6 -2
- package/src/internal/sharing/sharingManagement.test.ts +10 -40
- package/src/internal/sharing/sharingManagement.ts +7 -11
- package/src/internal/upload/apiService.ts +5 -6
- package/src/internal/upload/fileUploader.test.ts +46 -376
- package/src/internal/upload/fileUploader.ts +114 -494
- package/src/internal/upload/index.ts +30 -54
- package/src/internal/upload/interface.ts +2 -0
- package/src/internal/upload/manager.test.ts +107 -124
- package/src/internal/upload/manager.ts +48 -80
- package/src/internal/upload/streamUploader.test.ts +468 -0
- package/src/internal/upload/streamUploader.ts +550 -0
- package/src/protonDriveClient.ts +80 -248
- package/src/protonDrivePhotosClient.ts +4 -3
- package/dist/internal/events/cache.d.ts +0 -28
- package/dist/internal/events/cache.js +0 -67
- package/dist/internal/events/cache.js.map +0 -1
- package/dist/internal/events/cache.test.js +0 -43
- package/dist/internal/events/cache.test.js.map +0 -1
- package/dist/internal/nodes/index.test.js +0 -112
- package/dist/internal/nodes/index.test.js.map +0 -1
- package/src/internal/events/cache.test.ts +0 -47
- package/src/internal/events/cache.ts +0 -80
- package/src/internal/nodes/index.test.ts +0 -135
- /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
- /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("
|
|
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:
|
|
15
|
-
parentUid:
|
|
16
|
-
name: { ok: true, value:
|
|
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
|
-
|
|
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
|
-
|
|
33
|
+
treeEventScopeId: "volume1",
|
|
31
34
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
+
eventId: "event1",
|
|
44
|
+
nodeUid: "nodeUid123",
|
|
50
45
|
parentNodeUid: "parentUid",
|
|
51
46
|
isTrashed: false,
|
|
52
47
|
isShared: false,
|
|
53
|
-
|
|
48
|
+
treeEventScopeId: "volume1",
|
|
54
49
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
55
|
+
it("should remove node from cache", async () => {
|
|
80
56
|
const event = {
|
|
81
57
|
type: events_1.DriveEventType.NodeDeleted,
|
|
82
|
-
|
|
58
|
+
eventId: "event1",
|
|
59
|
+
nodeUid: "nodeUid123",
|
|
83
60
|
parentNodeUid: "parentUid",
|
|
84
|
-
|
|
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
|
-
|
|
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([
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
|
31
|
-
const nodesManagement = new nodesManagement_1.NodesManagement(api, cryptoCache, cryptoService, nodesAccess
|
|
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
|
-
|
|
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":";;;
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
190
|
+
return (0, interface_1.resultOk)(node);
|
|
145
191
|
}
|
|
146
192
|
catch (error) {
|
|
147
|
-
|
|
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) {
|