@protontech/drive-sdk 0.14.1 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/internal/batchLoading.d.ts +2 -0
- package/dist/internal/batchLoading.js +18 -5
- package/dist/internal/batchLoading.js.map +1 -1
- package/dist/internal/batchLoading.test.js +92 -0
- package/dist/internal/batchLoading.test.js.map +1 -1
- package/dist/internal/download/apiService.js +27 -23
- package/dist/internal/download/apiService.js.map +1 -1
- package/dist/internal/events/apiService.js +3 -1
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.js +1 -1
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +3 -2
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/photos/index.js +3 -1
- package/dist/internal/photos/index.js.map +1 -1
- package/dist/internal/photos/upload.d.ts +1 -1
- package/dist/internal/photos/upload.js +2 -2
- package/dist/internal/photos/upload.js.map +1 -1
- package/dist/internal/sharing/events.d.ts +4 -2
- package/dist/internal/sharing/events.js +40 -9
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +30 -2
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.js +1 -1
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +19 -3
- package/dist/internal/upload/fileUploader.js +31 -5
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/fileUploader.test.js +1 -1
- package/dist/internal/upload/fileUploader.test.js.map +1 -1
- package/dist/internal/upload/index.js +4 -11
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/index.test.js +104 -45
- package/dist/internal/upload/index.test.js.map +1 -1
- package/dist/internal/upload/smallFileUploader.d.ts +14 -14
- package/dist/internal/upload/smallFileUploader.js +38 -20
- package/dist/internal/upload/smallFileUploader.js.map +1 -1
- package/dist/internal/upload/smallFileUploader.test.js +35 -36
- package/dist/internal/upload/smallFileUploader.test.js.map +1 -1
- package/package.json +1 -1
- package/src/internal/batchLoading.test.ts +104 -0
- package/src/internal/batchLoading.ts +21 -5
- package/src/internal/download/apiService.ts +32 -28
- package/src/internal/events/apiService.ts +3 -1
- package/src/internal/nodes/nodesAccess.test.ts +4 -3
- package/src/internal/nodes/nodesAccess.ts +1 -1
- package/src/internal/photos/index.ts +2 -0
- package/src/internal/photos/upload.ts +13 -1
- package/src/internal/sharing/events.test.ts +35 -2
- package/src/internal/sharing/events.ts +47 -10
- package/src/internal/sharing/index.ts +1 -0
- package/src/internal/upload/fileUploader.test.ts +1 -0
- package/src/internal/upload/fileUploader.ts +60 -2
- package/src/internal/upload/index.test.ts +121 -63
- package/src/internal/upload/index.ts +4 -30
- package/src/internal/upload/smallFileUploader.test.ts +33 -40
- package/src/internal/upload/smallFileUploader.ts +47 -36
|
@@ -3,12 +3,11 @@ import { AbortError, IntegrityError } from '../../errors';
|
|
|
3
3
|
import { Logger, Thumbnail, ThumbnailType, UploadMetadata } from '../../interface';
|
|
4
4
|
import { getErrorMessage } from '../errors';
|
|
5
5
|
import { generateFileExtendedAttributes } from '../nodes';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { mergeUint8Arrays } from '../utils';
|
|
7
|
+
import { verifyBlockWithContentKey } from './blockVerifier';
|
|
8
8
|
import { UploadCryptoService } from './cryptoService';
|
|
9
9
|
import { UploadDigests } from './digests';
|
|
10
|
-
import {
|
|
11
|
-
import { NodeRevisionDraft, NodeCrypto } from './interface';
|
|
10
|
+
import { NodeCrypto } from './interface';
|
|
12
11
|
import { UploadManager } from './manager';
|
|
13
12
|
import { readStreamToUint8Array } from './streamReader';
|
|
14
13
|
import { MAX_BLOCK_ENCRYPTION_RETRIES } from './streamUploader';
|
|
@@ -25,34 +24,23 @@ export type NodeKeys = {
|
|
|
25
24
|
* Base uploader for small file and small revision uploads.
|
|
26
25
|
* Shares the single-request flow: read content, get node crypto, encrypt, then call API.
|
|
27
26
|
*/
|
|
28
|
-
abstract class SmallUploader
|
|
27
|
+
abstract class SmallUploader {
|
|
29
28
|
protected logger: Logger;
|
|
29
|
+
protected abortController: AbortController;
|
|
30
30
|
|
|
31
31
|
constructor(
|
|
32
|
-
telemetry: UploadTelemetry,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
signal: AbortSignal | undefined,
|
|
32
|
+
protected telemetry: UploadTelemetry,
|
|
33
|
+
protected cryptoService: UploadCryptoService,
|
|
34
|
+
protected manager: UploadManager,
|
|
35
|
+
protected metadata: UploadMetadata,
|
|
36
|
+
protected onFinish: () => void,
|
|
37
|
+
protected signal: AbortSignal | undefined,
|
|
39
38
|
) {
|
|
40
|
-
super(telemetry, apiService, cryptoService, manager, metadata, onFinish, signal);
|
|
41
39
|
this.logger = telemetry.getLoggerForSmallUpload();
|
|
42
|
-
|
|
43
|
-
protected async createRevisionDraft(): Promise<{
|
|
44
|
-
revisionDraft: NodeRevisionDraft;
|
|
45
|
-
blockVerifier: BlockVerifier;
|
|
46
|
-
}> {
|
|
47
|
-
throw new Error('Small upload does not use revision draft');
|
|
40
|
+
this.abortController = new AbortController();
|
|
48
41
|
}
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
protected async deleteRevisionDraft(revisionDraft: NodeRevisionDraft): Promise<void> {
|
|
52
|
-
throw new Error('Small upload does not use revision draft');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
protected async startUpload(
|
|
43
|
+
async upload(
|
|
56
44
|
stream: ReadableStream,
|
|
57
45
|
thumbnails: Thumbnail[],
|
|
58
46
|
onProgress?: (uploadedBytes: number) => void,
|
|
@@ -105,7 +93,8 @@ abstract class SmallUploader extends Uploader {
|
|
|
105
93
|
this.encryptThumbnails(nodeKeys, thumbnails),
|
|
106
94
|
this.encryptContentBlock(nodeKeys, content.data),
|
|
107
95
|
]);
|
|
108
|
-
const
|
|
96
|
+
const manifest = await this.getManifest(encryptedBlock, encryptedThumbnails);
|
|
97
|
+
const commitPayload = await this.encryptCommitPayload(nodeKeys, content.sha1, manifest);
|
|
109
98
|
|
|
110
99
|
return {
|
|
111
100
|
commitPayload,
|
|
@@ -147,12 +136,22 @@ abstract class SmallUploader extends Uploader {
|
|
|
147
136
|
private async encryptThumbnails(
|
|
148
137
|
nodeKeys: NodeKeys,
|
|
149
138
|
thumbnails: Thumbnail[],
|
|
150
|
-
): Promise<
|
|
139
|
+
): Promise<
|
|
140
|
+
{
|
|
141
|
+
type: ThumbnailType;
|
|
142
|
+
encryptedData: Uint8Array<ArrayBuffer>;
|
|
143
|
+
blockHash: Uint8Array<ArrayBuffer>;
|
|
144
|
+
}[]
|
|
145
|
+
> {
|
|
151
146
|
const result = [];
|
|
152
147
|
for (const thumbnail of thumbnails) {
|
|
153
148
|
this.logger.debug(`Encrypting thumbnail ${thumbnail.type}`);
|
|
154
149
|
const enc = await this.cryptoService.encryptThumbnail(nodeKeys, thumbnail);
|
|
155
|
-
result.push({
|
|
150
|
+
result.push({
|
|
151
|
+
type: thumbnail.type,
|
|
152
|
+
encryptedData: enc.encryptedData,
|
|
153
|
+
blockHash: await enc.hashPromise,
|
|
154
|
+
});
|
|
156
155
|
}
|
|
157
156
|
return result;
|
|
158
157
|
}
|
|
@@ -228,21 +227,35 @@ abstract class SmallUploader extends Uploader {
|
|
|
228
227
|
};
|
|
229
228
|
}
|
|
230
229
|
|
|
231
|
-
private async
|
|
232
|
-
nodeKeys: NodeKeys,
|
|
233
|
-
contentSha1: string,
|
|
230
|
+
private async getManifest(
|
|
234
231
|
encryptedBlock:
|
|
235
232
|
| {
|
|
236
233
|
blockHash: Uint8Array<ArrayBuffer>;
|
|
237
234
|
}
|
|
238
235
|
| undefined,
|
|
236
|
+
encryptedThumbnails: {
|
|
237
|
+
type: ThumbnailType;
|
|
238
|
+
blockHash: Uint8Array<ArrayBuffer>;
|
|
239
|
+
}[],
|
|
240
|
+
): Promise<Uint8Array<ArrayBuffer>> {
|
|
241
|
+
encryptedThumbnails.sort((a, b) => a.type - b.type);
|
|
242
|
+
const hashes = [
|
|
243
|
+
...(await Promise.all(encryptedThumbnails.map(({ blockHash }) => blockHash))),
|
|
244
|
+
...(encryptedBlock ? [encryptedBlock.blockHash] : []),
|
|
245
|
+
];
|
|
246
|
+
return mergeUint8Arrays(hashes);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private async encryptCommitPayload(
|
|
250
|
+
nodeKeys: NodeKeys,
|
|
251
|
+
contentSha1: string,
|
|
252
|
+
manifest: Uint8Array<ArrayBuffer>,
|
|
239
253
|
): Promise<{
|
|
240
254
|
armoredManifestSignature: string;
|
|
241
255
|
armoredExtendedAttributes: string;
|
|
242
256
|
}> {
|
|
243
257
|
this.logger.debug(`Preparing commit payload`);
|
|
244
258
|
|
|
245
|
-
const manifest = encryptedBlock ? encryptedBlock.blockHash : new Uint8Array(0);
|
|
246
259
|
const extendedAttributes = generateFileExtendedAttributes(
|
|
247
260
|
{
|
|
248
261
|
modificationTime: this.metadata.modificationTime,
|
|
@@ -266,7 +279,6 @@ abstract class SmallUploader extends Uploader {
|
|
|
266
279
|
export class SmallFileUploader extends SmallUploader {
|
|
267
280
|
constructor(
|
|
268
281
|
telemetry: UploadTelemetry,
|
|
269
|
-
apiService: UploadAPIService,
|
|
270
282
|
cryptoService: UploadCryptoService,
|
|
271
283
|
manager: UploadManager,
|
|
272
284
|
metadata: UploadMetadata,
|
|
@@ -275,7 +287,7 @@ export class SmallFileUploader extends SmallUploader {
|
|
|
275
287
|
private parentFolderUid: string,
|
|
276
288
|
private name: string,
|
|
277
289
|
) {
|
|
278
|
-
super(telemetry,
|
|
290
|
+
super(telemetry, cryptoService, manager, metadata, onFinish, signal);
|
|
279
291
|
this.parentFolderUid = parentFolderUid;
|
|
280
292
|
this.name = name;
|
|
281
293
|
}
|
|
@@ -317,7 +329,6 @@ export class SmallFileUploader extends SmallUploader {
|
|
|
317
329
|
export class SmallFileRevisionUploader extends SmallUploader {
|
|
318
330
|
constructor(
|
|
319
331
|
telemetry: UploadTelemetry,
|
|
320
|
-
apiService: UploadAPIService,
|
|
321
332
|
cryptoService: UploadCryptoService,
|
|
322
333
|
manager: UploadManager,
|
|
323
334
|
metadata: UploadMetadata,
|
|
@@ -325,7 +336,7 @@ export class SmallFileRevisionUploader extends SmallUploader {
|
|
|
325
336
|
signal: AbortSignal | undefined,
|
|
326
337
|
private nodeUid: string,
|
|
327
338
|
) {
|
|
328
|
-
super(telemetry,
|
|
339
|
+
super(telemetry, cryptoService, manager, metadata, onFinish, signal);
|
|
329
340
|
this.nodeUid = nodeUid;
|
|
330
341
|
}
|
|
331
342
|
|