@protontech/drive-sdk 0.0.12 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/dist/cache/index.d.ts +1 -0
  2. package/dist/cache/index.js +3 -1
  3. package/dist/cache/index.js.map +1 -1
  4. package/dist/cache/memoryCache.d.ts +1 -1
  5. package/dist/cache/nullCache.d.ts +14 -0
  6. package/dist/cache/nullCache.js +37 -0
  7. package/dist/cache/nullCache.js.map +1 -0
  8. package/dist/config.d.ts +16 -1
  9. package/dist/config.js +1 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/crypto/openPGPCrypto.js +2 -0
  12. package/dist/crypto/openPGPCrypto.js.map +1 -1
  13. package/dist/diagnostic/eventsGenerator.d.ts +14 -0
  14. package/dist/diagnostic/eventsGenerator.js +49 -0
  15. package/dist/diagnostic/eventsGenerator.js.map +1 -0
  16. package/dist/diagnostic/httpClient.d.ts +16 -0
  17. package/dist/diagnostic/httpClient.js +81 -0
  18. package/dist/diagnostic/httpClient.js.map +1 -0
  19. package/dist/diagnostic/index.d.ts +10 -0
  20. package/dist/diagnostic/index.js +35 -0
  21. package/dist/diagnostic/index.js.map +1 -0
  22. package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
  23. package/dist/diagnostic/integrityVerificationStream.js +56 -0
  24. package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
  25. package/dist/diagnostic/interface.d.ts +102 -0
  26. package/dist/diagnostic/interface.js +3 -0
  27. package/dist/diagnostic/interface.js.map +1 -0
  28. package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
  29. package/dist/diagnostic/sdkDiagnostic.js +216 -0
  30. package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
  31. package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
  32. package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
  33. package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
  34. package/dist/diagnostic/telemetry.d.ts +25 -0
  35. package/dist/diagnostic/telemetry.js +70 -0
  36. package/dist/diagnostic/telemetry.js.map +1 -0
  37. package/dist/diagnostic/zipGenerators.d.ts +9 -0
  38. package/dist/diagnostic/zipGenerators.js +64 -0
  39. package/dist/diagnostic/zipGenerators.js.map +1 -0
  40. package/dist/diagnostic/zipGenerators.test.js +144 -0
  41. package/dist/diagnostic/zipGenerators.test.js.map +1 -0
  42. package/dist/errors.d.ts +8 -3
  43. package/dist/errors.js +11 -4
  44. package/dist/errors.js.map +1 -1
  45. package/dist/interface/config.d.ts +26 -0
  46. package/dist/interface/config.js +3 -0
  47. package/dist/interface/config.js.map +1 -0
  48. package/dist/interface/download.d.ts +2 -2
  49. package/dist/interface/events.d.ts +60 -20
  50. package/dist/interface/events.js +11 -1
  51. package/dist/interface/events.js.map +1 -1
  52. package/dist/interface/httpClient.d.ts +0 -14
  53. package/dist/interface/index.d.ts +9 -5
  54. package/dist/interface/index.js +2 -1
  55. package/dist/interface/index.js.map +1 -1
  56. package/dist/interface/nodes.d.ts +21 -1
  57. package/dist/interface/nodes.js +11 -0
  58. package/dist/interface/nodes.js.map +1 -1
  59. package/dist/interface/sharing.d.ts +1 -0
  60. package/dist/interface/upload.d.ts +57 -3
  61. package/dist/internal/apiService/driveTypes.d.ts +1341 -465
  62. package/dist/internal/apiService/errors.js +2 -2
  63. package/dist/internal/apiService/errors.js.map +1 -1
  64. package/dist/internal/apiService/transformers.js +2 -0
  65. package/dist/internal/apiService/transformers.js.map +1 -1
  66. package/dist/internal/asyncIteratorMap.d.ts +15 -0
  67. package/dist/internal/asyncIteratorMap.js +59 -0
  68. package/dist/internal/asyncIteratorMap.js.map +1 -0
  69. package/dist/internal/asyncIteratorMap.test.js +120 -0
  70. package/dist/internal/asyncIteratorMap.test.js.map +1 -0
  71. package/dist/internal/download/apiService.js +32 -31
  72. package/dist/internal/download/apiService.js.map +1 -1
  73. package/dist/internal/download/fileDownloader.d.ts +2 -2
  74. package/dist/internal/download/fileDownloader.js.map +1 -1
  75. package/dist/internal/events/apiService.d.ts +4 -6
  76. package/dist/internal/events/apiService.js +15 -22
  77. package/dist/internal/events/apiService.js.map +1 -1
  78. package/dist/internal/events/coreEventManager.d.ts +7 -10
  79. package/dist/internal/events/coreEventManager.js +19 -36
  80. package/dist/internal/events/coreEventManager.js.map +1 -1
  81. package/dist/internal/events/coreEventManager.test.d.ts +1 -0
  82. package/dist/internal/events/coreEventManager.test.js +87 -0
  83. package/dist/internal/events/coreEventManager.test.js.map +1 -0
  84. package/dist/internal/events/eventManager.d.ts +11 -36
  85. package/dist/internal/events/eventManager.js +59 -105
  86. package/dist/internal/events/eventManager.js.map +1 -1
  87. package/dist/internal/events/eventManager.test.js +167 -82
  88. package/dist/internal/events/eventManager.test.js.map +1 -1
  89. package/dist/internal/events/index.d.ts +13 -33
  90. package/dist/internal/events/index.js +56 -72
  91. package/dist/internal/events/index.js.map +1 -1
  92. package/dist/internal/events/interface.d.ts +59 -14
  93. package/dist/internal/events/interface.js +13 -3
  94. package/dist/internal/events/interface.js.map +1 -1
  95. package/dist/internal/events/volumeEventManager.d.ts +7 -17
  96. package/dist/internal/events/volumeEventManager.js +58 -45
  97. package/dist/internal/events/volumeEventManager.js.map +1 -1
  98. package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
  99. package/dist/internal/events/volumeEventManager.test.js +203 -0
  100. package/dist/internal/events/volumeEventManager.test.js.map +1 -0
  101. package/dist/internal/nodes/apiService.d.ts +2 -2
  102. package/dist/internal/nodes/apiService.js +16 -6
  103. package/dist/internal/nodes/apiService.js.map +1 -1
  104. package/dist/internal/nodes/apiService.test.js +30 -8
  105. package/dist/internal/nodes/apiService.test.js.map +1 -1
  106. package/dist/internal/nodes/cache.d.ts +10 -1
  107. package/dist/internal/nodes/cache.js +18 -0
  108. package/dist/internal/nodes/cache.js.map +1 -1
  109. package/dist/internal/nodes/cache.test.js +1 -0
  110. package/dist/internal/nodes/cache.test.js.map +1 -1
  111. package/dist/internal/nodes/cryptoService.d.ts +1 -1
  112. package/dist/internal/nodes/cryptoService.js.map +1 -1
  113. package/dist/internal/nodes/cryptoService.test.js +34 -0
  114. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  115. package/dist/internal/nodes/events.d.ts +7 -83
  116. package/dist/internal/nodes/events.js +43 -217
  117. package/dist/internal/nodes/events.js.map +1 -1
  118. package/dist/internal/nodes/events.test.js +27 -277
  119. package/dist/internal/nodes/events.test.js.map +1 -1
  120. package/dist/internal/nodes/index.d.ts +3 -4
  121. package/dist/internal/nodes/index.js +5 -5
  122. package/dist/internal/nodes/index.js.map +1 -1
  123. package/dist/internal/nodes/interface.d.ts +3 -1
  124. package/dist/internal/nodes/nodesAccess.d.ts +15 -0
  125. package/dist/internal/nodes/nodesAccess.js +65 -7
  126. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  127. package/dist/internal/nodes/nodesAccess.test.js +132 -93
  128. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  129. package/dist/internal/nodes/nodesManagement.d.ts +1 -3
  130. package/dist/internal/nodes/nodesManagement.js +12 -26
  131. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  132. package/dist/internal/nodes/nodesManagement.test.js +35 -14
  133. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  134. package/dist/internal/shares/cache.d.ts +2 -0
  135. package/dist/internal/shares/cache.js +2 -0
  136. package/dist/internal/shares/cache.js.map +1 -1
  137. package/dist/internal/shares/manager.d.ts +1 -0
  138. package/dist/internal/shares/manager.js +3 -0
  139. package/dist/internal/shares/manager.js.map +1 -1
  140. package/dist/internal/sharing/apiService.js +20 -2
  141. package/dist/internal/sharing/apiService.js.map +1 -1
  142. package/dist/internal/sharing/cryptoService.js +1 -0
  143. package/dist/internal/sharing/cryptoService.js.map +1 -1
  144. package/dist/internal/sharing/events.d.ts +23 -55
  145. package/dist/internal/sharing/events.js +46 -138
  146. package/dist/internal/sharing/events.js.map +1 -1
  147. package/dist/internal/sharing/events.test.js +77 -180
  148. package/dist/internal/sharing/events.test.js.map +1 -1
  149. package/dist/internal/sharing/index.d.ts +4 -5
  150. package/dist/internal/sharing/index.js +5 -5
  151. package/dist/internal/sharing/index.js.map +1 -1
  152. package/dist/internal/sharing/interface.d.ts +3 -0
  153. package/dist/internal/sharing/sharingManagement.d.ts +2 -3
  154. package/dist/internal/sharing/sharingManagement.js +7 -9
  155. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  156. package/dist/internal/sharing/sharingManagement.test.js +9 -39
  157. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  158. package/dist/internal/upload/apiService.d.ts +2 -3
  159. package/dist/internal/upload/apiService.js +7 -4
  160. package/dist/internal/upload/apiService.js.map +1 -1
  161. package/dist/internal/upload/fileUploader.d.ts +49 -53
  162. package/dist/internal/upload/fileUploader.js +91 -395
  163. package/dist/internal/upload/fileUploader.js.map +1 -1
  164. package/dist/internal/upload/fileUploader.test.js +38 -292
  165. package/dist/internal/upload/fileUploader.test.js.map +1 -1
  166. package/dist/internal/upload/index.d.ts +5 -5
  167. package/dist/internal/upload/index.js +23 -44
  168. package/dist/internal/upload/index.js.map +1 -1
  169. package/dist/internal/upload/interface.d.ts +2 -0
  170. package/dist/internal/upload/manager.d.ts +6 -6
  171. package/dist/internal/upload/manager.js +32 -66
  172. package/dist/internal/upload/manager.js.map +1 -1
  173. package/dist/internal/upload/manager.test.js +100 -117
  174. package/dist/internal/upload/manager.test.js.map +1 -1
  175. package/dist/internal/upload/streamUploader.d.ts +62 -0
  176. package/dist/internal/upload/streamUploader.js +440 -0
  177. package/dist/internal/upload/streamUploader.js.map +1 -0
  178. package/dist/internal/upload/streamUploader.test.d.ts +1 -0
  179. package/dist/internal/upload/streamUploader.test.js +358 -0
  180. package/dist/internal/upload/streamUploader.test.js.map +1 -0
  181. package/dist/protonDriveClient.d.ts +22 -165
  182. package/dist/protonDriveClient.js +27 -191
  183. package/dist/protonDriveClient.js.map +1 -1
  184. package/dist/protonDrivePhotosClient.js +3 -2
  185. package/dist/protonDrivePhotosClient.js.map +1 -1
  186. package/package.json +4 -4
  187. package/src/cache/index.ts +1 -0
  188. package/src/cache/memoryCache.ts +1 -1
  189. package/src/cache/nullCache.ts +38 -0
  190. package/src/config.ts +17 -2
  191. package/src/crypto/openPGPCrypto.ts +2 -0
  192. package/src/diagnostic/eventsGenerator.ts +48 -0
  193. package/src/diagnostic/httpClient.ts +80 -0
  194. package/src/diagnostic/index.ts +38 -0
  195. package/src/diagnostic/integrityVerificationStream.ts +56 -0
  196. package/src/diagnostic/interface.ts +158 -0
  197. package/src/diagnostic/sdkDiagnostic.ts +238 -0
  198. package/src/diagnostic/sdkDiagnosticFull.ts +40 -0
  199. package/src/diagnostic/telemetry.ts +71 -0
  200. package/src/diagnostic/zipGenerators.test.ts +177 -0
  201. package/src/diagnostic/zipGenerators.ts +70 -0
  202. package/src/errors.ts +13 -4
  203. package/src/interface/config.ts +28 -0
  204. package/src/interface/download.ts +2 -2
  205. package/src/interface/events.ts +66 -21
  206. package/src/interface/httpClient.ts +0 -16
  207. package/src/interface/index.ts +9 -5
  208. package/src/interface/nodes.ts +32 -12
  209. package/src/interface/sharing.ts +1 -0
  210. package/src/interface/upload.ts +59 -3
  211. package/src/internal/apiService/driveTypes.ts +1341 -465
  212. package/src/internal/apiService/errors.ts +3 -2
  213. package/src/internal/apiService/transformers.ts +2 -0
  214. package/src/internal/asyncIteratorMap.test.ts +150 -0
  215. package/src/internal/asyncIteratorMap.ts +64 -0
  216. package/src/internal/download/apiService.ts +11 -8
  217. package/src/internal/download/fileDownloader.ts +2 -2
  218. package/src/internal/events/apiService.ts +25 -28
  219. package/src/internal/events/coreEventManager.test.ts +101 -0
  220. package/src/internal/events/coreEventManager.ts +20 -45
  221. package/src/internal/events/eventManager.test.ts +201 -88
  222. package/src/internal/events/eventManager.ts +69 -115
  223. package/src/internal/events/index.ts +54 -84
  224. package/src/internal/events/interface.ts +70 -15
  225. package/src/internal/events/volumeEventManager.test.ts +243 -0
  226. package/src/internal/events/volumeEventManager.ts +55 -53
  227. package/src/internal/nodes/apiService.test.ts +36 -7
  228. package/src/internal/nodes/apiService.ts +19 -7
  229. package/src/internal/nodes/cache.test.ts +1 -0
  230. package/src/internal/nodes/cache.ts +21 -2
  231. package/src/internal/nodes/cryptoService.test.ts +38 -0
  232. package/src/internal/nodes/cryptoService.ts +1 -1
  233. package/src/internal/nodes/events.test.ts +29 -335
  234. package/src/internal/nodes/events.ts +45 -253
  235. package/src/internal/nodes/index.ts +6 -8
  236. package/src/internal/nodes/interface.ts +6 -3
  237. package/src/internal/nodes/nodesAccess.test.ts +133 -91
  238. package/src/internal/nodes/nodesAccess.ts +70 -8
  239. package/src/internal/nodes/nodesManagement.test.ts +39 -15
  240. package/src/internal/nodes/nodesManagement.ts +12 -30
  241. package/src/internal/shares/cache.ts +4 -2
  242. package/src/internal/shares/manager.ts +9 -5
  243. package/src/internal/sharing/apiService.ts +25 -2
  244. package/src/internal/sharing/cache.ts +1 -1
  245. package/src/internal/sharing/cryptoService.ts +1 -0
  246. package/src/internal/sharing/events.test.ts +89 -195
  247. package/src/internal/sharing/events.ts +42 -156
  248. package/src/internal/sharing/index.ts +6 -9
  249. package/src/internal/sharing/interface.ts +6 -2
  250. package/src/internal/sharing/sharingManagement.test.ts +10 -40
  251. package/src/internal/sharing/sharingManagement.ts +7 -11
  252. package/src/internal/upload/apiService.ts +5 -6
  253. package/src/internal/upload/fileUploader.test.ts +46 -376
  254. package/src/internal/upload/fileUploader.ts +114 -494
  255. package/src/internal/upload/index.ts +30 -54
  256. package/src/internal/upload/interface.ts +2 -0
  257. package/src/internal/upload/manager.test.ts +107 -124
  258. package/src/internal/upload/manager.ts +48 -80
  259. package/src/internal/upload/streamUploader.test.ts +468 -0
  260. package/src/internal/upload/streamUploader.ts +550 -0
  261. package/src/protonDriveClient.ts +80 -248
  262. package/src/protonDrivePhotosClient.ts +4 -3
  263. package/dist/internal/events/cache.d.ts +0 -28
  264. package/dist/internal/events/cache.js +0 -67
  265. package/dist/internal/events/cache.js.map +0 -1
  266. package/dist/internal/events/cache.test.js +0 -43
  267. package/dist/internal/events/cache.test.js.map +0 -1
  268. package/dist/internal/nodes/index.test.js +0 -112
  269. package/dist/internal/nodes/index.test.js.map +0 -1
  270. package/src/internal/events/cache.test.ts +0 -47
  271. package/src/internal/events/cache.ts +0 -80
  272. package/src/internal/nodes/index.test.ts +0 -135
  273. /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
  274. /package/dist/internal/{nodes/index.test.d.ts → asyncIteratorMap.test.d.ts} +0 -0
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const interface_1 = require("../../interface");
4
- const apiService_1 = require("../apiService");
5
3
  const fileUploader_1 = require("./fileUploader");
6
4
  const controller_1 = require("./controller");
7
- const errors_1 = require("../../errors");
8
5
  const BLOCK_ENCRYPTION_OVERHEAD = 10000;
9
6
  async function mockEncryptBlock(verifyBlock, _, block, index) {
10
7
  await verifyBlock(block);
@@ -33,6 +30,7 @@ describe('FileUploader', () => {
33
30
  let onFinish;
34
31
  let abortController;
35
32
  let uploader;
33
+ let startUploadSpy;
36
34
  beforeEach(() => {
37
35
  // @ts-expect-error No need to implement all methods for mocking
38
36
  telemetry = {
@@ -87,306 +85,54 @@ describe('FileUploader', () => {
87
85
  signatureAddress: { addressId: 'addressId' },
88
86
  },
89
87
  };
90
- metadata = {
91
- // 3 blocks: 4 + 4 + 2 MB
92
- expectedSize: 10 * 1024 * 1024,
93
- };
88
+ metadata = {};
94
89
  controller = new controller_1.UploadController();
95
90
  onFinish = jest.fn();
96
91
  abortController = new AbortController();
97
- uploader = new fileUploader_1.Fileuploader(telemetry, apiService, cryptoService, uploadManager, blockVerifier, revisionDraft, metadata, onFinish, abortController.signal);
92
+ uploader = new fileUploader_1.FileUploader(telemetry, apiService, cryptoService, uploadManager, 'parentFolderUid', 'name', metadata, onFinish, abortController.signal);
93
+ startUploadSpy = jest.spyOn(uploader, 'startUpload').mockReturnValue(Promise.resolve('revisionUid'));
98
94
  });
99
95
  describe('writeFile', () => {
100
- it('should set modification time if not set', () => {
101
- // @ts-expect-error Ignore mocking File
102
- const file = {
103
- lastModified: 123456789,
104
- stream: jest.fn().mockReturnValue('stream'),
105
- };
106
- const thumbnails = [];
107
- const onProgress = jest.fn();
108
- const writeStreamSpy = jest.spyOn(uploader, 'writeStream').mockReturnValue(controller);
109
- uploader.writeFile(file, thumbnails, onProgress);
96
+ // @ts-expect-error Ignore mocking File
97
+ const file = {
98
+ type: 'image/png',
99
+ size: 1000,
100
+ lastModified: 123456789,
101
+ stream: jest.fn().mockReturnValue('stream'),
102
+ };
103
+ const thumbnails = [];
104
+ const onProgress = jest.fn();
105
+ it('should set media type if not set', async () => {
106
+ await uploader.writeFile(file, thumbnails, onProgress);
107
+ expect(metadata.mediaType).toEqual('image/png');
108
+ expect(startUploadSpy).toHaveBeenCalledWith('stream', thumbnails, onProgress);
109
+ });
110
+ it('should set expected size if not set', async () => {
111
+ await uploader.writeFile(file, thumbnails, onProgress);
112
+ expect(metadata.expectedSize).toEqual(file.size);
113
+ expect(startUploadSpy).toHaveBeenCalledWith('stream', thumbnails, onProgress);
114
+ });
115
+ it('should set modification time if not set', async () => {
116
+ await uploader.writeFile(file, thumbnails, onProgress);
110
117
  expect(metadata.modificationTime).toEqual(new Date(123456789));
111
- expect(writeStreamSpy).toHaveBeenCalledWith('stream', thumbnails, onProgress);
118
+ expect(startUploadSpy).toHaveBeenCalledWith('stream', thumbnails, onProgress);
119
+ });
120
+ it('should throw an error if upload already started', async () => {
121
+ await uploader.writeFile(file, thumbnails, onProgress);
122
+ await expect(uploader.writeFile(file, thumbnails, onProgress)).rejects.toThrow('Upload already started');
112
123
  });
113
124
  });
114
125
  describe('writeStream', () => {
115
- let uploadStreamSpy;
116
- beforeEach(() => {
117
- uploadStreamSpy = jest.spyOn(uploader, 'uploadStream').mockResolvedValue('revisionUid');
118
- });
119
- it('should throw an error if upload already started', () => {
120
- uploader.writeStream(new ReadableStream(), [], jest.fn());
121
- expect(() => {
122
- uploader.writeStream(new ReadableStream(), [], jest.fn());
123
- }).toThrow('Upload already started');
124
- });
126
+ const stream = new ReadableStream();
127
+ const thumbnails = [];
128
+ const onProgress = jest.fn();
125
129
  it('should start the upload process', async () => {
126
- const stream = new ReadableStream();
127
- const thumbnails = [];
128
- const onProgress = jest.fn();
129
- uploader.writeStream(stream, thumbnails, onProgress);
130
- expect(uploadStreamSpy).toHaveBeenCalledWith(stream, thumbnails, onProgress);
131
- });
132
- });
133
- describe('uploadStream', () => {
134
- let thumbnails;
135
- let thumbnailSize;
136
- let onProgress;
137
- let stream;
138
- const verifySuccess = async () => {
139
- const controller = uploader.writeStream(stream, thumbnails, onProgress);
140
- await controller.completion();
141
- const numberOfExpectedBlocks = Math.ceil(metadata.expectedSize / fileUploader_1.FILE_CHUNK_SIZE);
142
- expect(uploadManager.commitDraft).toHaveBeenCalledTimes(1);
143
- expect(uploadManager.commitDraft).toHaveBeenCalledWith(revisionDraft, expect.anything(), metadata, {
144
- size: metadata.expectedSize,
145
- blockSizes: metadata.expectedSize ? [
146
- ...Array(numberOfExpectedBlocks - 1).fill(fileUploader_1.FILE_CHUNK_SIZE),
147
- metadata.expectedSize % fileUploader_1.FILE_CHUNK_SIZE
148
- ] : [],
149
- modificationTime: undefined,
150
- digests: {
151
- sha1: expect.anything(),
152
- }
153
- }, metadata.expectedSize + numberOfExpectedBlocks * BLOCK_ENCRYPTION_OVERHEAD);
154
- expect(telemetry.uploadFinished).toHaveBeenCalledTimes(1);
155
- expect(telemetry.uploadFinished).toHaveBeenCalledWith('revisionUid', metadata.expectedSize + thumbnailSize);
156
- expect(telemetry.uploadFailed).not.toHaveBeenCalled();
157
- expect(onFinish).toHaveBeenCalledTimes(1);
158
- expect(onFinish).toHaveBeenCalledWith(false);
159
- };
160
- const verifyFailure = async (error, uploadedBytes, expectedSize = metadata.expectedSize) => {
161
- const controller = uploader.writeStream(stream, thumbnails, onProgress);
162
- await expect(controller.completion()).rejects.toThrow(error);
163
- expect(telemetry.uploadFinished).not.toHaveBeenCalled();
164
- expect(telemetry.uploadFailed).toHaveBeenCalledTimes(1);
165
- expect(telemetry.uploadFailed).toHaveBeenCalledWith('revisionUid', new Error(error), uploadedBytes === undefined ? expect.anything() : uploadedBytes, expectedSize);
166
- expect(onFinish).toHaveBeenCalledTimes(1);
167
- expect(onFinish).toHaveBeenCalledWith(true);
168
- };
169
- const verifyOnProgress = async (uploadedBytes) => {
170
- expect(onProgress).toHaveBeenCalledTimes(uploadedBytes.length);
171
- for (let i = 0; i < uploadedBytes.length; i++) {
172
- expect(onProgress).toHaveBeenNthCalledWith(i + 1, uploadedBytes[i]);
173
- }
174
- };
175
- beforeEach(() => {
176
- onProgress = jest.fn();
177
- thumbnails = [
178
- {
179
- type: interface_1.ThumbnailType.Type1,
180
- thumbnail: new Uint8Array(1024),
181
- }
182
- ];
183
- thumbnailSize = thumbnails.reduce((acc, thumbnail) => acc + thumbnail.thumbnail.length, 0);
184
- stream = new ReadableStream({
185
- start(controller) {
186
- const chunkSize = 1024;
187
- const chunkCount = metadata.expectedSize / chunkSize;
188
- for (let i = 1; i <= chunkCount; i++) {
189
- controller.enqueue(new Uint8Array(chunkSize));
190
- }
191
- controller.close();
192
- },
193
- });
194
- });
195
- it("should upload successfully", async () => {
196
- await verifySuccess();
197
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(1);
198
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(4); // 3 blocks + 1 thumbnail
199
- expect(blockVerifier.verifyBlock).toHaveBeenCalledTimes(3); // 3 blocks
200
- expect(telemetry.logBlockVerificationError).not.toHaveBeenCalled();
201
- await verifyOnProgress([thumbnailSize, 4 * 1024 * 1024, 4 * 1024 * 1024, 2 * 1024 * 1024]);
202
- });
203
- it("should upload successfully empty file without thumbnail", async () => {
204
- metadata = {
205
- expectedSize: 0,
206
- };
207
- stream = new ReadableStream({
208
- start(controller) {
209
- controller.close();
210
- },
211
- });
212
- thumbnails = [];
213
- thumbnailSize = 0;
214
- uploader = new fileUploader_1.Fileuploader(telemetry, apiService, cryptoService, uploadManager, blockVerifier, revisionDraft, metadata, onFinish);
215
- await verifySuccess();
216
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(0);
217
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(0);
218
- expect(blockVerifier.verifyBlock).toHaveBeenCalledTimes(0);
219
- await verifyOnProgress([]);
220
- });
221
- it("should upload successfully empty file with thumbnail", async () => {
222
- metadata = {
223
- expectedSize: 0,
224
- };
225
- stream = new ReadableStream({
226
- start(controller) {
227
- controller.close();
228
- },
229
- });
230
- uploader = new fileUploader_1.Fileuploader(telemetry, apiService, cryptoService, uploadManager, blockVerifier, revisionDraft, metadata, onFinish);
231
- await verifySuccess();
232
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(1);
233
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(1);
234
- expect(blockVerifier.verifyBlock).toHaveBeenCalledTimes(0);
235
- await verifyOnProgress([thumbnailSize]);
236
- });
237
- it('should handle failure when encrypting thumbnails', async () => {
238
- cryptoService.encryptThumbnail = jest.fn().mockImplementation(async function () {
239
- throw new Error('Failed to encrypt thumbnail');
240
- });
241
- await verifyFailure('Failed to encrypt thumbnail', 0);
242
- expect(cryptoService.encryptThumbnail).toHaveBeenCalledTimes(1);
243
- });
244
- it('should handle failure when encrypting block', async () => {
245
- cryptoService.encryptBlock = jest.fn().mockImplementation(async function () {
246
- throw new Error('Failed to encrypt block');
247
- });
248
- // Encrypting thumbnails is before blocks, thus it can be uploaded before failure.
249
- await verifyFailure('Failed to encrypt block', 1024);
250
- // 1 block + 1 retry, others are skipped
251
- expect(cryptoService.encryptBlock).toHaveBeenCalledTimes(2);
252
- });
253
- it('should handle one time-off failure when encrypting block', async () => {
254
- let count = 0;
255
- cryptoService.encryptBlock = jest.fn().mockImplementation(async function (verifyBlock, keys, block, index) {
256
- if (count === 0) {
257
- count++;
258
- throw new Error('Failed to encrypt block');
259
- }
260
- return mockEncryptBlock(verifyBlock, keys, block, index);
261
- });
262
- await verifySuccess();
263
- // 1 block + 1 retry + 2 other blocks without retry
264
- expect(cryptoService.encryptBlock).toHaveBeenCalledTimes(4);
265
- await verifyOnProgress([thumbnailSize, 4 * 1024 * 1024, 4 * 1024 * 1024, 2 * 1024 * 1024]);
266
- });
267
- it('should handle failure when requesting tokens', async () => {
268
- apiService.requestBlockUpload = jest.fn().mockImplementation(async function () {
269
- throw new Error('Failed to request tokens');
270
- });
271
- await verifyFailure('Failed to request tokens', 0);
272
- });
273
- it('should handle failure when uploading thumbnail', async () => {
274
- apiService.uploadBlock = jest.fn().mockImplementation(async function (bareUrl, token, block, onProgress) {
275
- if (token === 'token/thumbnail:1') {
276
- throw new Error('Failed to upload thumbnail');
277
- }
278
- return mockUploadBlock(bareUrl, token, block, onProgress);
279
- });
280
- // 10 MB uploaded as blocks still uploaded
281
- await verifyFailure('Failed to upload thumbnail', 10 * 1024 * 1024);
282
- });
283
- it('should handle one time-off failure when uploading thubmnail', async () => {
284
- let count = 0;
285
- apiService.uploadBlock = jest.fn().mockImplementation(async function (bareUrl, token, block, onProgress) {
286
- if (token === 'token/thumbnail:1' && count === 0) {
287
- count++;
288
- throw new Error('Failed to upload thumbnail');
289
- }
290
- return mockUploadBlock(bareUrl, token, block, onProgress);
291
- });
292
- await verifySuccess();
293
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(1);
294
- // 3 blocks + 1 retry + 1 thumbnail
295
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(5);
296
- await verifyOnProgress([4 * 1024 * 1024, 4 * 1024 * 1024, 2 * 1024 * 1024, 1024]);
297
- });
298
- it('should handle failure when uploading block', async () => {
299
- apiService.uploadBlock = jest.fn().mockImplementation(async function (bareUrl, token, block, onProgress) {
300
- if (token === 'token/block:3') {
301
- throw new Error('Failed to upload block');
302
- }
303
- return mockUploadBlock(bareUrl, token, block, onProgress);
304
- });
305
- // ~8 MB uploaded as 2 first blocks + 1 thumbnail still uploaded
306
- await verifyFailure('Failed to upload block', 8 * 1024 * 1024 + 1024);
307
- });
308
- it('should handle one time-off failure when uploading block', async () => {
309
- let count = 0;
310
- apiService.uploadBlock = jest.fn().mockImplementation(async function (bareUrl, token, block, onProgress) {
311
- if (token === 'token/block:2' && count === 0) {
312
- count++;
313
- throw new Error('Failed to upload block');
314
- }
315
- return mockUploadBlock(bareUrl, token, block, onProgress);
316
- });
317
- await verifySuccess();
318
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(1);
319
- // 3 blocks + 1 retry + 1 thumbnail
320
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(5);
321
- await verifyOnProgress([1024, 4 * 1024 * 1024, 2 * 1024 * 1024, 4 * 1024 * 1024]);
322
- });
323
- it('should handle expired token when uploading block', async () => {
324
- let count = 0;
325
- apiService.uploadBlock = jest.fn().mockImplementation(async function (bareUrl, token, block, onProgress) {
326
- if (token === 'token/block:2' && count === 0) {
327
- count++;
328
- throw new apiService_1.APIHTTPError('Expired token', 404 /* HTTPErrorCode.NOT_FOUND */);
329
- }
330
- return mockUploadBlock(bareUrl, token, block, onProgress);
331
- });
332
- await verifySuccess();
333
- // 1 for first try + 1 for retry
334
- expect(apiService.requestBlockUpload).toHaveBeenCalledTimes(2);
335
- expect(apiService.requestBlockUpload).toHaveBeenCalledWith(revisionDraft.nodeRevisionUid, revisionDraft.nodeKeys.signatureAddress.addressId, {
336
- contentBlocks: [
337
- {
338
- index: 2,
339
- encryptedSize: 4 * 1024 * 1024 + 10000,
340
- hash: 'blockHash',
341
- armoredSignature: 'signature',
342
- verificationToken: 'verificationToken',
343
- }
344
- ],
345
- });
346
- // 3 blocks + 1 retry + 1 thumbnail
347
- expect(apiService.uploadBlock).toHaveBeenCalledTimes(5);
348
- await verifyOnProgress([1024, 4 * 1024 * 1024, 2 * 1024 * 1024, 4 * 1024 * 1024]);
349
- });
350
- it('should handle abortion', async () => {
351
- const error = new Error('Aborted');
352
- const controller = uploader.writeStream(stream, thumbnails, onProgress);
353
- abortController.abort(error);
354
- await controller.completion();
355
- expect(apiService.uploadBlock.mock.calls[0][4]?.aborted).toBe(true);
130
+ await uploader.writeStream(stream, thumbnails, onProgress);
131
+ expect(startUploadSpy).toHaveBeenCalledWith(stream, thumbnails, onProgress);
356
132
  });
357
- describe('verifyIntegrity', () => {
358
- it('should report block verification error', async () => {
359
- blockVerifier.verifyBlock = jest.fn().mockRejectedValue(new errors_1.IntegrityError('Block verification error'));
360
- await verifyFailure('Block verification error', 1024);
361
- expect(telemetry.logBlockVerificationError).toHaveBeenCalledWith(false);
362
- });
363
- it('should report block verification error when retry helped', async () => {
364
- blockVerifier.verifyBlock = jest.fn().mockRejectedValueOnce(new errors_1.IntegrityError('Block verification error')).mockResolvedValue({
365
- verificationToken: new Uint8Array(),
366
- });
367
- await verifySuccess();
368
- expect(telemetry.logBlockVerificationError).toHaveBeenCalledWith(true);
369
- });
370
- it('should throw an error if block count does not match', async () => {
371
- uploader = new fileUploader_1.Fileuploader(telemetry, apiService, cryptoService, uploadManager, blockVerifier, revisionDraft, {
372
- // Fake expected size to break verification
373
- expectedSize: 1 * 1024 * 1024 + 1024,
374
- mediaType: '',
375
- }, onFinish);
376
- await verifyFailure('Some file parts failed to upload', 10 * 1024 * 1024 + 1024, 1 * 1024 * 1024 + 1024);
377
- });
378
- it('should throw an error if file size does not match', async () => {
379
- cryptoService.encryptBlock = jest.fn().mockImplementation(async (_, __, block, index) => ({
380
- index,
381
- encryptedData: block,
382
- armoredSignature: 'signature',
383
- verificationToken: 'verificationToken',
384
- originalSize: 0, // Fake original size to break verification
385
- encryptedSize: block.length + 10000,
386
- hash: 'blockHash',
387
- }));
388
- await verifyFailure('Some file bytes failed to upload', 10 * 1024 * 1024 + 1024);
389
- });
133
+ it('should throw an error if upload already started', async () => {
134
+ await uploader.writeStream(stream, thumbnails, onProgress);
135
+ await expect(uploader.writeStream(stream, thumbnails, onProgress)).rejects.toThrow('Upload already started');
390
136
  });
391
137
  });
392
138
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fileUploader.test.js","sourceRoot":"","sources":["../../../src/internal/upload/fileUploader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileUploader.test.js","sourceRoot":"","sources":["../../../src/internal/upload/fileUploader.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { ProtonDriveTelemetry, UploadMetadata } from "../../interface";
2
2
  import { DriveAPIService } from "../apiService";
3
3
  import { DriveCrypto } from "../../crypto";
4
- import { NodesService, NodesEvents, SharesService } from "./interface";
5
- import { Fileuploader } from "./fileUploader";
4
+ import { FileUploader, FileRevisionUploader } from "./fileUploader";
5
+ import { NodesService, SharesService } from "./interface";
6
6
  /**
7
7
  * Provides facade for the upload module.
8
8
  *
@@ -10,7 +10,7 @@ import { Fileuploader } from "./fileUploader";
10
10
  * metadata generation, content upload, API communication, encryption,
11
11
  * and verifications.
12
12
  */
13
- export declare function initUploadModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveCrypto: DriveCrypto, sharesService: SharesService, nodesService: NodesService, nodesEvents: NodesEvents): {
14
- getFileUploader: (parentFolderUid: string, name: string, metadata: UploadMetadata, signal?: AbortSignal) => Promise<Fileuploader>;
15
- getFileRevisionUploader: (nodeUid: string, metadata: UploadMetadata, signal?: AbortSignal) => Promise<Fileuploader>;
13
+ export declare function initUploadModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveCrypto: DriveCrypto, sharesService: SharesService, nodesService: NodesService, clientUid?: string): {
14
+ getFileUploader: (parentFolderUid: string, name: string, metadata: UploadMetadata, signal?: AbortSignal) => Promise<FileUploader>;
15
+ getFileRevisionUploader: (nodeUid: string, metadata: UploadMetadata, signal?: AbortSignal) => Promise<FileRevisionUploader>;
16
16
  };
@@ -3,11 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initUploadModule = initUploadModule;
4
4
  const apiService_1 = require("./apiService");
5
5
  const cryptoService_1 = require("./cryptoService");
6
- const queue_1 = require("./queue");
7
6
  const fileUploader_1 = require("./fileUploader");
8
- const telemetry_1 = require("./telemetry");
9
7
  const manager_1 = require("./manager");
10
- const blockVerifier_1 = require("./blockVerifier");
8
+ const queue_1 = require("./queue");
9
+ const telemetry_1 = require("./telemetry");
11
10
  /**
12
11
  * Provides facade for the upload module.
13
12
  *
@@ -15,59 +14,39 @@ const blockVerifier_1 = require("./blockVerifier");
15
14
  * metadata generation, content upload, API communication, encryption,
16
15
  * and verifications.
17
16
  */
18
- function initUploadModule(telemetry, apiService, driveCrypto, sharesService, nodesService, nodesEvents) {
19
- const api = new apiService_1.UploadAPIService(apiService);
17
+ function initUploadModule(telemetry, apiService, driveCrypto, sharesService, nodesService, clientUid) {
18
+ const api = new apiService_1.UploadAPIService(apiService, clientUid);
20
19
  const cryptoService = new cryptoService_1.UploadCryptoService(driveCrypto, nodesService);
21
20
  const uploadTelemetry = new telemetry_1.UploadTelemetry(telemetry, sharesService);
22
- const manager = new manager_1.UploadManager(telemetry, api, cryptoService, nodesService, nodesEvents);
21
+ const manager = new manager_1.UploadManager(telemetry, api, cryptoService, nodesService, clientUid);
23
22
  const queue = new queue_1.UploadQueue();
23
+ /**
24
+ * Returns a FileUploader instance that can be used to upload a file to
25
+ * a parent folder.
26
+ *
27
+ * This operation does not call the API, it only returns a FileUploader
28
+ * instance when the upload queue has capacity.
29
+ */
24
30
  async function getFileUploader(parentFolderUid, name, metadata, signal) {
25
31
  await queue.waitForCapacity(signal);
26
- let revisionDraft, blockVerifier;
27
- try {
28
- revisionDraft = await manager.createDraftNode(parentFolderUid, name, metadata);
29
- blockVerifier = new blockVerifier_1.BlockVerifier(api, cryptoService, revisionDraft.nodeKeys.key, revisionDraft.nodeRevisionUid);
30
- await blockVerifier.loadVerificationData();
31
- }
32
- catch (error) {
33
- queue.releaseCapacity();
34
- if (revisionDraft) {
35
- await manager.deleteDraftNode(revisionDraft.nodeUid);
36
- }
37
- void uploadTelemetry.uploadInitFailed(parentFolderUid, error, metadata.expectedSize);
38
- throw error;
39
- }
40
- const onFinish = async (failure) => {
32
+ const onFinish = () => {
41
33
  queue.releaseCapacity();
42
- if (failure) {
43
- await manager.deleteDraftNode(revisionDraft.nodeUid);
44
- }
45
34
  };
46
- return new fileUploader_1.Fileuploader(uploadTelemetry, api, cryptoService, manager, blockVerifier, revisionDraft, metadata, onFinish, signal);
35
+ return new fileUploader_1.FileUploader(uploadTelemetry, api, cryptoService, manager, parentFolderUid, name, metadata, onFinish, signal);
47
36
  }
37
+ /**
38
+ * Returns a FileUploader instance that can be used to upload a new
39
+ * revision of a file.
40
+ *
41
+ * This operation does not call the API, it only returns a
42
+ * FileRevisionUploader instance when the upload queue has capacity.
43
+ */
48
44
  async function getFileRevisionUploader(nodeUid, metadata, signal) {
49
45
  await queue.waitForCapacity(signal);
50
- let revisionDraft, blockVerifier;
51
- try {
52
- revisionDraft = await manager.createDraftRevision(nodeUid, metadata);
53
- blockVerifier = new blockVerifier_1.BlockVerifier(api, cryptoService, revisionDraft.nodeKeys.key, revisionDraft.nodeRevisionUid);
54
- await blockVerifier.loadVerificationData();
55
- }
56
- catch (error) {
57
- queue.releaseCapacity();
58
- if (revisionDraft) {
59
- await manager.deleteDraftRevision(revisionDraft.nodeRevisionUid);
60
- }
61
- void uploadTelemetry.uploadInitFailed(nodeUid, error, metadata.expectedSize);
62
- throw error;
63
- }
64
- const onFinish = async (failure) => {
46
+ const onFinish = () => {
65
47
  queue.releaseCapacity();
66
- if (failure) {
67
- await manager.deleteDraftNode(revisionDraft.nodeUid);
68
- }
69
48
  };
70
- return new fileUploader_1.Fileuploader(uploadTelemetry, api, cryptoService, manager, blockVerifier, revisionDraft, metadata, onFinish, signal);
49
+ return new fileUploader_1.FileRevisionUploader(uploadTelemetry, api, cryptoService, manager, nodeUid, metadata, onFinish, signal);
71
50
  }
72
51
  return {
73
52
  getFileUploader,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/upload/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/upload/index.ts"],"names":[],"mappings":";;AAkBA,4CAmFC;AAlGD,6CAAgD;AAChD,mDAAsD;AACtD,iDAAoE;AAEpE,uCAA0C;AAC1C,mCAAsC;AACtC,2CAA8C;AAE9C;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC5B,SAA+B,EAC/B,UAA2B,EAC3B,WAAwB,EACxB,aAA4B,EAC5B,YAA0B,EAC1B,SAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,6BAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,IAAI,mCAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,eAAe,GAAG,IAAI,2BAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,uBAAa,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAE1F,MAAM,KAAK,GAAG,IAAI,mBAAW,EAAE,CAAC;IAEhC;;;;;;OAMG;IACH,KAAK,UAAU,eAAe,CAC1B,eAAuB,EACvB,IAAY,EACZ,QAAwB,EACxB,MAAoB;QAEpB,MAAM,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,KAAK,CAAC,eAAe,EAAE,CAAC;QAC5B,CAAC,CAAA;QAED,OAAO,IAAI,2BAAY,CACnB,eAAe,EACf,GAAG,EACH,aAAa,EACb,OAAO,EACP,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,MAAM,CACT,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,KAAK,UAAU,uBAAuB,CAClC,OAAe,EACf,QAAwB,EACxB,MAAoB;QAEpB,MAAM,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,KAAK,CAAC,eAAe,EAAE,CAAC;QAC5B,CAAC,CAAA;QAED,OAAO,IAAI,mCAAoB,CAC3B,eAAe,EACf,GAAG,EACH,aAAa,EACb,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,CACT,CAAC;IAEN,CAAC;IAED,OAAO;QACH,eAAe;QACf,uBAAuB;KAC1B,CAAA;AACL,CAAC"}
@@ -94,6 +94,7 @@ export interface NodesService {
94
94
  addressKey: PrivateKey;
95
95
  addressKeyId: string;
96
96
  }>;
97
+ notifyChildCreated(nodeUid: string): Promise<void>;
97
98
  }
98
99
  /**
99
100
  * Interface describing the dependencies to the nodes module.
@@ -107,6 +108,7 @@ export interface NodesEvents {
107
108
  }
108
109
  export interface NodesServiceNode {
109
110
  uid: string;
111
+ parentUid?: string;
110
112
  activeRevision?: Result<Revision, Error>;
111
113
  }
112
114
  /**
@@ -1,7 +1,7 @@
1
1
  import { ProtonDriveTelemetry, UploadMetadata } from "../../interface";
2
2
  import { UploadAPIService } from "./apiService";
3
3
  import { UploadCryptoService } from "./cryptoService";
4
- import { NodeRevisionDraft, NodesService, NodesEvents } from "./interface";
4
+ import { NodeRevisionDraft, NodesService } from "./interface";
5
5
  /**
6
6
  * UploadManager is responsible for creating and deleting draft nodes
7
7
  * on the server. It handles the creation of draft nodes, including
@@ -11,21 +11,21 @@ export declare class UploadManager {
11
11
  private apiService;
12
12
  private cryptoService;
13
13
  private nodesService;
14
- private nodesEvents;
14
+ private clientUid;
15
15
  private logger;
16
- constructor(telemetry: ProtonDriveTelemetry, apiService: UploadAPIService, cryptoService: UploadCryptoService, nodesService: NodesService, nodesEvents: NodesEvents);
16
+ constructor(telemetry: ProtonDriveTelemetry, apiService: UploadAPIService, cryptoService: UploadCryptoService, nodesService: NodesService, clientUid: string | undefined);
17
17
  createDraftNode(parentFolderUid: string, name: string, metadata: UploadMetadata): Promise<NodeRevisionDraft>;
18
18
  private createDraftOnAPI;
19
- private findAvailableName;
19
+ findAvailableName(parentFolderUid: string, name: string): Promise<string>;
20
20
  deleteDraftNode(nodeUid: string): Promise<void>;
21
21
  createDraftRevision(nodeUid: string, metadata: UploadMetadata): Promise<NodeRevisionDraft>;
22
22
  deleteDraftRevision(nodeRevisionUid: string): Promise<void>;
23
- commitDraft(nodeRevisionDraft: NodeRevisionDraft, manifest: Uint8Array, metadata: UploadMetadata, extendedAttributes: {
23
+ commitDraft(nodeRevisionDraft: NodeRevisionDraft, manifest: Uint8Array, _metadata: UploadMetadata, extendedAttributes: {
24
24
  modificationTime?: Date;
25
25
  size?: number;
26
26
  blockSizes?: number[];
27
27
  digests?: {
28
28
  sha1?: string;
29
29
  };
30
- }, encryptedSize: number): Promise<void>;
30
+ }): Promise<void>;
31
31
  }