@protontech/drive-sdk 0.3.2 → 0.4.1

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 (171) hide show
  1. package/dist/interface/nodes.d.ts +4 -0
  2. package/dist/interface/nodes.js.map +1 -1
  3. package/dist/internal/apiService/errorCodes.d.ts +1 -0
  4. package/dist/internal/apiService/errors.d.ts +3 -0
  5. package/dist/internal/apiService/errors.js +7 -1
  6. package/dist/internal/apiService/errors.js.map +1 -1
  7. package/dist/internal/devices/interface.d.ts +1 -1
  8. package/dist/internal/devices/manager.js +1 -1
  9. package/dist/internal/devices/manager.js.map +1 -1
  10. package/dist/internal/devices/manager.test.js +3 -3
  11. package/dist/internal/devices/manager.test.js.map +1 -1
  12. package/dist/internal/events/apiService.js +1 -1
  13. package/dist/internal/events/apiService.js.map +1 -1
  14. package/dist/internal/events/coreEventManager.js +1 -1
  15. package/dist/internal/events/coreEventManager.js.map +1 -1
  16. package/dist/internal/events/coreEventManager.test.js +18 -24
  17. package/dist/internal/events/coreEventManager.test.js.map +1 -1
  18. package/dist/internal/events/index.d.ts +3 -4
  19. package/dist/internal/events/index.js +4 -4
  20. package/dist/internal/events/index.js.map +1 -1
  21. package/dist/internal/events/interface.d.ts +3 -0
  22. package/dist/internal/nodes/apiService.d.ts +12 -3
  23. package/dist/internal/nodes/apiService.js +54 -13
  24. package/dist/internal/nodes/apiService.js.map +1 -1
  25. package/dist/internal/nodes/apiService.test.js +35 -2
  26. package/dist/internal/nodes/apiService.test.js.map +1 -1
  27. package/dist/internal/nodes/cache.test.js +1 -0
  28. package/dist/internal/nodes/cache.test.js.map +1 -1
  29. package/dist/internal/nodes/cryptoService.d.ts +1 -1
  30. package/dist/internal/nodes/cryptoService.js +1 -1
  31. package/dist/internal/nodes/cryptoService.js.map +1 -1
  32. package/dist/internal/nodes/cryptoService.test.js +4 -4
  33. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  34. package/dist/internal/nodes/errors.d.ts +4 -0
  35. package/dist/internal/nodes/errors.js +9 -0
  36. package/dist/internal/nodes/errors.js.map +1 -0
  37. package/dist/internal/nodes/extendedAttributes.d.ts +2 -2
  38. package/dist/internal/nodes/extendedAttributes.js +15 -11
  39. package/dist/internal/nodes/extendedAttributes.js.map +1 -1
  40. package/dist/internal/nodes/extendedAttributes.test.js +19 -1
  41. package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
  42. package/dist/internal/nodes/index.test.js +2 -1
  43. package/dist/internal/nodes/index.test.js.map +1 -1
  44. package/dist/internal/nodes/interface.d.ts +5 -1
  45. package/dist/internal/nodes/nodesAccess.d.ts +3 -3
  46. package/dist/internal/nodes/nodesAccess.js +25 -15
  47. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  48. package/dist/internal/nodes/nodesAccess.test.js +48 -8
  49. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  50. package/dist/internal/nodes/nodesManagement.d.ts +2 -0
  51. package/dist/internal/nodes/nodesManagement.js +87 -9
  52. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  53. package/dist/internal/nodes/nodesManagement.test.js +81 -5
  54. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  55. package/dist/internal/photos/albums.d.ts +9 -7
  56. package/dist/internal/photos/albums.js +26 -13
  57. package/dist/internal/photos/albums.js.map +1 -1
  58. package/dist/internal/photos/apiService.d.ts +34 -3
  59. package/dist/internal/photos/apiService.js +96 -3
  60. package/dist/internal/photos/apiService.js.map +1 -1
  61. package/dist/internal/photos/index.d.ts +31 -4
  62. package/dist/internal/photos/index.js +57 -7
  63. package/dist/internal/photos/index.js.map +1 -1
  64. package/dist/internal/photos/interface.d.ts +25 -1
  65. package/dist/internal/photos/shares.d.ts +43 -0
  66. package/dist/internal/photos/shares.js +112 -0
  67. package/dist/internal/photos/shares.js.map +1 -0
  68. package/dist/internal/photos/timeline.d.ts +15 -0
  69. package/dist/internal/photos/timeline.js +22 -0
  70. package/dist/internal/photos/timeline.js.map +1 -0
  71. package/dist/internal/photos/upload.d.ts +59 -0
  72. package/dist/internal/photos/upload.js +104 -0
  73. package/dist/internal/photos/upload.js.map +1 -0
  74. package/dist/internal/shares/manager.d.ts +1 -1
  75. package/dist/internal/shares/manager.js +4 -4
  76. package/dist/internal/shares/manager.js.map +1 -1
  77. package/dist/internal/shares/manager.test.js +7 -7
  78. package/dist/internal/shares/manager.test.js.map +1 -1
  79. package/dist/internal/sharing/interface.d.ts +1 -1
  80. package/dist/internal/sharing/sharingAccess.js +1 -1
  81. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  82. package/dist/internal/sharing/sharingAccess.test.js +1 -1
  83. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  84. package/dist/internal/sharingPublic/apiService.js +2 -0
  85. package/dist/internal/sharingPublic/apiService.js.map +1 -1
  86. package/dist/internal/upload/apiService.d.ts +2 -2
  87. package/dist/internal/upload/apiService.js +1 -1
  88. package/dist/internal/upload/apiService.js.map +1 -1
  89. package/dist/internal/upload/cryptoService.d.ts +2 -2
  90. package/dist/internal/upload/cryptoService.js.map +1 -1
  91. package/dist/internal/upload/fileUploader.d.ts +1 -0
  92. package/dist/internal/upload/fileUploader.js +3 -0
  93. package/dist/internal/upload/fileUploader.js.map +1 -1
  94. package/dist/internal/upload/interface.d.ts +3 -0
  95. package/dist/internal/upload/manager.d.ts +12 -11
  96. package/dist/internal/upload/manager.js +8 -2
  97. package/dist/internal/upload/manager.js.map +1 -1
  98. package/dist/internal/upload/manager.test.js +8 -0
  99. package/dist/internal/upload/manager.test.js.map +1 -1
  100. package/dist/internal/upload/streamUploader.d.ts +34 -24
  101. package/dist/internal/upload/streamUploader.js +7 -4
  102. package/dist/internal/upload/streamUploader.js.map +1 -1
  103. package/dist/internal/upload/streamUploader.test.js +1 -1
  104. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  105. package/dist/protonDriveClient.d.ts +20 -3
  106. package/dist/protonDriveClient.js +23 -4
  107. package/dist/protonDriveClient.js.map +1 -1
  108. package/dist/protonDrivePhotosClient.d.ts +102 -12
  109. package/dist/protonDrivePhotosClient.js +149 -29
  110. package/dist/protonDrivePhotosClient.js.map +1 -1
  111. package/dist/transformers.d.ts +1 -1
  112. package/dist/transformers.js +1 -0
  113. package/dist/transformers.js.map +1 -1
  114. package/package.json +1 -1
  115. package/src/interface/nodes.ts +4 -0
  116. package/src/internal/apiService/errorCodes.ts +1 -0
  117. package/src/internal/apiService/errors.ts +6 -0
  118. package/src/internal/devices/interface.ts +1 -1
  119. package/src/internal/devices/manager.test.ts +3 -3
  120. package/src/internal/devices/manager.ts +1 -1
  121. package/src/internal/events/apiService.ts +1 -1
  122. package/src/internal/events/coreEventManager.test.ts +21 -27
  123. package/src/internal/events/coreEventManager.ts +1 -1
  124. package/src/internal/events/index.ts +3 -4
  125. package/src/internal/events/interface.ts +4 -0
  126. package/src/internal/nodes/apiService.test.ts +58 -1
  127. package/src/internal/nodes/apiService.ts +104 -17
  128. package/src/internal/nodes/cache.test.ts +1 -0
  129. package/src/internal/nodes/cryptoService.test.ts +8 -8
  130. package/src/internal/nodes/cryptoService.ts +1 -1
  131. package/src/internal/nodes/errors.ts +5 -0
  132. package/src/internal/nodes/extendedAttributes.test.ts +23 -1
  133. package/src/internal/nodes/extendedAttributes.ts +26 -18
  134. package/src/internal/nodes/index.test.ts +2 -1
  135. package/src/internal/nodes/interface.ts +6 -1
  136. package/src/internal/nodes/nodesAccess.test.ts +68 -8
  137. package/src/internal/nodes/nodesAccess.ts +42 -15
  138. package/src/internal/nodes/nodesManagement.test.ts +100 -5
  139. package/src/internal/nodes/nodesManagement.ts +101 -13
  140. package/src/internal/photos/albums.ts +31 -12
  141. package/src/internal/photos/apiService.ts +159 -4
  142. package/src/internal/photos/index.ts +116 -9
  143. package/src/internal/photos/interface.ts +23 -1
  144. package/src/internal/photos/shares.ts +134 -0
  145. package/src/internal/photos/timeline.ts +24 -0
  146. package/src/internal/photos/upload.ts +209 -0
  147. package/src/internal/shares/manager.test.ts +7 -7
  148. package/src/internal/shares/manager.ts +4 -4
  149. package/src/internal/sharing/interface.ts +1 -1
  150. package/src/internal/sharing/sharingAccess.test.ts +1 -1
  151. package/src/internal/sharing/sharingAccess.ts +1 -1
  152. package/src/internal/sharingPublic/apiService.ts +2 -0
  153. package/src/internal/upload/apiService.ts +3 -3
  154. package/src/internal/upload/cryptoService.ts +2 -2
  155. package/src/internal/upload/fileUploader.ts +12 -0
  156. package/src/internal/upload/interface.ts +3 -0
  157. package/src/internal/upload/manager.test.ts +8 -0
  158. package/src/internal/upload/manager.ts +20 -10
  159. package/src/internal/upload/streamUploader.test.ts +17 -12
  160. package/src/internal/upload/streamUploader.ts +35 -27
  161. package/src/protonDriveClient.ts +33 -4
  162. package/src/protonDrivePhotosClient.ts +251 -32
  163. package/src/transformers.ts +2 -0
  164. package/dist/internal/photos/cache.d.ts +0 -6
  165. package/dist/internal/photos/cache.js +0 -15
  166. package/dist/internal/photos/cache.js.map +0 -1
  167. package/dist/internal/photos/photosTimeline.d.ts +0 -10
  168. package/dist/internal/photos/photosTimeline.js +0 -19
  169. package/dist/internal/photos/photosTimeline.js.map +0 -1
  170. package/src/internal/photos/cache.ts +0 -11
  171. package/src/internal/photos/photosTimeline.ts +0 -17
@@ -1,47 +1,167 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProtonDrivePhotosClient = void 0;
4
- const apiService_1 = require("./internal/apiService");
4
+ const config_1 = require("./config");
5
5
  const crypto_1 = require("./crypto");
6
- const shares_1 = require("./internal/shares");
6
+ const telemetry_1 = require("./telemetry");
7
+ const transformers_1 = require("./transformers");
8
+ const apiService_1 = require("./internal/apiService");
9
+ const download_1 = require("./internal/download");
10
+ const events_1 = require("./internal/events");
7
11
  const nodes_1 = require("./internal/nodes");
8
12
  const photos_1 = require("./internal/photos");
9
- const events_1 = require("./internal/events");
10
13
  const sdkEvents_1 = require("./internal/sdkEvents");
11
- const config_1 = require("./config");
12
- const telemetry_1 = require("./telemetry");
13
- // TODO: this is only example, on background it use drive internals, but it exposes nice interface for photos
14
+ const shares_1 = require("./internal/shares");
15
+ const sharing_1 = require("./internal/sharing");
16
+ /**
17
+ * ProtonDrivePhotosClient is the interface to access Photos functionality.
18
+ *
19
+ * The client provides high-level operations for managing photos, albums, sharing,
20
+ * and downloading/uploading photos.
21
+ *
22
+ * @deprecated This is an experimental feature that might change without a warning.
23
+ */
14
24
  class ProtonDrivePhotosClient {
25
+ logger;
26
+ sdkEvents;
27
+ events;
28
+ photoShares;
15
29
  nodes;
30
+ sharing;
31
+ download;
32
+ upload;
16
33
  photos;
17
- constructor({ httpClient, entitiesCache, cryptoCache, account, openPGPCryptoModule, srpModule, config, telemetry, }) {
34
+ experimental;
35
+ constructor({ httpClient, entitiesCache, cryptoCache, account, openPGPCryptoModule, srpModule, config, telemetry, latestEventIdProvider, }) {
18
36
  if (!telemetry) {
19
37
  telemetry = new telemetry_1.Telemetry();
20
38
  }
39
+ this.logger = telemetry.getLogger('interface');
21
40
  const fullConfig = (0, config_1.getConfig)(config);
22
- const sdkEvents = new sdkEvents_1.SDKEvents(telemetry);
41
+ this.sdkEvents = new sdkEvents_1.SDKEvents(telemetry);
23
42
  const cryptoModule = new crypto_1.DriveCrypto(openPGPCryptoModule, srpModule);
24
- const apiService = new apiService_1.DriveAPIService(telemetry, sdkEvents, httpClient, fullConfig.baseUrl, fullConfig.language);
25
- const shares = (0, shares_1.initSharesModule)(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule);
26
- this.nodes = (0, nodes_1.initNodesModule)(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule, shares);
27
- const cacheEventListeners = [this.nodes.eventHandler.updateNodesCacheOnEvent];
28
- new events_1.DriveEventsService(telemetry, apiService, shares, cacheEventListeners);
29
- this.photos = (0, photos_1.initPhotosModule)(apiService, entitiesCache, this.nodes.access);
30
- }
31
- // Timeline or album view
32
- iterateTimelinePhotos() { } // returns only UIDs and dates - used to show grid and scrolling
33
- iterateAlbumPhotos() { } // same as above but for album
34
- iterateThumbnails() { } // returns thumbnails for passed photos that are visible in the UI
35
- getPhoto() { } // returns full photo details
36
- // Album management
37
- createAlbum(albumName) {
38
- return this.photos.albums.createAlbum(albumName);
39
- }
40
- renameAlbum() { }
41
- shareAlbum() { }
42
- deleteAlbum() { }
43
- iterateAlbums() { }
44
- addPhotosToAlbum() { }
43
+ const apiService = new apiService_1.DriveAPIService(telemetry, this.sdkEvents, httpClient, fullConfig.baseUrl, fullConfig.language);
44
+ const coreShares = (0, shares_1.initSharesModule)(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule);
45
+ this.photoShares = (0, photos_1.initPhotoSharesModule)(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule, coreShares);
46
+ this.nodes = (0, nodes_1.initNodesModule)(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule, this.photoShares);
47
+ this.photos = (0, photos_1.initPhotosModule)(apiService, this.photoShares, this.nodes.access);
48
+ this.sharing = (0, sharing_1.initSharingModule)(telemetry, apiService, entitiesCache, account, cryptoModule, this.photoShares, this.nodes.access);
49
+ this.download = (0, download_1.initDownloadModule)(telemetry, apiService, cryptoModule, account, this.photoShares, this.nodes.access, this.nodes.revisions);
50
+ this.upload = (0, photos_1.initPhotoUploadModule)(telemetry, apiService, cryptoModule, this.photoShares, this.nodes.access, fullConfig.clientUid);
51
+ // These are used to keep the internal cache up to date
52
+ const cacheEventListeners = [
53
+ this.nodes.eventHandler.updateNodesCacheOnEvent.bind(this.nodes.eventHandler),
54
+ this.sharing.eventHandler.handleDriveEvent.bind(this.sharing.eventHandler),
55
+ ];
56
+ this.events = new events_1.DriveEventsService(telemetry, apiService, this.photoShares, cacheEventListeners, latestEventIdProvider);
57
+ this.experimental = {
58
+ getNodeUrl: async (nodeUid) => {
59
+ this.logger.debug(`Getting node URL for ${(0, transformers_1.getUid)(nodeUid)}`);
60
+ return this.nodes.access.getNodeUrl((0, transformers_1.getUid)(nodeUid));
61
+ },
62
+ };
63
+ }
64
+ /**
65
+ * Subscribes to the general SDK events.
66
+ *
67
+ * See `ProtonDriveClient.onMessage` for more information.
68
+ */
69
+ onMessage(eventName, callback) {
70
+ this.logger.debug(`Subscribing to event ${eventName}`);
71
+ return this.sdkEvents.addListener(eventName, callback);
72
+ }
73
+ /**
74
+ * Subscribes to the remote data updates for all files in a tree.
75
+ *
76
+ * See `ProtonDriveClient.subscribeToTreeEvents` for more information.
77
+ */
78
+ async subscribeToTreeEvents(treeEventScopeId, callback) {
79
+ this.logger.debug('Subscribing to node updates');
80
+ return this.events.subscribeToTreeEvents(treeEventScopeId, callback);
81
+ }
82
+ /**
83
+ * Subscribes to the remote general data updates.
84
+ *
85
+ * See `ProtonDriveClient.subscribeToDriveEvents` for more information.
86
+ */
87
+ async subscribeToDriveEvents(callback) {
88
+ this.logger.debug('Subscribing to core updates');
89
+ return this.events.subscribeToCoreEvents(callback);
90
+ }
91
+ /**
92
+ * Iterates all the photos for the timeline view.
93
+ *
94
+ * The output includes only necessary information to quickly prepare
95
+ * the whole timeline view with the break-down per month/year and fast
96
+ * scrollbar.
97
+ *
98
+ * Individual photos details must be loaded separately based on what
99
+ * is visible in the UI.
100
+ *
101
+ * The output is sorted by the capture time, starting from the
102
+ * the most recent photos.
103
+ */
104
+ async *iterateTimeline(signal) {
105
+ // TODO: expose better type
106
+ yield* this.photos.timeline.iterateTimeline(signal);
107
+ }
108
+ /**
109
+ * Iterates the nodes by their UIDs.
110
+ *
111
+ * See `ProtonDriveClient.iterateNodes` for more information.
112
+ */
113
+ async *iterateNodes(nodeUids, signal) {
114
+ this.logger.info(`Iterating ${nodeUids.length} nodes`);
115
+ // TODO: expose photo type
116
+ yield* (0, transformers_1.convertInternalMissingNodeIterator)(this.nodes.access.iterateNodes((0, transformers_1.getUids)(nodeUids), signal));
117
+ }
118
+ /**
119
+ * Get the node by its UID.
120
+ *
121
+ * See `ProtonDriveClient.getNode` for more information.
122
+ */
123
+ async getNode(nodeUid) {
124
+ this.logger.info(`Getting node ${(0, transformers_1.getUid)(nodeUid)}`);
125
+ return (0, transformers_1.convertInternalNodePromise)(this.nodes.access.getNode((0, transformers_1.getUid)(nodeUid)));
126
+ }
127
+ /**
128
+ * Iterates the albums.
129
+ *
130
+ * The output is not sorted and the order of the nodes is not guaranteed.
131
+ */
132
+ async *iterateAlbums(signal) {
133
+ this.logger.info('Iterating albums');
134
+ // TODO: expose album type
135
+ yield* (0, transformers_1.convertInternalNodeIterator)(this.photos.albums.iterateAlbums(signal));
136
+ }
137
+ /**
138
+ * Get the file downloader to download the node content.
139
+ *
140
+ * See `ProtonDriveClient.getFileDownloader` for more information.
141
+ */
142
+ async getFileDownloader(nodeUid, signal) {
143
+ this.logger.info(`Getting file downloader for ${(0, transformers_1.getUid)(nodeUid)}`);
144
+ return this.download.getFileDownloader((0, transformers_1.getUid)(nodeUid), signal);
145
+ }
146
+ /**
147
+ * Iterates the thumbnails of the given nodes.
148
+ *
149
+ * See `ProtonDriveClient.iterateThumbnails` for more information.
150
+ */
151
+ async *iterateThumbnails(nodeUids, thumbnailType, signal) {
152
+ this.logger.info(`Iterating ${nodeUids.length} thumbnails`);
153
+ yield* this.download.iterateThumbnails((0, transformers_1.getUids)(nodeUids), thumbnailType, signal);
154
+ }
155
+ /**
156
+ * Get the file uploader to upload a new file.
157
+ *
158
+ * See `ProtonDriveClient.getFileUploader` for more information.
159
+ */
160
+ async getFileUploader(name, metadata, signal) {
161
+ this.logger.info(`Getting file uploader`);
162
+ const parentFolderUid = await this.nodes.access.getVolumeRootFolder();
163
+ return this.upload.getFileUploader((0, transformers_1.getUid)(parentFolderUid), name, metadata, signal);
164
+ }
45
165
  }
46
166
  exports.ProtonDrivePhotosClient = ProtonDrivePhotosClient;
47
167
  //# sourceMappingURL=protonDrivePhotosClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protonDrivePhotosClient.js","sourceRoot":"","sources":["../src/protonDrivePhotosClient.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;AAExD,qCAAuC;AACvC,8CAAqD;AACrD,4CAAmD;AACnD,8CAAqD;AACrD,8CAAuD;AACvD,oDAAiD;AACjD,qCAAqC;AACrC,2CAAwC;AAExC,6GAA6G;AAC7G,MAAa,uBAAuB;IACxB,KAAK,CAAqC;IAC1C,MAAM,CAAsC;IAEpD,YAAY,EACR,UAAU,EACV,aAAa,EACb,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,SAAS,EACT,MAAM,EACN,SAAS,GAC2B;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,oBAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,IAAI,4BAAe,CAClC,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,QAAQ,CACtB,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,yBAAgB,EAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1G,IAAI,CAAC,KAAK,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/G,MAAM,mBAAmB,GAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QAC/F,IAAI,2BAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAA,yBAAgB,EAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,yBAAyB;IACzB,qBAAqB,KAAI,CAAC,CAAC,gEAAgE;IAC3F,kBAAkB,KAAI,CAAC,CAAC,8BAA8B;IACtD,iBAAiB,KAAI,CAAC,CAAC,kEAAkE;IACzF,QAAQ,KAAI,CAAC,CAAC,6BAA6B;IAE3C,mBAAmB;IACnB,WAAW,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IACD,WAAW,KAAI,CAAC;IAChB,UAAU,KAAI,CAAC;IACf,WAAW,KAAI,CAAC;IAChB,aAAa,KAAI,CAAC;IAClB,gBAAgB,KAAI,CAAC;CACxB;AAlDD,0DAkDC"}
1
+ {"version":3,"file":"protonDrivePhotosClient.js","sourceRoot":"","sources":["../src/protonDrivePhotosClient.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { MaybeNode as PublicMaybeNode, MaybeMissingNode as PublicMaybeMissingNode, Result, MissingNode } from './interface';
2
2
  import { DecryptedNode as InternalNode } from './internal/nodes';
3
- type InternalPartialNode = Pick<InternalNode, 'uid' | 'parentUid' | 'name' | 'keyAuthor' | 'nameAuthor' | 'directRole' | 'membership' | 'type' | 'mediaType' | 'isShared' | 'creationTime' | 'trashTime' | 'activeRevision' | 'folder' | 'totalStorageSize' | 'errors' | 'shareId' | 'treeEventScopeId'>;
3
+ type InternalPartialNode = Pick<InternalNode, 'uid' | 'parentUid' | 'name' | 'keyAuthor' | 'nameAuthor' | 'directRole' | 'membership' | 'type' | 'mediaType' | 'isShared' | 'isSharedPublicly' | 'creationTime' | 'trashTime' | 'activeRevision' | 'folder' | 'totalStorageSize' | 'errors' | 'shareId' | 'treeEventScopeId'>;
4
4
  type NodeUid = string | {
5
5
  uid: string;
6
6
  } | Result<{
@@ -54,6 +54,7 @@ function convertInternalNode(node) {
54
54
  type: node.type,
55
55
  mediaType: node.mediaType,
56
56
  isShared: node.isShared,
57
+ isSharedPublicly: node.isSharedPublicly,
57
58
  creationTime: node.creationTime,
58
59
  trashTime: node.trashTime,
59
60
  totalStorageSize: node.totalStorageSize,
@@ -1 +1 @@
1
- {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@protontech/drive-sdk",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "description": "Proton Drive SDK",
5
5
  "license": "GPL-3.0",
6
6
  "main": "dist/index.js",
@@ -75,6 +75,10 @@ export type NodeEntity = {
75
75
  * one user, or via public link.
76
76
  */
77
77
  isShared: boolean;
78
+ /**
79
+ * Whether the node is publicly shared. If true, the node is shared via public link.
80
+ */
81
+ isSharedPublicly: boolean;
78
82
  /**
79
83
  * Provides the ID of the share that the node is shared with.
80
84
  *
@@ -18,6 +18,7 @@ export const enum ErrorCode {
18
18
  OK = 1000,
19
19
  OK_MANY = 1001,
20
20
  OK_ASYNC = 1002,
21
+ INVALID_REQUIREMENTS = 2000,
21
22
  INVALID_VALUE = 2001,
22
23
  NOT_ENOUGH_PERMISSIONS = 2011,
23
24
  NOT_ENOUGH_PERMISSIONS_TO_GRANT_PERMISSIONS = 2026,
@@ -57,6 +57,8 @@ export function apiErrorFactory({
57
57
  // Here we convert only general enough codes. Specific cases that are
58
58
  // not clear from the code itself must be handled by each module
59
59
  // separately.
60
+ case ErrorCode.INVALID_REQUIREMENTS:
61
+ return new InvalidRequirementsAPIError(message, code, details);
60
62
  case ErrorCode.INVALID_VALUE:
61
63
  case ErrorCode.NOT_ENOUGH_PERMISSIONS:
62
64
  case ErrorCode.NOT_ENOUGH_PERMISSIONS_TO_GRANT_PERMISSIONS:
@@ -108,3 +110,7 @@ export class APICodeError extends ServerError {
108
110
  export class NotFoundAPIError extends ValidationError {
109
111
  name = 'NotFoundAPIError';
110
112
  }
113
+
114
+ export class InvalidRequirementsAPIError extends ValidationError {
115
+ name = 'InvalidRequirementsAPIError';
116
+ }
@@ -13,7 +13,7 @@ export type DeviceMetadata = {
13
13
  };
14
14
 
15
15
  export interface SharesService {
16
- getMyFilesIDs(): Promise<{ volumeId: string }>;
16
+ getOwnVolumeIDs(): Promise<{ volumeId: string }>;
17
17
  getMyFilesShareMemberEmailKey(): Promise<{
18
18
  addressId: string;
19
19
  email: string;
@@ -30,7 +30,7 @@ describe('DevicesManager', () => {
30
30
  };
31
31
  // @ts-expect-error No need to implement all methods for mocking
32
32
  sharesService = {
33
- getMyFilesIDs: jest.fn(),
33
+ getOwnVolumeIDs: jest.fn(),
34
34
  };
35
35
  // @ts-expect-error No need to implement all methods for mocking
36
36
  nodesService = {};
@@ -74,13 +74,13 @@ describe('DevicesManager', () => {
74
74
  shareId: 'shareid',
75
75
  } as DeviceMetadata;
76
76
 
77
- sharesService.getMyFilesIDs.mockResolvedValue({ volumeId });
77
+ sharesService.getOwnVolumeIDs.mockResolvedValue({ volumeId });
78
78
  cryptoService.createDevice.mockResolvedValue({ address, shareKey, node });
79
79
  apiService.createDevice.mockResolvedValue(createdDevice);
80
80
 
81
81
  const result = await manager.createDevice(name, deviceType);
82
82
 
83
- expect(sharesService.getMyFilesIDs).toHaveBeenCalled();
83
+ expect(sharesService.getOwnVolumeIDs).toHaveBeenCalled();
84
84
  expect(cryptoService.createDevice).toHaveBeenCalledWith(name);
85
85
  expect(apiService.createDevice).toHaveBeenCalledWith(
86
86
  { volumeId, type: deviceType },
@@ -47,7 +47,7 @@ export class DevicesManager {
47
47
  }
48
48
 
49
49
  async createDevice(name: string, deviceType: DeviceType): Promise<Device> {
50
- const { volumeId } = await this.sharesService.getMyFilesIDs();
50
+ const { volumeId } = await this.sharesService.getOwnVolumeIDs();
51
51
  const { address, shareKey, node } = await this.cryptoService.createDevice(name);
52
52
 
53
53
  const device = await this.apiService.createDevice(
@@ -57,7 +57,7 @@ export class EventsAPIService {
57
57
  return {
58
58
  latestEventId: result.EventID,
59
59
  more: result.More === 1,
60
- refresh: result.Refresh === 1,
60
+ refresh,
61
61
  events,
62
62
  };
63
63
  }
@@ -46,29 +46,6 @@ describe('CoreEventManager', () => {
46
46
  const eventId = 'event1';
47
47
  const latestEventId = 'event2';
48
48
 
49
- it('should yield ShareWithMeUpdated event when refresh is true', async () => {
50
- const mockEvents: DriveEventsListWithStatus = {
51
- latestEventId,
52
- more: false,
53
- refresh: true,
54
- events: [],
55
- };
56
- mockApiService.getCoreEvents.mockResolvedValue(mockEvents);
57
-
58
- const events = [];
59
- for await (const event of coreEventManager.getEvents(eventId)) {
60
- events.push(event);
61
- }
62
-
63
- expect(events).toHaveLength(1);
64
- expect(events[0]).toEqual({
65
- type: DriveEventType.SharedWithMeUpdated,
66
- treeEventScopeId: 'core',
67
- eventId: latestEventId,
68
- });
69
- expect(mockApiService.getCoreEvents).toHaveBeenCalledWith(eventId);
70
- });
71
-
72
49
  it('should yield all events when there are actual events', async () => {
73
50
  const mockEvent1: DriveEvent = {
74
51
  type: DriveEventType.SharedWithMeUpdated,
@@ -88,14 +65,31 @@ describe('CoreEventManager', () => {
88
65
  };
89
66
  mockApiService.getCoreEvents.mockResolvedValue(mockEvents);
90
67
 
91
- const events = [];
92
- for await (const event of coreEventManager.getEvents(eventId)) {
93
- events.push(event);
94
- }
68
+ const events = await Array.fromAsync(coreEventManager.getEvents(eventId));
95
69
 
96
70
  expect(events).toHaveLength(2);
97
71
  expect(events[0]).toEqual(mockEvent1);
98
72
  expect(events[1]).toEqual(mockEvent2);
99
73
  });
74
+
75
+ it('should yield FastForward event there are no events but lastEventId changed', async () => {
76
+ const mockEvents: DriveEventsListWithStatus = {
77
+ latestEventId,
78
+ more: false,
79
+ refresh: false,
80
+ events: [],
81
+ };
82
+ mockApiService.getCoreEvents.mockResolvedValue(mockEvents);
83
+
84
+ const events = await Array.fromAsync(coreEventManager.getEvents(eventId));
85
+
86
+ expect(events).toHaveLength(1);
87
+ expect(events[0]).toEqual({
88
+ type: DriveEventType.FastForward,
89
+ treeEventScopeId: 'core',
90
+ eventId: latestEventId,
91
+ });
92
+ expect(mockApiService.getCoreEvents).toHaveBeenCalledWith(eventId);
93
+ });
100
94
  });
101
95
  });
@@ -32,7 +32,7 @@ export class CoreEventManager implements EventManagerInterface<DriveEvent> {
32
32
  const events = await this.apiService.getCoreEvents(eventId);
33
33
  if (events.events.length === 0 && events.latestEventId !== eventId) {
34
34
  yield {
35
- type: DriveEventType.SharedWithMeUpdated,
35
+ type: DriveEventType.FastForward,
36
36
  treeEventScopeId: 'core',
37
37
  eventId: events.latestEventId,
38
38
  };
@@ -1,11 +1,10 @@
1
1
  import { Logger, ProtonDriveTelemetry } from '../../interface';
2
2
  import { DriveAPIService } from '../apiService';
3
- import { DriveEvent, DriveListener, EventSubscription, LatestEventIdProvider } from './interface';
3
+ import { DriveEvent, DriveListener, EventSubscription, LatestEventIdProvider, SharesService } from './interface';
4
4
  import { EventsAPIService } from './apiService';
5
5
  import { CoreEventManager } from './coreEventManager';
6
6
  import { VolumeEventManager } from './volumeEventManager';
7
7
  import { EventManager } from './eventManager';
8
- import { SharesManager } from '../shares/manager';
9
8
 
10
9
  export type { DriveEvent, DriveListener, EventSubscription } from './interface';
11
10
  export { DriveEventType } from './interface';
@@ -28,7 +27,7 @@ export class DriveEventsService {
28
27
  constructor(
29
28
  private telemetry: ProtonDriveTelemetry,
30
29
  apiService: DriveAPIService,
31
- private shareManagement: SharesManager,
30
+ private sharesService: SharesService,
32
31
  private cacheEventListeners: DriveListener[] = [],
33
32
  private latestEventIdProvider?: LatestEventIdProvider,
34
33
  ) {
@@ -104,7 +103,7 @@ export class DriveEventsService {
104
103
  this.logger.debug(`Creating volume event manager for volume ${volumeId}`);
105
104
  const volumeEventManager = new VolumeEventManager(this.logger, this.apiService, volumeId);
106
105
 
107
- const isOwnVolume = await this.shareManagement.isOwnVolume(volumeId);
106
+ const isOwnVolume = await this.sharesService.isOwnVolume(volumeId);
108
107
  const pollingInterval = this.getDefaultVolumePollingInterval(isOwnVolume);
109
108
  const latestEventId = this.latestEventIdProvider.getLatestEventId(volumeId);
110
109
  const eventManager = new EventManager<DriveEvent>(volumeEventManager, pollingInterval, latestEventId);
@@ -112,3 +112,7 @@ export interface EventManagerInterface<T> {
112
112
  getEvents(eventId: string): AsyncIterable<T>;
113
113
  getLogger(): Logger;
114
114
  }
115
+
116
+ export interface SharesService {
117
+ isOwnVolume(volumeId: string): Promise<boolean>;
118
+ }
@@ -1,7 +1,8 @@
1
1
  import { MemberRole, NodeType } from '../../interface';
2
2
  import { getMockLogger } from '../../tests/logger';
3
- import { DriveAPIService, ErrorCode } from '../apiService';
3
+ import { DriveAPIService, ErrorCode, InvalidRequirementsAPIError } from '../apiService';
4
4
  import { NodeAPIService } from './apiService';
5
+ import { NodeOutOfSyncError } from './errors';
5
6
 
6
7
  function generateAPIFileNode(linkOverrides = {}, overrides = {}) {
7
8
  const node = generateAPINode();
@@ -142,6 +143,7 @@ function generateNode() {
142
143
 
143
144
  shareId: undefined,
144
145
  isShared: false,
146
+ isSharedPublicly: false,
145
147
  directRole: MemberRole.Admin,
146
148
  membership: undefined,
147
149
 
@@ -254,6 +256,7 @@ describe('nodeAPIService', () => {
254
256
  generateFolderNode(
255
257
  {
256
258
  isShared: true,
259
+ isSharedPublicly: false,
257
260
  shareId: 'shareId',
258
261
  directRole: MemberRole.Admin,
259
262
  membership: {
@@ -295,6 +298,7 @@ describe('nodeAPIService', () => {
295
298
  generateFolderNode(
296
299
  {
297
300
  isShared: true,
301
+ isSharedPublicly: false,
298
302
  shareId: 'shareId',
299
303
  directRole: MemberRole.Viewer,
300
304
  membership: {
@@ -316,6 +320,26 @@ describe('nodeAPIService', () => {
316
320
  );
317
321
  });
318
322
 
323
+ it('should get publicly shared node', async () => {
324
+ await testIterateNodes(
325
+ generateAPIFolderNode(
326
+ {},
327
+ {
328
+ Sharing: {
329
+ ShareID: 'shareId',
330
+ ShareURLID: 'shareUrlId',
331
+ },
332
+ },
333
+ ),
334
+ generateFolderNode({
335
+ isShared: true,
336
+ isSharedPublicly: true,
337
+ shareId: 'shareId',
338
+ directRole: MemberRole.Admin,
339
+ }),
340
+ );
341
+ });
342
+
319
343
  it('should get trashed file node', async () => {
320
344
  await testIterateNodes(
321
345
  generateAPIFileNode({
@@ -542,4 +566,37 @@ describe('nodeAPIService', () => {
542
566
  }
543
567
  });
544
568
  });
569
+
570
+ describe('renameNode', () => {
571
+ it('should rename node', async () => {
572
+ await api.renameNode(
573
+ 'volumeId~nodeId1',
574
+ { hash: 'originalHash' },
575
+ { encryptedName: 'encryptedName1', nameSignatureEmail: 'nameSignatureEmail1', hash: 'newHash' },
576
+ );
577
+
578
+ expect(apiMock.put).toHaveBeenCalledWith(
579
+ 'drive/v2/volumes/volumeId/links/nodeId1/rename',
580
+ {
581
+ Name: 'encryptedName1',
582
+ NameSignatureEmail: 'nameSignatureEmail1',
583
+ Hash: 'newHash',
584
+ OriginalHash: 'originalHash',
585
+ },
586
+ undefined,
587
+ );
588
+ });
589
+
590
+ it('should throw error if node is out of sync', async () => {
591
+ apiMock.put = jest.fn().mockRejectedValue(new InvalidRequirementsAPIError('Node is out of sync'));
592
+
593
+ await expect(
594
+ api.renameNode(
595
+ 'volumeId~nodeId1',
596
+ { hash: 'originalHash' },
597
+ { encryptedName: 'encryptedName1', nameSignatureEmail: 'nameSignatureEmail1', hash: 'newHash' },
598
+ ),
599
+ ).rejects.toThrow(new NodeOutOfSyncError('Node is out of sync'));
600
+ });
601
+ });
545
602
  });