@protontech/drive-sdk 0.0.13 → 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 (234) 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 +2 -1
  43. package/dist/errors.js +3 -1
  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 +8 -4
  54. package/dist/interface/index.js +2 -1
  55. package/dist/interface/index.js.map +1 -1
  56. package/dist/interface/nodes.d.ts +9 -0
  57. package/dist/interface/nodes.js.map +1 -1
  58. package/dist/interface/sharing.d.ts +1 -0
  59. package/dist/interface/upload.d.ts +6 -0
  60. package/dist/internal/download/apiService.js +32 -31
  61. package/dist/internal/download/apiService.js.map +1 -1
  62. package/dist/internal/download/fileDownloader.d.ts +2 -2
  63. package/dist/internal/download/fileDownloader.js.map +1 -1
  64. package/dist/internal/events/apiService.d.ts +4 -6
  65. package/dist/internal/events/apiService.js +15 -22
  66. package/dist/internal/events/apiService.js.map +1 -1
  67. package/dist/internal/events/coreEventManager.d.ts +7 -10
  68. package/dist/internal/events/coreEventManager.js +19 -36
  69. package/dist/internal/events/coreEventManager.js.map +1 -1
  70. package/dist/internal/events/coreEventManager.test.js +87 -0
  71. package/dist/internal/events/coreEventManager.test.js.map +1 -0
  72. package/dist/internal/events/eventManager.d.ts +11 -36
  73. package/dist/internal/events/eventManager.js +59 -105
  74. package/dist/internal/events/eventManager.js.map +1 -1
  75. package/dist/internal/events/eventManager.test.js +167 -82
  76. package/dist/internal/events/eventManager.test.js.map +1 -1
  77. package/dist/internal/events/index.d.ts +13 -33
  78. package/dist/internal/events/index.js +56 -72
  79. package/dist/internal/events/index.js.map +1 -1
  80. package/dist/internal/events/interface.d.ts +59 -14
  81. package/dist/internal/events/interface.js +13 -3
  82. package/dist/internal/events/interface.js.map +1 -1
  83. package/dist/internal/events/volumeEventManager.d.ts +7 -17
  84. package/dist/internal/events/volumeEventManager.js +58 -45
  85. package/dist/internal/events/volumeEventManager.js.map +1 -1
  86. package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
  87. package/dist/internal/events/volumeEventManager.test.js +203 -0
  88. package/dist/internal/events/volumeEventManager.test.js.map +1 -0
  89. package/dist/internal/nodes/cache.d.ts +10 -1
  90. package/dist/internal/nodes/cache.js +17 -0
  91. package/dist/internal/nodes/cache.js.map +1 -1
  92. package/dist/internal/nodes/cryptoService.d.ts +1 -1
  93. package/dist/internal/nodes/cryptoService.js.map +1 -1
  94. package/dist/internal/nodes/events.d.ts +7 -83
  95. package/dist/internal/nodes/events.js +43 -217
  96. package/dist/internal/nodes/events.js.map +1 -1
  97. package/dist/internal/nodes/events.test.js +27 -277
  98. package/dist/internal/nodes/events.test.js.map +1 -1
  99. package/dist/internal/nodes/index.d.ts +3 -4
  100. package/dist/internal/nodes/index.js +5 -5
  101. package/dist/internal/nodes/index.js.map +1 -1
  102. package/dist/internal/nodes/nodesAccess.d.ts +15 -0
  103. package/dist/internal/nodes/nodesAccess.js +37 -0
  104. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  105. package/dist/internal/nodes/nodesAccess.test.js +131 -93
  106. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  107. package/dist/internal/nodes/nodesManagement.d.ts +1 -3
  108. package/dist/internal/nodes/nodesManagement.js +12 -26
  109. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  110. package/dist/internal/nodes/nodesManagement.test.js +35 -14
  111. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  112. package/dist/internal/shares/cache.d.ts +2 -0
  113. package/dist/internal/shares/cache.js +2 -0
  114. package/dist/internal/shares/cache.js.map +1 -1
  115. package/dist/internal/shares/manager.d.ts +1 -0
  116. package/dist/internal/shares/manager.js +3 -0
  117. package/dist/internal/shares/manager.js.map +1 -1
  118. package/dist/internal/sharing/apiService.js +1 -0
  119. package/dist/internal/sharing/apiService.js.map +1 -1
  120. package/dist/internal/sharing/cryptoService.js +1 -0
  121. package/dist/internal/sharing/cryptoService.js.map +1 -1
  122. package/dist/internal/sharing/events.d.ts +23 -55
  123. package/dist/internal/sharing/events.js +46 -138
  124. package/dist/internal/sharing/events.js.map +1 -1
  125. package/dist/internal/sharing/events.test.js +77 -180
  126. package/dist/internal/sharing/events.test.js.map +1 -1
  127. package/dist/internal/sharing/index.d.ts +4 -5
  128. package/dist/internal/sharing/index.js +5 -5
  129. package/dist/internal/sharing/index.js.map +1 -1
  130. package/dist/internal/sharing/interface.d.ts +3 -0
  131. package/dist/internal/sharing/sharingManagement.d.ts +2 -3
  132. package/dist/internal/sharing/sharingManagement.js +7 -9
  133. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  134. package/dist/internal/sharing/sharingManagement.test.js +9 -39
  135. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  136. package/dist/internal/upload/apiService.d.ts +2 -3
  137. package/dist/internal/upload/apiService.js +7 -4
  138. package/dist/internal/upload/apiService.js.map +1 -1
  139. package/dist/internal/upload/index.d.ts +2 -2
  140. package/dist/internal/upload/index.js +3 -3
  141. package/dist/internal/upload/index.js.map +1 -1
  142. package/dist/internal/upload/interface.d.ts +2 -0
  143. package/dist/internal/upload/manager.d.ts +5 -5
  144. package/dist/internal/upload/manager.js +19 -50
  145. package/dist/internal/upload/manager.js.map +1 -1
  146. package/dist/internal/upload/manager.test.js +68 -44
  147. package/dist/internal/upload/manager.test.js.map +1 -1
  148. package/dist/internal/upload/streamUploader.js +1 -2
  149. package/dist/internal/upload/streamUploader.js.map +1 -1
  150. package/dist/internal/upload/streamUploader.test.js +1 -1
  151. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  152. package/dist/protonDriveClient.d.ts +19 -162
  153. package/dist/protonDriveClient.js +26 -190
  154. package/dist/protonDriveClient.js.map +1 -1
  155. package/dist/protonDrivePhotosClient.js +3 -2
  156. package/dist/protonDrivePhotosClient.js.map +1 -1
  157. package/package.json +3 -3
  158. package/src/cache/index.ts +1 -0
  159. package/src/cache/memoryCache.ts +1 -1
  160. package/src/cache/nullCache.ts +38 -0
  161. package/src/config.ts +17 -2
  162. package/src/crypto/openPGPCrypto.ts +2 -0
  163. package/src/diagnostic/eventsGenerator.ts +48 -0
  164. package/src/diagnostic/httpClient.ts +80 -0
  165. package/src/diagnostic/index.ts +38 -0
  166. package/src/diagnostic/integrityVerificationStream.ts +56 -0
  167. package/src/diagnostic/interface.ts +158 -0
  168. package/src/diagnostic/sdkDiagnostic.ts +238 -0
  169. package/src/diagnostic/sdkDiagnosticFull.ts +40 -0
  170. package/src/diagnostic/telemetry.ts +71 -0
  171. package/src/diagnostic/zipGenerators.test.ts +177 -0
  172. package/src/diagnostic/zipGenerators.ts +70 -0
  173. package/src/errors.ts +4 -1
  174. package/src/interface/config.ts +28 -0
  175. package/src/interface/download.ts +2 -2
  176. package/src/interface/events.ts +66 -21
  177. package/src/interface/httpClient.ts +0 -16
  178. package/src/interface/index.ts +8 -4
  179. package/src/interface/nodes.ts +21 -12
  180. package/src/interface/sharing.ts +1 -0
  181. package/src/interface/upload.ts +6 -0
  182. package/src/internal/download/apiService.ts +11 -8
  183. package/src/internal/download/fileDownloader.ts +2 -2
  184. package/src/internal/events/apiService.ts +25 -28
  185. package/src/internal/events/coreEventManager.test.ts +101 -0
  186. package/src/internal/events/coreEventManager.ts +20 -45
  187. package/src/internal/events/eventManager.test.ts +201 -88
  188. package/src/internal/events/eventManager.ts +69 -115
  189. package/src/internal/events/index.ts +54 -84
  190. package/src/internal/events/interface.ts +70 -15
  191. package/src/internal/events/volumeEventManager.test.ts +243 -0
  192. package/src/internal/events/volumeEventManager.ts +55 -53
  193. package/src/internal/nodes/cache.ts +20 -2
  194. package/src/internal/nodes/cryptoService.ts +1 -1
  195. package/src/internal/nodes/events.test.ts +29 -335
  196. package/src/internal/nodes/events.ts +45 -253
  197. package/src/internal/nodes/index.ts +6 -8
  198. package/src/internal/nodes/interface.ts +2 -2
  199. package/src/internal/nodes/nodesAccess.test.ts +132 -91
  200. package/src/internal/nodes/nodesAccess.ts +40 -1
  201. package/src/internal/nodes/nodesManagement.test.ts +39 -15
  202. package/src/internal/nodes/nodesManagement.ts +12 -30
  203. package/src/internal/shares/cache.ts +4 -2
  204. package/src/internal/shares/manager.ts +9 -5
  205. package/src/internal/sharing/apiService.ts +1 -0
  206. package/src/internal/sharing/cache.ts +1 -1
  207. package/src/internal/sharing/cryptoService.ts +1 -0
  208. package/src/internal/sharing/events.test.ts +89 -195
  209. package/src/internal/sharing/events.ts +42 -156
  210. package/src/internal/sharing/index.ts +6 -9
  211. package/src/internal/sharing/interface.ts +6 -2
  212. package/src/internal/sharing/sharingManagement.test.ts +10 -40
  213. package/src/internal/sharing/sharingManagement.ts +7 -11
  214. package/src/internal/upload/apiService.ts +5 -6
  215. package/src/internal/upload/index.ts +5 -5
  216. package/src/internal/upload/interface.ts +2 -0
  217. package/src/internal/upload/manager.test.ts +75 -45
  218. package/src/internal/upload/manager.ts +24 -54
  219. package/src/internal/upload/streamUploader.test.ts +0 -1
  220. package/src/internal/upload/streamUploader.ts +0 -2
  221. package/src/protonDriveClient.ts +75 -244
  222. package/src/protonDrivePhotosClient.ts +4 -3
  223. package/dist/internal/events/cache.d.ts +0 -28
  224. package/dist/internal/events/cache.js +0 -67
  225. package/dist/internal/events/cache.js.map +0 -1
  226. package/dist/internal/events/cache.test.js +0 -43
  227. package/dist/internal/events/cache.test.js.map +0 -1
  228. package/dist/internal/nodes/index.test.js +0 -114
  229. package/dist/internal/nodes/index.test.js.map +0 -1
  230. package/src/internal/events/cache.test.ts +0 -47
  231. package/src/internal/events/cache.ts +0 -80
  232. package/src/internal/nodes/index.test.ts +0 -137
  233. /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
  234. /package/dist/internal/{nodes/index.test.d.ts → events/coreEventManager.test.d.ts} +0 -0
@@ -1,120 +1,205 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const logger_1 = require("../../tests/logger");
4
- const apiService_1 = require("../apiService");
5
4
  const eventManager_1 = require("./eventManager");
5
+ const interface_1 = require("./interface");
6
6
  jest.useFakeTimers();
7
+ const POLLING_INTERVAL = 1;
7
8
  describe("EventManager", () => {
8
9
  let manager;
9
- const getLastEventIdMock = jest.fn();
10
+ const getLatestEventIdMock = jest.fn();
10
11
  const getEventsMock = jest.fn();
11
- const updateLatestEventIdMock = jest.fn();
12
12
  const listenerMock = jest.fn();
13
+ const mockLogger = (0, logger_1.getMockLogger)();
14
+ const subscriptions = [];
13
15
  beforeEach(() => {
14
- jest.clearAllMocks();
15
- getLastEventIdMock.mockImplementation(() => Promise.resolve("eventId1"));
16
- getEventsMock.mockImplementation(() => Promise.resolve({
17
- lastEventId: "eventId2",
18
- more: false,
19
- refresh: false,
20
- events: ["event1", "event2"],
21
- }));
22
- manager = new eventManager_1.EventManager((0, logger_1.getMockLogger)(), getLastEventIdMock, getEventsMock, updateLatestEventIdMock);
23
- manager.addListener(listenerMock);
16
+ const mockEventManager = {
17
+ getLogger: () => mockLogger,
18
+ getLatestEventId: getLatestEventIdMock,
19
+ getEvents: getEventsMock,
20
+ };
21
+ manager = new eventManager_1.EventManager(mockEventManager, POLLING_INTERVAL, null);
22
+ const subscription = manager.addListener(listenerMock);
23
+ subscriptions.push(subscription);
24
24
  });
25
25
  afterEach(async () => {
26
26
  await manager.stop();
27
+ while (subscriptions.length > 0) {
28
+ const subscription = subscriptions.pop();
29
+ subscription?.dispose();
30
+ }
31
+ jest.clearAllMocks();
27
32
  });
28
- it("should get latest event ID on first run only", async () => {
29
- await manager.start();
30
- expect(getLastEventIdMock).toHaveBeenCalledTimes(1);
31
- expect(getEventsMock).toHaveBeenCalledTimes(0);
32
- expect(listenerMock).toHaveBeenCalledTimes(0);
33
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(1);
34
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId1');
35
- });
36
- it("should notify about events in the next run", async () => {
37
- await manager.start();
38
- expect(getLastEventIdMock).toHaveBeenCalledTimes(1);
33
+ it("should start polling when started", async () => {
34
+ getLatestEventIdMock.mockResolvedValue('EventId1');
35
+ const mockEvents = [
36
+ [{
37
+ type: interface_1.DriveEventType.FastForward,
38
+ treeEventScopeId: 'volume1',
39
+ eventId: 'EventId2',
40
+ }],
41
+ [{
42
+ type: interface_1.DriveEventType.FastForward,
43
+ treeEventScopeId: 'volume1',
44
+ eventId: 'EventId3',
45
+ }],
46
+ ];
47
+ getEventsMock.mockImplementationOnce(async function* () {
48
+ yield* mockEvents[0];
49
+ }).mockImplementationOnce(async function* () {
50
+ yield* mockEvents[1];
51
+ }).mockImplementationOnce(async function* () {
52
+ });
53
+ expect(getLatestEventIdMock).toHaveBeenCalledTimes(0);
39
54
  expect(getEventsMock).toHaveBeenCalledTimes(0);
40
- expect(listenerMock).toHaveBeenCalledTimes(0);
41
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(1);
42
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId1');
43
- updateLatestEventIdMock.mockClear();
55
+ expect(await manager.start()).toBeUndefined();
56
+ expect(getLatestEventIdMock).toHaveBeenCalledTimes(1);
57
+ expect(getEventsMock).toHaveBeenCalledWith('EventId1');
44
58
  await jest.runOnlyPendingTimersAsync();
45
- expect(getEventsMock).toHaveBeenCalledTimes(1);
46
- expect(listenerMock).toHaveBeenCalledTimes(1);
47
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(1);
48
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId2');
59
+ expect(getEventsMock).toHaveBeenCalledTimes(2);
60
+ expect(getEventsMock).toHaveBeenCalledWith('EventId2');
49
61
  });
50
- it("should continue with more events", async () => {
51
- getEventsMock.mockImplementation((lastEventId) => Promise.resolve({
52
- lastEventId: lastEventId === "eventId1" ? "eventId2" : "eventId3",
53
- more: lastEventId === "eventId1" ? true : false,
54
- refresh: false,
55
- events: lastEventId === "eventId1" ? ["event1", "event2"] : ["event3"],
56
- }));
62
+ it("should stop polling when stopped", async () => {
63
+ getLatestEventIdMock.mockResolvedValue('eventId1');
64
+ getEventsMock.mockImplementation(async function* () {
65
+ yield {
66
+ type: interface_1.DriveEventType.FastForward,
67
+ treeEventScopeId: 'volume1',
68
+ eventId: 'eventId1',
69
+ };
70
+ });
57
71
  await manager.start();
58
72
  await jest.runOnlyPendingTimersAsync();
59
- expect(getEventsMock).toHaveBeenCalledTimes(2);
60
- expect(listenerMock).toHaveBeenCalledTimes(2);
61
- expect(listenerMock).toHaveBeenCalledWith(["event1", "event2"], false);
62
- expect(listenerMock).toHaveBeenCalledWith(["event3"], false);
63
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(3);
64
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId1');
65
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId2');
66
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId3');
73
+ const callsBeforeStop = getEventsMock.mock.calls.length;
74
+ await manager.stop();
75
+ await jest.runOnlyPendingTimersAsync();
76
+ // Should not have made additional calls after stopping
77
+ expect(getEventsMock).toHaveBeenCalledTimes(callsBeforeStop);
67
78
  });
68
- it("should refresh if event does not exist", async () => {
69
- getEventsMock.mockImplementation(() => Promise.reject(new apiService_1.NotFoundAPIError('Event not found', 2501)));
70
- await manager.start();
79
+ it("should notify all listeners when getting events", async () => {
80
+ getLatestEventIdMock.mockResolvedValue('eventId1');
81
+ const mockEvents = [
82
+ {
83
+ type: interface_1.DriveEventType.NodeCreated,
84
+ nodeUid: 'node1',
85
+ parentNodeUid: 'parent1',
86
+ isTrashed: false,
87
+ isShared: false,
88
+ treeEventScopeId: 'volume1',
89
+ eventId: 'eventId2',
90
+ },
91
+ ];
92
+ getEventsMock.mockImplementationOnce(async function* () {
93
+ yield* mockEvents;
94
+ }).mockImplementation(async function* () {
95
+ });
96
+ expect(await manager.start()).toBeUndefined();
71
97
  await jest.runOnlyPendingTimersAsync();
72
- expect(getLastEventIdMock).toHaveBeenCalledTimes(2);
73
98
  expect(listenerMock).toHaveBeenCalledTimes(1);
74
- expect(listenerMock).toHaveBeenCalledWith([], true);
75
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(1);
76
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId1');
99
+ expect(listenerMock).toHaveBeenNthCalledWith(1, mockEvents[0]);
77
100
  });
78
- it("should retry on error", async () => {
79
- let index = 0;
80
- getEventsMock.mockImplementation(() => {
81
- index++;
82
- if (index <= 3) {
83
- return Promise.reject(new Error("Error"));
101
+ it("should propagate unsubscription errors", async () => {
102
+ getLatestEventIdMock.mockImplementation(() => {
103
+ throw new interface_1.UnsubscribeFromEventsSourceError("Not found");
104
+ });
105
+ await expect(manager.start()).rejects.toThrow(interface_1.UnsubscribeFromEventsSourceError);
106
+ expect(getLatestEventIdMock).toHaveBeenCalledTimes(1);
107
+ expect(listenerMock).toHaveBeenCalledTimes(0);
108
+ expect(getEventsMock).toHaveBeenCalledTimes(0);
109
+ });
110
+ it("should continue processing multiple events", async () => {
111
+ getLatestEventIdMock.mockResolvedValue('eventId1');
112
+ const mockEvents = [
113
+ {
114
+ type: interface_1.DriveEventType.NodeCreated,
115
+ nodeUid: 'node1',
116
+ parentNodeUid: 'parent1',
117
+ isTrashed: false,
118
+ isShared: false,
119
+ treeEventScopeId: 'volume1',
120
+ eventId: 'eventId2',
121
+ },
122
+ {
123
+ type: interface_1.DriveEventType.NodeCreated,
124
+ nodeUid: 'node2',
125
+ parentNodeUid: 'parent1',
126
+ isTrashed: false,
127
+ isShared: false,
128
+ treeEventScopeId: 'volume1',
129
+ eventId: 'eventId3',
84
130
  }
85
- return Promise.resolve({
86
- lastEventId: "eventId2",
87
- more: false,
88
- refresh: false,
89
- events: ["event1", "event2"],
90
- });
131
+ ];
132
+ getEventsMock.mockImplementationOnce(async function* () {
133
+ yield* mockEvents;
134
+ }).mockImplementation(async function* () {
135
+ // Empty generator for subsequent calls
91
136
  });
92
137
  await manager.start();
93
- updateLatestEventIdMock.mockClear();
94
- // First failure.
95
138
  await jest.runOnlyPendingTimersAsync();
96
- expect(listenerMock).toHaveBeenCalledTimes(0);
97
- expect(manager.nextPollTimeout).toBe(30000);
98
- // Second failure.
139
+ expect(listenerMock).toHaveBeenCalledTimes(2);
140
+ expect(listenerMock).toHaveBeenNthCalledWith(1, mockEvents[0]);
141
+ expect(listenerMock).toHaveBeenNthCalledWith(2, mockEvents[1]);
142
+ getEventsMock.mockImplementationOnce(async function* () {
143
+ yield* mockEvents;
144
+ });
99
145
  await jest.runOnlyPendingTimersAsync();
100
- expect(listenerMock).toHaveBeenCalledTimes(0);
101
- expect(manager.nextPollTimeout).toBe(60000);
102
- // Third failure.
146
+ expect(listenerMock).toHaveBeenCalledTimes(4);
147
+ expect(listenerMock).toHaveBeenNthCalledWith(1, mockEvents[0]);
148
+ expect(listenerMock).toHaveBeenNthCalledWith(2, mockEvents[1]);
149
+ });
150
+ it("should retry on error with exponential backoff", async () => {
151
+ getLatestEventIdMock.mockResolvedValue('eventId1');
152
+ let callCount = 0;
153
+ getEventsMock.mockImplementation(async function* () {
154
+ callCount++;
155
+ if (callCount <= 3) {
156
+ throw new Error("Network error");
157
+ }
158
+ yield {
159
+ type: interface_1.DriveEventType.FastForward,
160
+ treeEventScopeId: 'volume1',
161
+ eventId: 'eventId3',
162
+ };
163
+ });
164
+ expect(manager['retryIndex']).toEqual(0);
165
+ expect(await manager.start()).toBeUndefined();
166
+ expect(getEventsMock).toHaveBeenCalledTimes(1);
167
+ expect(manager['retryIndex']).toEqual(1);
168
+ await jest.runOnlyPendingTimersAsync();
169
+ expect(getEventsMock).toHaveBeenCalledTimes(2);
170
+ expect(manager['retryIndex']).toEqual(2);
103
171
  await jest.runOnlyPendingTimersAsync();
172
+ expect(manager['retryIndex']).toEqual(3);
104
173
  expect(listenerMock).toHaveBeenCalledTimes(0);
105
- expect(manager.nextPollTimeout).toBe(90000);
106
- // And now it passes.
107
174
  await jest.runOnlyPendingTimersAsync();
108
175
  expect(listenerMock).toHaveBeenCalledTimes(1);
109
- expect(listenerMock).toHaveBeenCalledWith(["event1", "event2"], false);
110
- expect(updateLatestEventIdMock).toHaveBeenCalledTimes(1);
111
- expect(updateLatestEventIdMock).toHaveBeenCalledWith('eventId2');
176
+ // After success, retry index should reset
177
+ expect(manager['retryIndex']).toEqual(0);
112
178
  });
113
- it("should stop polling", async () => {
114
- await manager.start();
179
+ it("should stop polling when stopped immediately", async () => {
180
+ getLatestEventIdMock.mockResolvedValue('eventId1');
181
+ getEventsMock.mockImplementation(async function* () {
182
+ yield {
183
+ type: interface_1.DriveEventType.FastForward,
184
+ treeEventScopeId: 'volume1',
185
+ eventId: 'eventId1',
186
+ };
187
+ });
188
+ expect(await manager.start()).toBeUndefined();
189
+ expect(getEventsMock).toHaveBeenCalledTimes(1);
115
190
  await manager.stop();
116
191
  await jest.runOnlyPendingTimersAsync();
117
- expect(getEventsMock).toHaveBeenCalledTimes(0);
192
+ // getEvents should have been called once during start, but not again after stop
193
+ expect(getEventsMock).toHaveBeenCalledTimes(1);
194
+ });
195
+ it("should handle empty event streams", async () => {
196
+ getLatestEventIdMock.mockResolvedValue('eventId1');
197
+ getEventsMock.mockImplementation(async function* () {
198
+ // Empty generator - no events
199
+ });
200
+ await manager.start();
201
+ await jest.runOnlyPendingTimersAsync();
202
+ expect(listenerMock).toHaveBeenCalledTimes(0);
118
203
  });
119
204
  });
120
205
  //# sourceMappingURL=eventManager.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventManager.test.js","sourceRoot":"","sources":["../../../src/internal/events/eventManager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventManager.test.js","sourceRoot":"","sources":["../../../src/internal/events/eventManager.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { ProtonDriveEntitiesCache, ProtonDriveTelemetry } from "../../interface";
1
+ import { ProtonDriveTelemetry } from "../../interface";
2
2
  import { DriveAPIService } from "../apiService";
3
- import { DriveListener } from "./interface";
3
+ import { DriveListener, EventSubscription, LatestEventIdProvider } from "./interface";
4
+ import { SharesManager } from "../shares/manager";
4
5
  export type { DriveEvent, DriveListener } from "./interface";
5
6
  export { DriveEventType } from "./interface";
6
7
  /**
@@ -10,41 +11,20 @@ export { DriveEventType } from "./interface";
10
11
  */
11
12
  export declare class DriveEventsService {
12
13
  private telemetry;
14
+ private shareManagement;
15
+ private cacheEventListeners;
16
+ private latestEventIdProvider?;
13
17
  private apiService;
14
- private cache;
15
- private subscribedToRemoteDataUpdates;
16
- private listeners;
17
- private coreEvents;
18
- private volumesEvents;
18
+ private coreEvents?;
19
+ private volumeEventManagers;
19
20
  private logger;
20
- constructor(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveEntitiesCache: ProtonDriveEntitiesCache);
21
+ constructor(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, shareManagement: SharesManager, cacheEventListeners?: DriveListener[], latestEventIdProvider?: LatestEventIdProvider | undefined);
21
22
  /**
22
- * Loads all the subscribed volumes (including core events) from the
23
- * cache and starts listening to their events. Any additional volume
24
- * that is subscribed to later will be automatically started.
23
+ * Subscribe to drive events. The treeEventScopeId can be obtained from a node.
25
24
  */
26
- subscribeToRemoteDataUpdates(): Promise<void>;
27
- /**
28
- * Subscribe to given volume. The volume will be polled for events
29
- * with the polling interval depending on the type of the volume.
30
- * Own volumes are polled with highest frequency, while others are
31
- * polled with lower frequency depending on the total number of
32
- * subscriptions.
33
- *
34
- * @param isOwnVolume - Owned volumes are polled with higher frequency.
35
- */
36
- listenToVolume(volumeId: string, isOwnVolume?: boolean): Promise<void>;
37
- private loadSubscribedVolumeEventServices;
25
+ subscribeToTreeEvents(treeEventScopeId: string, callback: DriveListener): Promise<EventSubscription>;
26
+ subscribeToCoreEvents(callback: DriveListener): Promise<EventSubscription>;
38
27
  private sendNumberOfVolumeSubscriptionsToTelemetry;
39
28
  private createVolumeEventManager;
40
- /**
41
- * Listen to the drive events. The listener will be called with the
42
- * new events as they arrive.
43
- *
44
- * One call always provides events from withing the same volume. The
45
- * second argument of the callback `fullRefreshVolumeId` is thus single
46
- * ID and if multiple volumes must be fully refreshed, client will
47
- * receive multiple calls.
48
- */
49
- addListener(callback: DriveListener): void;
29
+ private getDefaultVolumePollingInterval;
50
30
  }
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DriveEventsService = exports.DriveEventType = void 0;
4
4
  const apiService_1 = require("./apiService");
5
- const cache_1 = require("./cache");
6
5
  const coreEventManager_1 = require("./coreEventManager");
7
6
  const volumeEventManager_1 = require("./volumeEventManager");
7
+ const eventManager_1 = require("./eventManager");
8
8
  var interface_1 = require("./interface");
9
9
  Object.defineProperty(exports, "DriveEventType", { enumerable: true, get: function () { return interface_1.DriveEventType; } });
10
10
  const OWN_VOLUME_POLLING_INTERVAL = 30;
11
11
  const OTHER_VOLUME_POLLING_INTERVAL = 60;
12
+ const CORE_POLLING_INTERVAL = 30;
12
13
  /**
13
14
  * Service for listening to drive events. The service is responsible for
14
15
  * managing the subscriptions to the events and notifying the listeners
@@ -16,101 +17,84 @@ const OTHER_VOLUME_POLLING_INTERVAL = 60;
16
17
  */
17
18
  class DriveEventsService {
18
19
  telemetry;
20
+ shareManagement;
21
+ cacheEventListeners;
22
+ latestEventIdProvider;
19
23
  apiService;
20
- cache;
21
- subscribedToRemoteDataUpdates = false;
22
- listeners = [];
23
24
  coreEvents;
24
- volumesEvents;
25
+ volumeEventManagers;
25
26
  logger;
26
- constructor(telemetry, apiService, driveEntitiesCache) {
27
+ constructor(telemetry, apiService, shareManagement, cacheEventListeners = [], latestEventIdProvider) {
27
28
  this.telemetry = telemetry;
29
+ this.shareManagement = shareManagement;
30
+ this.cacheEventListeners = cacheEventListeners;
31
+ this.latestEventIdProvider = latestEventIdProvider;
28
32
  this.telemetry = telemetry;
29
33
  this.logger = telemetry.getLogger('events');
30
34
  this.apiService = new apiService_1.EventsAPIService(apiService);
31
- this.cache = new cache_1.EventsCache(driveEntitiesCache);
32
- // FIXME: Allow to pass own core events manager from the public interface.
33
- this.coreEvents = new coreEventManager_1.CoreEventManager(this.logger, this.apiService, this.cache);
34
- this.volumesEvents = {};
35
+ this.volumeEventManagers = {};
35
36
  }
36
37
  /**
37
- * Loads all the subscribed volumes (including core events) from the
38
- * cache and starts listening to their events. Any additional volume
39
- * that is subscribed to later will be automatically started.
38
+ * Subscribe to drive events. The treeEventScopeId can be obtained from a node.
40
39
  */
41
- async subscribeToRemoteDataUpdates() {
42
- if (this.subscribedToRemoteDataUpdates) {
43
- return;
44
- }
45
- await this.loadSubscribedVolumeEventServices();
46
- this.sendNumberOfVolumeSubscriptionsToTelemetry();
47
- this.subscribedToRemoteDataUpdates = true;
48
- await this.coreEvents.startSubscription();
49
- await Promise.all(Object.values(this.volumesEvents)
50
- .map((volumeEvents) => volumeEvents.startSubscription()));
51
- }
52
- /**
53
- * Subscribe to given volume. The volume will be polled for events
54
- * with the polling interval depending on the type of the volume.
55
- * Own volumes are polled with highest frequency, while others are
56
- * polled with lower frequency depending on the total number of
57
- * subscriptions.
58
- *
59
- * @param isOwnVolume - Owned volumes are polled with higher frequency.
60
- */
61
- async listenToVolume(volumeId, isOwnVolume = false) {
62
- await this.loadSubscribedVolumeEventServices();
63
- if (this.volumesEvents[volumeId]) {
64
- return;
65
- }
40
+ async subscribeToTreeEvents(treeEventScopeId, callback) {
41
+ const volumeId = treeEventScopeId;
66
42
  this.logger.debug(`Creating volume event manager for volume ${volumeId}`);
67
- const manager = this.createVolumeEventManager(volumeId, isOwnVolume);
68
- // FIXME: Use dynamic algorithm to determine polling interval for non-own volumes.
69
- manager.setPollingInterval(isOwnVolume ? OWN_VOLUME_POLLING_INTERVAL : OTHER_VOLUME_POLLING_INTERVAL);
70
- if (this.subscribedToRemoteDataUpdates) {
71
- await manager.startSubscription();
43
+ let manager = this.volumeEventManagers[volumeId];
44
+ let started = true;
45
+ if (manager === undefined) {
46
+ manager = await this.createVolumeEventManager(volumeId);
47
+ this.volumeEventManagers[volumeId] = manager;
48
+ started = false;
72
49
  this.sendNumberOfVolumeSubscriptionsToTelemetry();
73
50
  }
51
+ const eventSubscription = manager.addListener(callback);
52
+ if (!started) {
53
+ await manager.start();
54
+ }
55
+ return eventSubscription;
74
56
  }
75
- async loadSubscribedVolumeEventServices() {
76
- for (const volumeId of await this.cache.getSubscribedVolumeIds()) {
77
- if (!this.volumesEvents[volumeId]) {
78
- const isOwnVolume = await this.cache.isOwnVolume(volumeId) || false;
79
- this.createVolumeEventManager(volumeId, isOwnVolume);
57
+ // FIXME: Allow to pass own core events manager from the public interface.
58
+ async subscribeToCoreEvents(callback) {
59
+ if (this.latestEventIdProvider === null || this.latestEventIdProvider === undefined) {
60
+ throw new Error('Cannot subscribe to events without passing a latestEventIdProvider in ProtonDriveClient initialization');
61
+ }
62
+ if (this.coreEvents === undefined) {
63
+ const coreEventManager = new coreEventManager_1.CoreEventManager(this.logger, this.apiService);
64
+ const latestEventId = this.latestEventIdProvider.getLatestEventId('core') ?? null;
65
+ this.coreEvents = new eventManager_1.EventManager(coreEventManager, CORE_POLLING_INTERVAL, latestEventId);
66
+ for (const listener of this.cacheEventListeners) {
67
+ this.coreEvents.addListener(listener);
80
68
  }
81
69
  }
70
+ const eventSubscription = this.coreEvents.addListener(callback);
71
+ await this.coreEvents.start();
72
+ return eventSubscription;
82
73
  }
83
74
  sendNumberOfVolumeSubscriptionsToTelemetry() {
84
75
  this.telemetry.logEvent({
85
76
  eventName: 'volumeEventsSubscriptionsChanged',
86
- numberOfVolumeSubscriptions: Object.keys(this.volumesEvents).length,
77
+ numberOfVolumeSubscriptions: Object.keys(this.volumeEventManagers).length,
87
78
  });
88
79
  }
89
- createVolumeEventManager(volumeId, isOwnVolume) {
90
- const manager = new volumeEventManager_1.VolumeEventManager(this.logger, this.apiService, this.cache, volumeId, isOwnVolume);
91
- for (const listener of this.listeners) {
92
- manager.addListener(listener);
80
+ async createVolumeEventManager(volumeId) {
81
+ if (this.latestEventIdProvider === null || this.latestEventIdProvider === undefined) {
82
+ throw new Error('Cannot subscribe to events without passing a latestEventIdProvider in ProtonDriveClient initialization');
93
83
  }
94
- this.volumesEvents[volumeId] = manager;
95
- return manager;
96
- }
97
- /**
98
- * Listen to the drive events. The listener will be called with the
99
- * new events as they arrive.
100
- *
101
- * One call always provides events from withing the same volume. The
102
- * second argument of the callback `fullRefreshVolumeId` is thus single
103
- * ID and if multiple volumes must be fully refreshed, client will
104
- * receive multiple calls.
105
- */
106
- addListener(callback) {
107
- // Add new listener to the list for any new event manager.
108
- this.listeners.push(callback);
109
- // Add new listener to all existings managers.
110
- this.coreEvents.addListener(callback);
111
- for (const volumeEvents of Object.values(this.volumesEvents)) {
112
- volumeEvents.addListener(callback);
84
+ const isOwnVolume = await this.shareManagement.isOwnVolume(volumeId);
85
+ const pollingInterval = this.getDefaultVolumePollingInterval(isOwnVolume);
86
+ const volumeEventManager = new volumeEventManager_1.VolumeEventManager(this.logger, this.apiService, volumeId);
87
+ const latestEventId = this.latestEventIdProvider.getLatestEventId(volumeId);
88
+ const eventManager = new eventManager_1.EventManager(volumeEventManager, pollingInterval, latestEventId);
89
+ for (const listener of this.cacheEventListeners) {
90
+ eventManager.addListener(listener);
113
91
  }
92
+ await eventManager.start();
93
+ this.volumeEventManagers[volumeId] = eventManager;
94
+ return eventManager;
95
+ }
96
+ getDefaultVolumePollingInterval(isOwnVolume) {
97
+ return isOwnVolume ? OWN_VOLUME_POLLING_INTERVAL : OTHER_VOLUME_POLLING_INTERVAL;
114
98
  }
115
99
  }
116
100
  exports.DriveEventsService = DriveEventsService;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/events/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/events/index.ts"],"names":[],"mappings":";;;AAGA,6CAAgD;AAChD,yDAAsD;AACtD,6DAA0D;AAC1D,iDAA8C;AAI9C,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AACzC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC;;;;GAIG;AACH,MAAa,kBAAkB;IAMP;IAAsE;IAAwC;IAAmD;IAL7K,UAAU,CAAmB;IAC7B,UAAU,CAA4B;IACtC,mBAAmB,CAAmD;IACtE,MAAM,CAAS;IAEvB,YAAoB,SAA+B,EAAE,UAA2B,EAAU,eAA8B,EAAU,sBAAuC,EAAE,EAAU,qBAA6C;QAA9M,cAAS,GAAT,SAAS,CAAsB;QAAuC,oBAAe,GAAf,eAAe,CAAe;QAAU,wBAAmB,GAAnB,mBAAmB,CAAsB;QAAU,0BAAqB,GAArB,qBAAqB,CAAwB;QAC9N,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,6BAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,gBAAwB,EAAE,QAAuB;QACzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;YAC7C,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,CAAC,0CAA0C,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,qBAAqB,CAAC,QAAuB;QAC/C,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;QAC9H,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,gBAAgB,GAAG,IAAI,mCAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YAClF,IAAI,CAAC,UAAU,GAAG,IAAI,2BAAY,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAC;YAC3F,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC9C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAEO,0CAA0C;QAC9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACpB,SAAS,EAAE,kCAAkC;YAC7C,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM;SAC5E,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,QAAgB;QACnD,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;QAC9H,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,IAAI,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC1F,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAa,kBAAkB,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;QACtG,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9C,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;QAClD,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,+BAA+B,CAAC,WAAoB;QACxD,OAAO,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,6BAA6B,CAAA;IACpF,CAAC;CACJ;AA/ED,gDA+EC"}