@protontech/drive-sdk 0.12.1 → 0.13.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.
- package/dist/crypto/driveCrypto.d.ts +1 -0
- package/dist/crypto/driveCrypto.js +1 -0
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/interface/events.d.ts +1 -1
- package/dist/interface/featureFlags.d.ts +2 -1
- package/dist/interface/featureFlags.js +1 -0
- package/dist/interface/featureFlags.js.map +1 -1
- package/dist/interface/httpClient.d.ts +1 -0
- package/dist/interface/nodes.d.ts +7 -0
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/telemetry.d.ts +4 -0
- package/dist/interface/telemetry.js.map +1 -1
- package/dist/internal/apiService/apiService.d.ts +1 -0
- package/dist/internal/apiService/apiService.js +16 -7
- package/dist/internal/apiService/apiService.js.map +1 -1
- package/dist/internal/apiService/apiService.test.js +24 -0
- package/dist/internal/apiService/apiService.test.js.map +1 -1
- package/dist/internal/apiService/driveTypes.d.ts +162 -101
- package/dist/internal/download/telemetry.js +4 -0
- package/dist/internal/download/telemetry.js.map +1 -1
- package/dist/internal/download/telemetry.test.js +5 -0
- package/dist/internal/download/telemetry.test.js.map +1 -1
- package/dist/internal/events/index.js +2 -2
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +1 -1
- package/dist/internal/nodes/apiService.d.ts +4 -0
- package/dist/internal/nodes/apiService.js +4 -0
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +8 -0
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.js +3 -0
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.d.ts +5 -5
- package/dist/internal/nodes/extendedAttributes.js +5 -14
- package/dist/internal/nodes/extendedAttributes.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.test.js +16 -22
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +5 -0
- package/dist/internal/nodes/nodesManagement.d.ts +3 -3
- package/dist/internal/nodes/nodesManagement.js +7 -5
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/photos/albumsManager.js +1 -0
- package/dist/internal/photos/albumsManager.js.map +1 -1
- package/dist/internal/photos/nodes.d.ts +1 -1
- package/dist/internal/photos/nodes.js +2 -2
- package/dist/internal/photos/nodes.js.map +1 -1
- package/dist/internal/photos/upload.d.ts +5 -5
- package/dist/internal/photos/upload.js +8 -2
- package/dist/internal/photos/upload.js.map +1 -1
- package/dist/internal/sharing/apiService.js +1 -1
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharingPublic/nodes.d.ts +1 -0
- package/dist/internal/upload/apiService.d.ts +45 -1
- package/dist/internal/upload/apiService.js +69 -1
- package/dist/internal/upload/apiService.js.map +1 -1
- package/dist/internal/upload/blockVerifier.d.ts +4 -1
- package/dist/internal/upload/blockVerifier.js +5 -0
- package/dist/internal/upload/blockVerifier.js.map +1 -1
- package/dist/internal/upload/cryptoService.d.ts +2 -2
- package/dist/internal/upload/cryptoService.js +1 -3
- package/dist/internal/upload/cryptoService.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +4 -3
- package/dist/internal/upload/fileUploader.js +17 -7
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/index.d.ts +3 -3
- package/dist/internal/upload/index.js +17 -1
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/index.test.d.ts +1 -0
- package/dist/internal/upload/index.test.js +71 -0
- package/dist/internal/upload/index.test.js.map +1 -0
- package/dist/internal/upload/interface.d.ts +2 -0
- package/dist/internal/upload/manager.d.ts +41 -2
- package/dist/internal/upload/manager.js +126 -44
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +268 -1
- package/dist/internal/upload/manager.test.js.map +1 -1
- package/dist/internal/upload/smallFileUploader.d.ts +83 -0
- package/dist/internal/upload/smallFileUploader.js +197 -0
- package/dist/internal/upload/smallFileUploader.js.map +1 -0
- package/dist/internal/upload/smallFileUploader.test.d.ts +1 -0
- package/dist/internal/upload/smallFileUploader.test.js +358 -0
- package/dist/internal/upload/smallFileUploader.test.js.map +1 -0
- package/dist/internal/upload/streamReader.d.ts +4 -0
- package/dist/internal/upload/streamReader.js +37 -0
- package/dist/internal/upload/streamReader.js.map +1 -0
- package/dist/internal/upload/streamReader.test.d.ts +1 -0
- package/dist/internal/upload/streamReader.test.js +90 -0
- package/dist/internal/upload/streamReader.test.js.map +1 -0
- package/dist/internal/upload/streamUploader.d.ts +6 -0
- package/dist/internal/upload/streamUploader.js +3 -3
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/telemetry.d.ts +3 -2
- package/dist/internal/upload/telemetry.js +5 -0
- package/dist/internal/upload/telemetry.js.map +1 -1
- package/dist/internal/upload/telemetry.test.js +6 -0
- package/dist/internal/upload/telemetry.test.js.map +1 -1
- package/dist/protonDrivePhotosClient.d.ts +1 -1
- package/dist/protonDrivePublicLinkClient.js +3 -1
- package/dist/protonDrivePublicLinkClient.js.map +1 -1
- package/dist/telemetry.d.ts +1 -0
- package/dist/telemetry.js +21 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/telemetry.test.d.ts +1 -0
- package/dist/telemetry.test.js +37 -0
- package/dist/telemetry.test.js.map +1 -0
- package/dist/transformers.d.ts +1 -1
- package/dist/transformers.js +1 -0
- package/dist/transformers.js.map +1 -1
- package/package.json +1 -1
- package/src/crypto/driveCrypto.ts +2 -0
- package/src/interface/events.ts +1 -1
- package/src/interface/featureFlags.ts +1 -0
- package/src/interface/httpClient.ts +1 -0
- package/src/interface/nodes.ts +7 -0
- package/src/interface/telemetry.ts +4 -0
- package/src/internal/apiService/apiService.test.ts +30 -0
- package/src/internal/apiService/apiService.ts +23 -7
- package/src/internal/apiService/driveTypes.ts +162 -101
- package/src/internal/download/telemetry.test.ts +5 -0
- package/src/internal/download/telemetry.ts +5 -1
- package/src/internal/events/index.ts +2 -2
- package/src/internal/events/interface.ts +1 -1
- package/src/internal/nodes/apiService.test.ts +9 -0
- package/src/internal/nodes/apiService.ts +4 -0
- package/src/internal/nodes/cryptoService.ts +11 -1
- package/src/internal/nodes/extendedAttributes.test.ts +25 -25
- package/src/internal/nodes/extendedAttributes.ts +10 -19
- package/src/internal/nodes/interface.ts +5 -0
- package/src/internal/nodes/nodesManagement.ts +8 -6
- package/src/internal/photos/albumsManager.ts +1 -0
- package/src/internal/photos/nodes.ts +2 -2
- package/src/internal/photos/upload.ts +23 -10
- package/src/internal/sharing/apiService.ts +5 -5
- package/src/internal/upload/apiService.ts +167 -2
- package/src/internal/upload/blockVerifier.ts +12 -0
- package/src/internal/upload/cryptoService.ts +10 -10
- package/src/internal/upload/fileUploader.ts +20 -7
- package/src/internal/upload/index.test.ts +99 -0
- package/src/internal/upload/index.ts +45 -4
- package/src/internal/upload/interface.ts +2 -0
- package/src/internal/upload/manager.test.ts +368 -2
- package/src/internal/upload/manager.ts +229 -78
- package/src/internal/upload/smallFileUploader.test.ts +491 -0
- package/src/internal/upload/smallFileUploader.ts +353 -0
- package/src/internal/upload/streamReader.test.ts +109 -0
- package/src/internal/upload/streamReader.ts +38 -0
- package/src/internal/upload/streamUploader.ts +1 -1
- package/src/internal/upload/telemetry.test.ts +6 -0
- package/src/internal/upload/telemetry.ts +8 -2
- package/src/protonDrivePhotosClient.ts +1 -1
- package/src/protonDrivePublicLinkClient.ts +2 -0
- package/src/telemetry.test.ts +40 -0
- package/src/telemetry.ts +22 -0
- package/src/transformers.ts +2 -0
|
@@ -1392,7 +1392,7 @@ export interface paths {
|
|
|
1392
1392
|
put?: never;
|
|
1393
1393
|
/**
|
|
1394
1394
|
* Request block upload
|
|
1395
|
-
* @description Request upload
|
|
1395
|
+
* @description Request upload URLs for a set of blocks/thumbnails of a given draft revision.
|
|
1396
1396
|
*/
|
|
1397
1397
|
post: operations["post_drive-blocks"];
|
|
1398
1398
|
delete?: never;
|
|
@@ -1410,10 +1410,7 @@ export interface paths {
|
|
|
1410
1410
|
};
|
|
1411
1411
|
get?: never;
|
|
1412
1412
|
put?: never;
|
|
1413
|
-
/**
|
|
1414
|
-
* Upload small file
|
|
1415
|
-
* @description This does not support anonymous uploads (yet)
|
|
1416
|
-
*/
|
|
1413
|
+
/** Upload small file */
|
|
1417
1414
|
post: operations["post_drive-v2-volumes-{volumeID}-files-small"];
|
|
1418
1415
|
delete?: never;
|
|
1419
1416
|
options?: never;
|
|
@@ -1430,10 +1427,7 @@ export interface paths {
|
|
|
1430
1427
|
};
|
|
1431
1428
|
get?: never;
|
|
1432
1429
|
put?: never;
|
|
1433
|
-
/**
|
|
1434
|
-
* Upload small revision
|
|
1435
|
-
* @description This does not support anonymous uploads (yet)
|
|
1436
|
-
*/
|
|
1430
|
+
/** Upload small revision */
|
|
1437
1431
|
post: operations["post_drive-v2-volumes-{volumeID}-files-{linkID}-revisions-small"];
|
|
1438
1432
|
delete?: never;
|
|
1439
1433
|
options?: never;
|
|
@@ -2148,7 +2142,10 @@ export interface paths {
|
|
|
2148
2142
|
path?: never;
|
|
2149
2143
|
cookie?: never;
|
|
2150
2144
|
};
|
|
2151
|
-
/**
|
|
2145
|
+
/**
|
|
2146
|
+
* List URLs on share
|
|
2147
|
+
* @description There can only be one or zero share URLs on a given share.
|
|
2148
|
+
*/
|
|
2152
2149
|
get: operations["get_drive-shares-{shareID}-urls"];
|
|
2153
2150
|
put?: never;
|
|
2154
2151
|
/** Share by URL */
|
|
@@ -2465,6 +2462,46 @@ export interface paths {
|
|
|
2465
2462
|
patch?: never;
|
|
2466
2463
|
trace?: never;
|
|
2467
2464
|
};
|
|
2465
|
+
"/drive/unauth/v2/volumes/{volumeID}/files/small": {
|
|
2466
|
+
parameters: {
|
|
2467
|
+
query?: never;
|
|
2468
|
+
header?: never;
|
|
2469
|
+
path?: never;
|
|
2470
|
+
cookie?: never;
|
|
2471
|
+
};
|
|
2472
|
+
get?: never;
|
|
2473
|
+
put?: never;
|
|
2474
|
+
/**
|
|
2475
|
+
* Upload small file
|
|
2476
|
+
* @description See /drive/v2/volumes/{volumeID}/files/small for full documentation
|
|
2477
|
+
*/
|
|
2478
|
+
post: operations["post_drive-unauth-v2-volumes-{volumeID}-files-small"];
|
|
2479
|
+
delete?: never;
|
|
2480
|
+
options?: never;
|
|
2481
|
+
head?: never;
|
|
2482
|
+
patch?: never;
|
|
2483
|
+
trace?: never;
|
|
2484
|
+
};
|
|
2485
|
+
"/drive/unauth/v2/volumes/{volumeID}/files/{linkID}/revisions/small": {
|
|
2486
|
+
parameters: {
|
|
2487
|
+
query?: never;
|
|
2488
|
+
header?: never;
|
|
2489
|
+
path?: never;
|
|
2490
|
+
cookie?: never;
|
|
2491
|
+
};
|
|
2492
|
+
get?: never;
|
|
2493
|
+
put?: never;
|
|
2494
|
+
/**
|
|
2495
|
+
* Upload small revision
|
|
2496
|
+
* @description See /drive/v2/volumes/{volumeID}/files/{linkID}/revisions/small for full documentation
|
|
2497
|
+
*/
|
|
2498
|
+
post: operations["post_drive-unauth-v2-volumes-{volumeID}-files-{linkID}-revisions-small"];
|
|
2499
|
+
delete?: never;
|
|
2500
|
+
options?: never;
|
|
2501
|
+
head?: never;
|
|
2502
|
+
patch?: never;
|
|
2503
|
+
trace?: never;
|
|
2504
|
+
};
|
|
2468
2505
|
"/drive/unauth/v2/volumes/{volumeID}/links/{linkID}/revisions/{revisionID}/verification": {
|
|
2469
2506
|
parameters: {
|
|
2470
2507
|
query?: never;
|
|
@@ -2607,6 +2644,26 @@ export interface paths {
|
|
|
2607
2644
|
patch?: never;
|
|
2608
2645
|
trace?: never;
|
|
2609
2646
|
};
|
|
2647
|
+
"/drive/shares/{shareID}/editors-can-share": {
|
|
2648
|
+
parameters: {
|
|
2649
|
+
query?: never;
|
|
2650
|
+
header?: never;
|
|
2651
|
+
path?: never;
|
|
2652
|
+
cookie?: never;
|
|
2653
|
+
};
|
|
2654
|
+
get?: never;
|
|
2655
|
+
/**
|
|
2656
|
+
* Update editorsCanShare property of a share
|
|
2657
|
+
* @description Only allowed to volume owners and members with Admin rights on the Parent
|
|
2658
|
+
*/
|
|
2659
|
+
put: operations["put_drive-shares-{shareID}-editors-can-share"];
|
|
2660
|
+
post?: never;
|
|
2661
|
+
delete?: never;
|
|
2662
|
+
options?: never;
|
|
2663
|
+
head?: never;
|
|
2664
|
+
patch?: never;
|
|
2665
|
+
trace?: never;
|
|
2666
|
+
};
|
|
2610
2667
|
"/drive/shares/{shareID}/owner": {
|
|
2611
2668
|
parameters: {
|
|
2612
2669
|
query?: never;
|
|
@@ -2639,6 +2696,7 @@ export interface paths {
|
|
|
2639
2696
|
put?: never;
|
|
2640
2697
|
/**
|
|
2641
2698
|
* Update properties of a share
|
|
2699
|
+
* @deprecated
|
|
2642
2700
|
* @description Update the values on one or more properties of the Share. For now, only allowed changing editorsCanShare attribute
|
|
2643
2701
|
*/
|
|
2644
2702
|
post: operations["post_drive-shares-{shareID}-property"];
|
|
@@ -4540,6 +4598,15 @@ export interface components {
|
|
|
4540
4598
|
* @enum {integer}
|
|
4541
4599
|
*/
|
|
4542
4600
|
LinkState2: 0 | 1 | 2;
|
|
4601
|
+
OwnedByDto: {
|
|
4602
|
+
/**
|
|
4603
|
+
* Format: email
|
|
4604
|
+
* @description OwnerUser email for regular and photo volumes, null otherwise
|
|
4605
|
+
*/
|
|
4606
|
+
Email?: string | null;
|
|
4607
|
+
/** @description OwnerOrganization name for org. volumes, null otherwise */
|
|
4608
|
+
Organization?: string | null;
|
|
4609
|
+
};
|
|
4543
4610
|
LinkDto: {
|
|
4544
4611
|
LinkID: components["schemas"]["Id"];
|
|
4545
4612
|
Type: components["schemas"]["NodeType2"];
|
|
@@ -4557,6 +4624,7 @@ export interface components {
|
|
|
4557
4624
|
SignatureEmail?: string | null;
|
|
4558
4625
|
/** Format: email */
|
|
4559
4626
|
NameSignatureEmail?: string | null;
|
|
4627
|
+
OwnedBy: components["schemas"]["OwnedByDto"];
|
|
4560
4628
|
/** @default null */
|
|
4561
4629
|
DirectPermissions: number | null;
|
|
4562
4630
|
};
|
|
@@ -5236,6 +5304,8 @@ export interface components {
|
|
|
5236
5304
|
State: components["schemas"]["HealthCheckState"];
|
|
5237
5305
|
};
|
|
5238
5306
|
AbuseReportDto: {
|
|
5307
|
+
/** @description Passphrase for reported Link's Node key, unencrypted, as a string, escaped for JSON. */
|
|
5308
|
+
ResourcePassphrase: string;
|
|
5239
5309
|
/**
|
|
5240
5310
|
* @description Reported ShareURL, complete including fragment
|
|
5241
5311
|
* @example https://drive.proton.me/urls/1F9BKXYDMA#yF7d7bn01GMM
|
|
@@ -5243,8 +5313,6 @@ export interface components {
|
|
|
5243
5313
|
ShareURL: string;
|
|
5244
5314
|
/** @enum {string} */
|
|
5245
5315
|
AbuseCategory: "spam" | "copyright" | "child-abuse" | "stolen-data" | "malware" | "other";
|
|
5246
|
-
/** @description Passphrase for reported Link's Node key, unencrypted, as a string, escaped for JSON. */
|
|
5247
|
-
ResourcePassphrase: string;
|
|
5248
5316
|
/**
|
|
5249
5317
|
* @description Full password, including custom part, as string, escaped for JSON
|
|
5250
5318
|
* @default
|
|
@@ -5984,11 +6052,10 @@ export interface components {
|
|
|
5984
6052
|
ShareURLs: components["schemas"]["ShareURLResponseDto"][];
|
|
5985
6053
|
/**
|
|
5986
6054
|
* @deprecated
|
|
5987
|
-
* @description
|
|
6055
|
+
* @description Unused and deprecated. Always empty.
|
|
6056
|
+
* @default []
|
|
5988
6057
|
*/
|
|
5989
|
-
Links:
|
|
5990
|
-
[key: string]: components["schemas"]["ExtendedLinkTransformer"];
|
|
5991
|
-
};
|
|
6058
|
+
Links: Record<string, never>;
|
|
5992
6059
|
/**
|
|
5993
6060
|
* ProtonResponseCode
|
|
5994
6061
|
* @example 1000
|
|
@@ -6344,6 +6411,10 @@ export interface components {
|
|
|
6344
6411
|
*/
|
|
6345
6412
|
Code: 1000;
|
|
6346
6413
|
};
|
|
6414
|
+
UpdateShareEditorsCanShareRequestDto: {
|
|
6415
|
+
/** @description Indicates if editor members of this share could reshare it or not */
|
|
6416
|
+
Value: boolean;
|
|
6417
|
+
};
|
|
6347
6418
|
TransferInput: {
|
|
6348
6419
|
/** @description The ID of the new address */
|
|
6349
6420
|
AddressID: string;
|
|
@@ -7275,23 +7346,6 @@ export interface operations {
|
|
|
7275
7346
|
};
|
|
7276
7347
|
};
|
|
7277
7348
|
};
|
|
7278
|
-
/** @description Failed dependency */
|
|
7279
|
-
424: {
|
|
7280
|
-
headers: {
|
|
7281
|
-
[name: string]: unknown;
|
|
7282
|
-
};
|
|
7283
|
-
content: {
|
|
7284
|
-
"application/json": {
|
|
7285
|
-
/**
|
|
7286
|
-
* @description Potential codes:
|
|
7287
|
-
* - 2032
|
|
7288
|
-
*
|
|
7289
|
-
* @enum {integer}
|
|
7290
|
-
*/
|
|
7291
|
-
Code: 2032;
|
|
7292
|
-
};
|
|
7293
|
-
};
|
|
7294
|
-
};
|
|
7295
7349
|
};
|
|
7296
7350
|
};
|
|
7297
7351
|
"post_drive-photos-volumes": {
|
|
@@ -7333,23 +7387,6 @@ export interface operations {
|
|
|
7333
7387
|
};
|
|
7334
7388
|
};
|
|
7335
7389
|
};
|
|
7336
|
-
/** @description Failed dependency */
|
|
7337
|
-
424: {
|
|
7338
|
-
headers: {
|
|
7339
|
-
[name: string]: unknown;
|
|
7340
|
-
};
|
|
7341
|
-
content: {
|
|
7342
|
-
"application/json": {
|
|
7343
|
-
/**
|
|
7344
|
-
* @description Potential codes:
|
|
7345
|
-
* - 2032
|
|
7346
|
-
*
|
|
7347
|
-
* @enum {integer}
|
|
7348
|
-
*/
|
|
7349
|
-
Code: 2032;
|
|
7350
|
-
};
|
|
7351
|
-
};
|
|
7352
|
-
};
|
|
7353
7390
|
};
|
|
7354
7391
|
};
|
|
7355
7392
|
"put_drive-photos-volumes-{volumeID}-albums-{linkID}": {
|
|
@@ -7393,26 +7430,6 @@ export interface operations {
|
|
|
7393
7430
|
};
|
|
7394
7431
|
};
|
|
7395
7432
|
};
|
|
7396
|
-
/** @description Failed dependency */
|
|
7397
|
-
424: {
|
|
7398
|
-
headers: {
|
|
7399
|
-
[name: string]: unknown;
|
|
7400
|
-
};
|
|
7401
|
-
content: {
|
|
7402
|
-
"application/json": {
|
|
7403
|
-
/**
|
|
7404
|
-
* @description Potential codes:
|
|
7405
|
-
* - 2501: File or folder not found
|
|
7406
|
-
* - 2001: Invalid PGP message
|
|
7407
|
-
* - 200501: Operation failed: Please retry
|
|
7408
|
-
* - 2032
|
|
7409
|
-
*
|
|
7410
|
-
* @enum {integer}
|
|
7411
|
-
*/
|
|
7412
|
-
Code: 2032;
|
|
7413
|
-
};
|
|
7414
|
-
};
|
|
7415
|
-
};
|
|
7416
7433
|
};
|
|
7417
7434
|
};
|
|
7418
7435
|
"delete_drive-photos-volumes-{volumeID}-albums-{linkID}": {
|
|
@@ -10832,23 +10849,6 @@ export interface operations {
|
|
|
10832
10849
|
};
|
|
10833
10850
|
};
|
|
10834
10851
|
};
|
|
10835
|
-
/** @description Failed dependency */
|
|
10836
|
-
424: {
|
|
10837
|
-
headers: {
|
|
10838
|
-
[name: string]: unknown;
|
|
10839
|
-
};
|
|
10840
|
-
content: {
|
|
10841
|
-
"application/json": {
|
|
10842
|
-
/**
|
|
10843
|
-
* @description Potential codes:
|
|
10844
|
-
* - 2032
|
|
10845
|
-
*
|
|
10846
|
-
* @enum {integer}
|
|
10847
|
-
*/
|
|
10848
|
-
Code: 2032;
|
|
10849
|
-
};
|
|
10850
|
-
};
|
|
10851
|
-
};
|
|
10852
10852
|
};
|
|
10853
10853
|
};
|
|
10854
10854
|
"post_drive-urls-{token}-auth": {
|
|
@@ -11570,20 +11570,7 @@ export interface operations {
|
|
|
11570
11570
|
};
|
|
11571
11571
|
"get_drive-shares-{shareID}-urls": {
|
|
11572
11572
|
parameters: {
|
|
11573
|
-
query?:
|
|
11574
|
-
/**
|
|
11575
|
-
* @deprecated
|
|
11576
|
-
* @description By default, only shareURL pointing to the share are returned. With Recursive=1, list all shareURLs in the subtree reachable from the Share. 1 (true) or 0 (false).
|
|
11577
|
-
*/
|
|
11578
|
-
Recursive?: 0 | 1;
|
|
11579
|
-
/**
|
|
11580
|
-
* @deprecated
|
|
11581
|
-
* @description Fetch Thumbnail URLs
|
|
11582
|
-
*/
|
|
11583
|
-
Thumbnails?: 0 | 1;
|
|
11584
|
-
PageSize?: components["schemas"]["OffsetPagination"]["PageSize"] & unknown;
|
|
11585
|
-
Page?: components["schemas"]["OffsetPagination"]["Page"] & unknown;
|
|
11586
|
-
};
|
|
11573
|
+
query?: never;
|
|
11587
11574
|
header?: never;
|
|
11588
11575
|
path: {
|
|
11589
11576
|
shareID: string;
|
|
@@ -12120,6 +12107,53 @@ export interface operations {
|
|
|
12120
12107
|
};
|
|
12121
12108
|
};
|
|
12122
12109
|
};
|
|
12110
|
+
"post_drive-unauth-v2-volumes-{volumeID}-files-small": {
|
|
12111
|
+
parameters: {
|
|
12112
|
+
query?: never;
|
|
12113
|
+
header?: never;
|
|
12114
|
+
path: {
|
|
12115
|
+
volumeID: string;
|
|
12116
|
+
};
|
|
12117
|
+
cookie?: never;
|
|
12118
|
+
};
|
|
12119
|
+
requestBody?: never;
|
|
12120
|
+
responses: {
|
|
12121
|
+
/** @description Success */
|
|
12122
|
+
200: {
|
|
12123
|
+
headers: {
|
|
12124
|
+
"x-pm-code": 1000;
|
|
12125
|
+
[name: string]: unknown;
|
|
12126
|
+
};
|
|
12127
|
+
content: {
|
|
12128
|
+
"application/json": components["schemas"]["SmallUploadResponseDto"];
|
|
12129
|
+
};
|
|
12130
|
+
};
|
|
12131
|
+
};
|
|
12132
|
+
};
|
|
12133
|
+
"post_drive-unauth-v2-volumes-{volumeID}-files-{linkID}-revisions-small": {
|
|
12134
|
+
parameters: {
|
|
12135
|
+
query?: never;
|
|
12136
|
+
header?: never;
|
|
12137
|
+
path: {
|
|
12138
|
+
volumeID: string;
|
|
12139
|
+
linkID: components["schemas"]["Id"];
|
|
12140
|
+
};
|
|
12141
|
+
cookie?: never;
|
|
12142
|
+
};
|
|
12143
|
+
requestBody?: never;
|
|
12144
|
+
responses: {
|
|
12145
|
+
/** @description Success */
|
|
12146
|
+
200: {
|
|
12147
|
+
headers: {
|
|
12148
|
+
"x-pm-code": 1000;
|
|
12149
|
+
[name: string]: unknown;
|
|
12150
|
+
};
|
|
12151
|
+
content: {
|
|
12152
|
+
"application/json": components["schemas"]["SmallUploadResponseDto"];
|
|
12153
|
+
};
|
|
12154
|
+
};
|
|
12155
|
+
};
|
|
12156
|
+
};
|
|
12123
12157
|
"get_drive-unauth-v2-volumes-{volumeID}-links-{linkID}-revisions-{revisionID}-verification": {
|
|
12124
12158
|
parameters: {
|
|
12125
12159
|
query?: never;
|
|
@@ -12345,6 +12379,33 @@ export interface operations {
|
|
|
12345
12379
|
};
|
|
12346
12380
|
};
|
|
12347
12381
|
};
|
|
12382
|
+
"put_drive-shares-{shareID}-editors-can-share": {
|
|
12383
|
+
parameters: {
|
|
12384
|
+
query?: never;
|
|
12385
|
+
header?: never;
|
|
12386
|
+
path: {
|
|
12387
|
+
shareID: string;
|
|
12388
|
+
};
|
|
12389
|
+
cookie?: never;
|
|
12390
|
+
};
|
|
12391
|
+
requestBody?: {
|
|
12392
|
+
content: {
|
|
12393
|
+
"application/json": components["schemas"]["UpdateShareEditorsCanShareRequestDto"];
|
|
12394
|
+
};
|
|
12395
|
+
};
|
|
12396
|
+
responses: {
|
|
12397
|
+
/** @description Success */
|
|
12398
|
+
200: {
|
|
12399
|
+
headers: {
|
|
12400
|
+
"x-pm-code": 1000;
|
|
12401
|
+
[name: string]: unknown;
|
|
12402
|
+
};
|
|
12403
|
+
content: {
|
|
12404
|
+
"application/json": components["schemas"]["SuccessfulResponse"];
|
|
12405
|
+
};
|
|
12406
|
+
};
|
|
12407
|
+
};
|
|
12408
|
+
};
|
|
12348
12409
|
"post_drive-shares-{shareID}-owner": {
|
|
12349
12410
|
parameters: {
|
|
12350
12411
|
query?: never;
|
|
@@ -38,6 +38,7 @@ describe('DownloadTelemetry', () => {
|
|
|
38
38
|
eventName: 'download',
|
|
39
39
|
volumeType: 'own_volume',
|
|
40
40
|
downloadedSize: 0,
|
|
41
|
+
approximateDownloadedSize: 0,
|
|
41
42
|
error: 'unknown',
|
|
42
43
|
originalError: error,
|
|
43
44
|
});
|
|
@@ -51,7 +52,9 @@ describe('DownloadTelemetry', () => {
|
|
|
51
52
|
eventName: 'download',
|
|
52
53
|
volumeType: 'own_volume',
|
|
53
54
|
downloadedSize: 123,
|
|
55
|
+
approximateDownloadedSize: 4095,
|
|
54
56
|
claimedFileSize: 456,
|
|
57
|
+
approximateClaimedFileSize: 4095,
|
|
55
58
|
error: 'unknown',
|
|
56
59
|
originalError: error,
|
|
57
60
|
});
|
|
@@ -64,7 +67,9 @@ describe('DownloadTelemetry', () => {
|
|
|
64
67
|
eventName: 'download',
|
|
65
68
|
volumeType: 'own_volume',
|
|
66
69
|
downloadedSize: 500,
|
|
70
|
+
approximateDownloadedSize: 4095,
|
|
67
71
|
claimedFileSize: 500,
|
|
72
|
+
approximateClaimedFileSize: 4095,
|
|
68
73
|
});
|
|
69
74
|
});
|
|
70
75
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RateLimitedError, ValidationError, DecryptionError, IntegrityError } from '../../errors';
|
|
2
2
|
import { ProtonDriveTelemetry, MetricsDownloadErrorType, Logger } from '../../interface';
|
|
3
|
-
import { LoggerWithPrefix } from '../../telemetry';
|
|
3
|
+
import { LoggerWithPrefix, reduceSizePrecision } from '../../telemetry';
|
|
4
4
|
import { APIHTTPError } from '../apiService';
|
|
5
5
|
import { splitNodeRevisionUid, splitNodeUid } from '../uids';
|
|
6
6
|
import { SharesService } from './interface';
|
|
@@ -83,6 +83,10 @@ export class DownloadTelemetry {
|
|
|
83
83
|
this.telemetry.recordMetric({
|
|
84
84
|
eventName: 'download',
|
|
85
85
|
volumeType,
|
|
86
|
+
approximateDownloadedSize: reduceSizePrecision(options.downloadedSize),
|
|
87
|
+
approximateClaimedFileSize: options.claimedFileSize
|
|
88
|
+
? reduceSizePrecision(options.claimedFileSize)
|
|
89
|
+
: undefined,
|
|
86
90
|
...options,
|
|
87
91
|
});
|
|
88
92
|
}
|
|
@@ -62,7 +62,7 @@ export class DriveEventsService {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
const coreEventManager = new CoreEventManager(this.logger, this.apiService);
|
|
65
|
-
const latestEventId = this.latestEventIdProvider.getLatestEventId('core')
|
|
65
|
+
const latestEventId = await this.latestEventIdProvider.getLatestEventId('core');
|
|
66
66
|
const eventManager = new EventManager(coreEventManager, CORE_POLLING_INTERVAL, latestEventId);
|
|
67
67
|
|
|
68
68
|
for (const listener of this.cacheEventListeners) {
|
|
@@ -105,7 +105,7 @@ export class DriveEventsService {
|
|
|
105
105
|
|
|
106
106
|
const isOwnVolume = await this.sharesService.isOwnVolume(volumeId);
|
|
107
107
|
const pollingInterval = this.getDefaultVolumePollingInterval(isOwnVolume);
|
|
108
|
-
const latestEventId = this.latestEventIdProvider.getLatestEventId(volumeId);
|
|
108
|
+
const latestEventId = await this.latestEventIdProvider.getLatestEventId(volumeId);
|
|
109
109
|
const eventManager = new EventManager<DriveEvent>(volumeEventManager, pollingInterval, latestEventId);
|
|
110
110
|
|
|
111
111
|
for (const listener of this.cacheEventListeners) {
|
|
@@ -74,6 +74,11 @@ function generateAPINode() {
|
|
|
74
74
|
NodeKey: 'nodeKey',
|
|
75
75
|
NodePassphrase: 'nodePass',
|
|
76
76
|
NodePassphraseSignature: 'nodePassSig',
|
|
77
|
+
|
|
78
|
+
OwnedBy: {
|
|
79
|
+
Email: 'ownerByEmail',
|
|
80
|
+
Organization: null,
|
|
81
|
+
},
|
|
77
82
|
},
|
|
78
83
|
SharingSummary: null,
|
|
79
84
|
};
|
|
@@ -149,6 +154,10 @@ function generateNode() {
|
|
|
149
154
|
isSharedPublicly: false,
|
|
150
155
|
directRole: MemberRole.Admin,
|
|
151
156
|
membership: undefined,
|
|
157
|
+
ownedBy: {
|
|
158
|
+
email: 'ownerByEmail',
|
|
159
|
+
organization: undefined,
|
|
160
|
+
},
|
|
152
161
|
|
|
153
162
|
encryptedCrypto: {
|
|
154
163
|
armoredKey: 'nodeKey',
|
|
@@ -780,6 +780,10 @@ export function linkToEncryptedNodeBaseMetadata(
|
|
|
780
780
|
inviteTime: new Date(link.Membership.InviteTime * 1000),
|
|
781
781
|
}
|
|
782
782
|
: undefined,
|
|
783
|
+
ownedBy: {
|
|
784
|
+
email: link.Link.OwnedBy?.Email || undefined,
|
|
785
|
+
organization: link.Link.OwnedBy?.Organization || undefined,
|
|
786
|
+
},
|
|
783
787
|
};
|
|
784
788
|
|
|
785
789
|
const baseCryptoNodeMetadata = {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { c } from 'ttag';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
base64StringToUint8Array,
|
|
5
|
+
DriveCrypto,
|
|
6
|
+
PrivateKey,
|
|
7
|
+
PublicKey,
|
|
8
|
+
SessionKey,
|
|
9
|
+
VERIFICATION_STATUS,
|
|
10
|
+
} from '../../crypto';
|
|
4
11
|
import {
|
|
5
12
|
resultOk,
|
|
6
13
|
resultError,
|
|
@@ -201,7 +208,9 @@ export class NodesCryptoService {
|
|
|
201
208
|
let activeRevision: Result<DecryptedUnparsedRevision, Error> | undefined;
|
|
202
209
|
let contentKeyPacketSessionKey;
|
|
203
210
|
let contentKeyPacketAuthor;
|
|
211
|
+
let contentKeyPacket: Uint8Array<ArrayBuffer> | undefined;
|
|
204
212
|
if ('file' in node.encryptedCrypto) {
|
|
213
|
+
contentKeyPacket = base64StringToUint8Array(node.encryptedCrypto.file.base64ContentKeyPacket);
|
|
205
214
|
const [activeRevisionPromise, contentKeyPacketSessionKeyPromise] = [
|
|
206
215
|
this.decryptRevision(node.uid, node.encryptedCrypto.activeRevision, key),
|
|
207
216
|
this.decryptContentKeyPacket(node, node.encryptedCrypto, key, keyVerificationKeys),
|
|
@@ -284,6 +293,7 @@ export class NodesCryptoService {
|
|
|
284
293
|
passphrase,
|
|
285
294
|
key,
|
|
286
295
|
passphraseSessionKey,
|
|
296
|
+
contentKeyPacket,
|
|
287
297
|
contentKeyPacketSessionKey,
|
|
288
298
|
hashKey,
|
|
289
299
|
},
|
|
@@ -51,19 +51,15 @@ describe('extended attrbiutes', () => {
|
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
describe('should generate file attributes without additional metadata', () => {
|
|
54
|
-
const testCases: [
|
|
55
|
-
[{}, undefined],
|
|
54
|
+
const testCases: [any, string | undefined][] = [
|
|
56
55
|
[
|
|
57
|
-
{
|
|
58
|
-
'{"Common":{"
|
|
56
|
+
{ size: 0, blockSizes: [], digests: { sha1: 'abcdef' } },
|
|
57
|
+
'{"Common":{"Size":0,"BlockSizes":[],"Digests":{"SHA1":"abcdef"}}}',
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
{ size: 1234, blockSizes: [1200, 34], digests: { sha1: 'gedcba' } },
|
|
61
|
+
'{"Common":{"Size":1234,"BlockSizes":[1200,34],"Digests":{"SHA1":"gedcba"}}}',
|
|
59
62
|
],
|
|
60
|
-
[{ size: undefined }, undefined],
|
|
61
|
-
[{ size: 0 }, '{"Common":{"Size":0}}'],
|
|
62
|
-
[{ size: 1234 }, '{"Common":{"Size":1234}}'],
|
|
63
|
-
[{ blockSizes: [] }, undefined],
|
|
64
|
-
[{ blockSizes: [4, 4, 4, 2] }, '{"Common":{"BlockSizes":[4,4,4,2]}}'],
|
|
65
|
-
[{ digests: {} }, undefined],
|
|
66
|
-
[{ digests: { sha1: 'abcdef' } }, '{"Common":{"Digests":{"SHA1":"abcdef"}}}'],
|
|
67
63
|
[
|
|
68
64
|
{
|
|
69
65
|
modificationTime: new Date(1234567890000),
|
|
@@ -75,7 +71,7 @@ describe('extended attrbiutes', () => {
|
|
|
75
71
|
],
|
|
76
72
|
];
|
|
77
73
|
testCases.forEach(([input, expectedAttributes]) => {
|
|
78
|
-
it(`should generate ${input}`, () => {
|
|
74
|
+
it(`should generate ${JSON.stringify(input)}`, () => {
|
|
79
75
|
const output = generateFileExtendedAttributes(input);
|
|
80
76
|
expect(output).toBe(expectedAttributes);
|
|
81
77
|
});
|
|
@@ -83,24 +79,28 @@ describe('extended attrbiutes', () => {
|
|
|
83
79
|
});
|
|
84
80
|
|
|
85
81
|
describe('should generate file attributes with additional metadata', () => {
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
82
|
+
const input = {
|
|
83
|
+
size: 1234,
|
|
84
|
+
blockSizes: [1200, 34],
|
|
85
|
+
digests: { sha1: 'abcdef' },
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
it(`should generate ${JSON.stringify(input)}`, () => {
|
|
89
|
+
const output = generateFileExtendedAttributes(input, { Media: { Width: 100, Height: 100 } });
|
|
90
|
+
expect(output).toBe(
|
|
91
|
+
'{"Common":{"Size":1234,"BlockSizes":[1200,34],"Digests":{"SHA1":"abcdef"}},"Media":{"Width":100,"Height":100}}',
|
|
92
|
+
);
|
|
96
93
|
});
|
|
97
94
|
});
|
|
98
95
|
|
|
99
96
|
describe('should throw an error if additional metadata contains common attributes', () => {
|
|
100
97
|
it('should throw an error', () => {
|
|
101
|
-
expect(() =>
|
|
102
|
-
|
|
103
|
-
|
|
98
|
+
expect(() =>
|
|
99
|
+
generateFileExtendedAttributes(
|
|
100
|
+
{ size: 123, blockSizes: [], digests: { sha1: 'abcdef' } },
|
|
101
|
+
{ Common: { Hello: 'World' } },
|
|
102
|
+
),
|
|
103
|
+
).toThrow('Common attributes are not allowed in additional metadata');
|
|
104
104
|
});
|
|
105
105
|
});
|
|
106
106
|
|
|
@@ -86,14 +86,14 @@ export function parseFolderExtendedAttributes(logger: Logger, extendedAttributes
|
|
|
86
86
|
export function generateFileExtendedAttributes(
|
|
87
87
|
common: {
|
|
88
88
|
modificationTime?: Date;
|
|
89
|
-
size
|
|
90
|
-
blockSizes
|
|
91
|
-
digests
|
|
92
|
-
sha1
|
|
89
|
+
size: number;
|
|
90
|
+
blockSizes: number[];
|
|
91
|
+
digests: {
|
|
92
|
+
sha1: string;
|
|
93
93
|
};
|
|
94
94
|
},
|
|
95
95
|
additionalMetadata?: object,
|
|
96
|
-
): string
|
|
96
|
+
): string {
|
|
97
97
|
if (additionalMetadata && 'Common' in additionalMetadata) {
|
|
98
98
|
throw new Error('Common attributes are not allowed in additional metadata');
|
|
99
99
|
}
|
|
@@ -102,20 +102,11 @@ export function generateFileExtendedAttributes(
|
|
|
102
102
|
if (common.modificationTime) {
|
|
103
103
|
commonAttributes.ModificationTime = dateToIsoString(common.modificationTime);
|
|
104
104
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
if (common.digests?.sha1) {
|
|
112
|
-
commonAttributes.Digests = {
|
|
113
|
-
SHA1: common.digests.sha1,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
if (!Object.keys(commonAttributes).length && !additionalMetadata) {
|
|
117
|
-
return undefined;
|
|
118
|
-
}
|
|
105
|
+
commonAttributes.Size = common.size;
|
|
106
|
+
commonAttributes.BlockSizes = common.blockSizes;
|
|
107
|
+
commonAttributes.Digests = {
|
|
108
|
+
SHA1: common.digests.sha1,
|
|
109
|
+
};
|
|
119
110
|
return JSON.stringify({
|
|
120
111
|
...(Object.keys(commonAttributes).length ? { Common: commonAttributes } : {}),
|
|
121
112
|
...(additionalMetadata ? { ...additionalMetadata } : {}),
|
|
@@ -47,6 +47,10 @@ interface BaseNode {
|
|
|
47
47
|
inviteTime: Date;
|
|
48
48
|
// TODO: acceptedBy: Author;
|
|
49
49
|
};
|
|
50
|
+
ownedBy: {
|
|
51
|
+
email?: string;
|
|
52
|
+
organization?: string;
|
|
53
|
+
};
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
/**
|
|
@@ -156,6 +160,7 @@ export interface DecryptedNodeKeys {
|
|
|
156
160
|
passphrase: string;
|
|
157
161
|
key: PrivateKey;
|
|
158
162
|
passphraseSessionKey: SessionKey;
|
|
163
|
+
contentKeyPacket?: Uint8Array<ArrayBuffer>;
|
|
159
164
|
contentKeyPacketSessionKey?: SessionKey;
|
|
160
165
|
hashKey?: Uint8Array<ArrayBuffer>;
|
|
161
166
|
}
|