@protontech/drive-sdk 0.3.1 → 0.4.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.
- package/dist/crypto/driveCrypto.d.ts +1 -1
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/crypto/interface.d.ts +1 -1
- package/dist/crypto/openPGPCrypto.d.ts +1 -1
- package/dist/crypto/openPGPCrypto.js +4 -1
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/internal/apiService/errorCodes.d.ts +1 -0
- package/dist/internal/apiService/errors.d.ts +3 -0
- package/dist/internal/apiService/errors.js +7 -1
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/devices/interface.d.ts +1 -1
- package/dist/internal/devices/manager.js +1 -1
- package/dist/internal/devices/manager.js.map +1 -1
- package/dist/internal/devices/manager.test.js +3 -3
- package/dist/internal/devices/manager.test.js.map +1 -1
- package/dist/internal/download/cryptoService.js +2 -2
- package/dist/internal/download/cryptoService.js.map +1 -1
- package/dist/internal/download/fileDownloader.js +2 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/download/fileDownloader.test.js +3 -1
- package/dist/internal/download/fileDownloader.test.js.map +1 -1
- package/dist/internal/events/apiService.js +1 -1
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.js +1 -1
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.js +18 -24
- package/dist/internal/events/coreEventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +3 -4
- package/dist/internal/events/index.js +4 -4
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +3 -0
- package/dist/internal/nodes/apiService.d.ts +12 -3
- package/dist/internal/nodes/apiService.js +53 -13
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +19 -2
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.js +3 -1
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cryptoReporter.d.ts +20 -0
- package/dist/internal/nodes/cryptoReporter.js +96 -0
- package/dist/internal/nodes/cryptoReporter.js.map +1 -0
- package/dist/internal/nodes/cryptoService.d.ts +18 -13
- package/dist/internal/nodes/cryptoService.js +18 -98
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +7 -5
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/errors.d.ts +4 -0
- package/dist/internal/nodes/errors.js +9 -0
- package/dist/internal/nodes/errors.js.map +1 -0
- package/dist/internal/nodes/index.js +3 -1
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/index.test.js +1 -1
- package/dist/internal/nodes/index.test.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +5 -2
- package/dist/internal/nodes/nodesAccess.d.ts +4 -4
- package/dist/internal/nodes/nodesAccess.js +77 -69
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +48 -8
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +2 -0
- package/dist/internal/nodes/nodesManagement.js +86 -9
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +81 -5
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
- package/dist/internal/photos/albums.d.ts +9 -7
- package/dist/internal/photos/albums.js +26 -13
- package/dist/internal/photos/albums.js.map +1 -1
- package/dist/internal/photos/apiService.d.ts +34 -3
- package/dist/internal/photos/apiService.js +96 -3
- package/dist/internal/photos/apiService.js.map +1 -1
- package/dist/internal/photos/index.d.ts +20 -4
- package/dist/internal/photos/index.js +30 -7
- package/dist/internal/photos/index.js.map +1 -1
- package/dist/internal/photos/interface.d.ts +25 -1
- package/dist/internal/photos/shares.d.ts +43 -0
- package/dist/internal/photos/shares.js +112 -0
- package/dist/internal/photos/shares.js.map +1 -0
- package/dist/internal/photos/timeline.d.ts +15 -0
- package/dist/internal/photos/timeline.js +22 -0
- package/dist/internal/photos/timeline.js.map +1 -0
- package/dist/internal/shares/manager.d.ts +1 -1
- package/dist/internal/shares/manager.js +4 -4
- package/dist/internal/shares/manager.js.map +1 -1
- package/dist/internal/shares/manager.test.js +7 -7
- package/dist/internal/shares/manager.test.js.map +1 -1
- package/dist/internal/sharing/cache.d.ts +3 -0
- package/dist/internal/sharing/cache.js +17 -2
- package/dist/internal/sharing/cache.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +2 -2
- package/dist/internal/sharing/interface.js +1 -1
- package/dist/internal/sharing/sharingAccess.js +7 -1
- package/dist/internal/sharing/sharingAccess.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.test.js +243 -34
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
- package/dist/internal/sharingPublic/apiService.d.ts +1 -1
- package/dist/internal/sharingPublic/apiService.js +9 -2
- package/dist/internal/sharingPublic/apiService.js.map +1 -1
- package/dist/internal/sharingPublic/cryptoService.d.ts +6 -20
- package/dist/internal/sharingPublic/cryptoService.js +40 -103
- package/dist/internal/sharingPublic/cryptoService.js.map +1 -1
- package/dist/internal/sharingPublic/index.d.ts +2 -2
- package/dist/internal/sharingPublic/index.js +2 -2
- package/dist/internal/sharingPublic/index.js.map +1 -1
- package/dist/internal/sharingPublic/interface.d.ts +1 -43
- package/dist/internal/sharingPublic/manager.d.ts +1 -1
- package/dist/internal/sharingPublic/manager.js +9 -7
- package/dist/internal/sharingPublic/manager.js.map +1 -1
- package/dist/internal/upload/streamUploader.js +1 -1
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/streamUploader.test.js +3 -1
- package/dist/internal/upload/streamUploader.test.js.map +1 -1
- package/dist/protonDriveClient.d.ts +20 -3
- package/dist/protonDriveClient.js +24 -4
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePhotosClient.d.ts +86 -12
- package/dist/protonDrivePhotosClient.js +132 -29
- package/dist/protonDrivePhotosClient.js.map +1 -1
- package/dist/protonDrivePublicLinkClient.d.ts +13 -4
- package/dist/protonDrivePublicLinkClient.js +13 -11
- package/dist/protonDrivePublicLinkClient.js.map +1 -1
- package/package.json +1 -1
- package/src/crypto/driveCrypto.ts +1 -1
- package/src/crypto/interface.ts +1 -1
- package/src/crypto/openPGPCrypto.ts +5 -2
- package/src/internal/apiService/errorCodes.ts +1 -0
- package/src/internal/apiService/errors.ts +6 -0
- package/src/internal/devices/interface.ts +1 -1
- package/src/internal/devices/manager.test.ts +3 -3
- package/src/internal/devices/manager.ts +1 -1
- package/src/internal/download/cryptoService.ts +2 -2
- package/src/internal/download/fileDownloader.test.ts +3 -1
- package/src/internal/download/fileDownloader.ts +2 -2
- package/src/internal/events/apiService.ts +1 -1
- package/src/internal/events/coreEventManager.test.ts +21 -27
- package/src/internal/events/coreEventManager.ts +1 -1
- package/src/internal/events/index.ts +3 -4
- package/src/internal/events/interface.ts +4 -0
- package/src/internal/nodes/apiService.test.ts +35 -1
- package/src/internal/nodes/apiService.ts +103 -17
- package/src/internal/nodes/cache.ts +3 -1
- package/src/internal/nodes/cryptoReporter.ts +145 -0
- package/src/internal/nodes/cryptoService.test.ts +11 -9
- package/src/internal/nodes/cryptoService.ts +45 -138
- package/src/internal/nodes/errors.ts +5 -0
- package/src/internal/nodes/index.test.ts +1 -1
- package/src/internal/nodes/index.ts +3 -1
- package/src/internal/nodes/interface.ts +6 -2
- package/src/internal/nodes/nodesAccess.test.ts +68 -8
- package/src/internal/nodes/nodesAccess.ts +101 -76
- package/src/internal/nodes/nodesManagement.test.ts +100 -5
- package/src/internal/nodes/nodesManagement.ts +100 -13
- package/src/internal/photos/albums.ts +31 -12
- package/src/internal/photos/apiService.ts +159 -4
- package/src/internal/photos/index.ts +54 -9
- package/src/internal/photos/interface.ts +23 -1
- package/src/internal/photos/shares.ts +134 -0
- package/src/internal/photos/timeline.ts +24 -0
- package/src/internal/shares/manager.test.ts +7 -7
- package/src/internal/shares/manager.ts +4 -4
- package/src/internal/sharing/cache.ts +19 -2
- package/src/internal/sharing/interface.ts +2 -2
- package/src/internal/sharing/sharingAccess.test.ts +283 -35
- package/src/internal/sharing/sharingAccess.ts +7 -1
- package/src/internal/sharingPublic/apiService.ts +11 -2
- package/src/internal/sharingPublic/cryptoService.ts +71 -135
- package/src/internal/sharingPublic/index.ts +3 -2
- package/src/internal/sharingPublic/interface.ts +8 -53
- package/src/internal/sharingPublic/manager.ts +9 -8
- package/src/internal/upload/streamUploader.test.ts +3 -1
- package/src/internal/upload/streamUploader.ts +1 -1
- package/src/protonDriveClient.ts +34 -4
- package/src/protonDrivePhotosClient.ts +211 -32
- package/src/protonDrivePublicLinkClient.ts +26 -12
- package/dist/internal/photos/cache.d.ts +0 -6
- package/dist/internal/photos/cache.js +0 -15
- package/dist/internal/photos/cache.js.map +0 -1
- package/dist/internal/photos/photosTimeline.d.ts +0 -10
- package/dist/internal/photos/photosTimeline.js +0 -19
- package/dist/internal/photos/photosTimeline.js.map +0 -1
- package/src/internal/photos/cache.ts +0 -11
- package/src/internal/photos/photosTimeline.ts +0 -17
|
@@ -1,8 +1,39 @@
|
|
|
1
1
|
import { DriveAPIService } from '../apiService';
|
|
2
|
+
import { EncryptedRootShare, EncryptedShareCrypto } from '../shares/interface';
|
|
3
|
+
/**
|
|
4
|
+
* Provides API communication for fetching and manipulating photos and albums
|
|
5
|
+
* metadata.
|
|
6
|
+
*
|
|
7
|
+
* The service is responsible for transforming local objects to API payloads
|
|
8
|
+
* and vice versa. It should not contain any business logic.
|
|
9
|
+
*/
|
|
2
10
|
export declare class PhotosAPIService {
|
|
3
11
|
private apiService;
|
|
4
12
|
constructor(apiService: DriveAPIService);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
13
|
+
getPhotoShare(): Promise<EncryptedRootShare>;
|
|
14
|
+
createPhotoVolume(share: {
|
|
15
|
+
addressId: string;
|
|
16
|
+
addressKeyId: string;
|
|
17
|
+
} & EncryptedShareCrypto, node: {
|
|
18
|
+
encryptedName: string;
|
|
19
|
+
armoredKey: string;
|
|
20
|
+
armoredPassphrase: string;
|
|
21
|
+
armoredPassphraseSignature: string;
|
|
22
|
+
armoredHashKey: string;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
volumeId: string;
|
|
25
|
+
shareId: string;
|
|
26
|
+
rootNodeId: string;
|
|
27
|
+
}>;
|
|
28
|
+
iterateTimeline(volumeId: string, signal?: AbortSignal): AsyncGenerator<{
|
|
29
|
+
nodeUid: string;
|
|
30
|
+
captureTime: Date;
|
|
31
|
+
tags: number[];
|
|
32
|
+
}>;
|
|
33
|
+
iterateAlbums(volumeId: string, signal?: AbortSignal): AsyncGenerator<{
|
|
34
|
+
albumUid: string;
|
|
35
|
+
coverNodeUid?: string;
|
|
36
|
+
photoCount: number;
|
|
37
|
+
lastActivityTime: Date;
|
|
38
|
+
}>;
|
|
8
39
|
}
|
|
@@ -1,15 +1,108 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PhotosAPIService = void 0;
|
|
4
|
+
const ttag_1 = require("ttag");
|
|
5
|
+
const apiService_1 = require("../apiService");
|
|
6
|
+
const interface_1 = require("../shares/interface");
|
|
7
|
+
const uids_1 = require("../uids");
|
|
8
|
+
/**
|
|
9
|
+
* Provides API communication for fetching and manipulating photos and albums
|
|
10
|
+
* metadata.
|
|
11
|
+
*
|
|
12
|
+
* The service is responsible for transforming local objects to API payloads
|
|
13
|
+
* and vice versa. It should not contain any business logic.
|
|
14
|
+
*/
|
|
4
15
|
class PhotosAPIService {
|
|
5
16
|
apiService;
|
|
6
17
|
constructor(apiService) {
|
|
7
18
|
this.apiService = apiService;
|
|
8
19
|
this.apiService = apiService;
|
|
9
20
|
}
|
|
10
|
-
async
|
|
11
|
-
|
|
12
|
-
|
|
21
|
+
async getPhotoShare() {
|
|
22
|
+
// TODO: Switch to drive/v2/shares/photos once available.
|
|
23
|
+
const volumesResponse = await this.apiService.get('drive/volumes');
|
|
24
|
+
const photoVolume = volumesResponse.Volumes.find((volume) => volume.Type === 2);
|
|
25
|
+
if (!photoVolume) {
|
|
26
|
+
throw new apiService_1.NotFoundAPIError((0, ttag_1.c)('Error').t `Photo volume not found`);
|
|
27
|
+
}
|
|
28
|
+
const response = await this.apiService.get(`drive/shares/${photoVolume.Share.ShareID}`);
|
|
29
|
+
if (!response.AddressID) {
|
|
30
|
+
throw new Error('Photo root share has not address ID set');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
volumeId: response.VolumeID,
|
|
34
|
+
shareId: response.ShareID,
|
|
35
|
+
rootNodeId: response.LinkID,
|
|
36
|
+
creatorEmail: response.Creator,
|
|
37
|
+
encryptedCrypto: {
|
|
38
|
+
armoredKey: response.Key,
|
|
39
|
+
armoredPassphrase: response.Passphrase,
|
|
40
|
+
armoredPassphraseSignature: response.PassphraseSignature,
|
|
41
|
+
},
|
|
42
|
+
addressId: response.AddressID,
|
|
43
|
+
type: interface_1.ShareType.Photo,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async createPhotoVolume(share, node) {
|
|
47
|
+
const response = await this.apiService.post('drive/photos/volumes', {
|
|
48
|
+
Share: {
|
|
49
|
+
AddressID: share.addressId,
|
|
50
|
+
AddressKeyID: share.addressKeyId,
|
|
51
|
+
Key: share.armoredKey,
|
|
52
|
+
Passphrase: share.armoredPassphrase,
|
|
53
|
+
PassphraseSignature: share.armoredPassphraseSignature,
|
|
54
|
+
},
|
|
55
|
+
Link: {
|
|
56
|
+
Name: node.encryptedName,
|
|
57
|
+
NodeKey: node.armoredKey,
|
|
58
|
+
NodePassphrase: node.armoredPassphrase,
|
|
59
|
+
NodePassphraseSignature: node.armoredPassphraseSignature,
|
|
60
|
+
NodeHashKey: node.armoredHashKey,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
volumeId: response.Volume.VolumeID,
|
|
65
|
+
shareId: response.Volume.Share.ShareID,
|
|
66
|
+
rootNodeId: response.Volume.Share.LinkID,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async *iterateTimeline(volumeId, signal) {
|
|
70
|
+
let anchor = '';
|
|
71
|
+
while (true) {
|
|
72
|
+
const response = await this.apiService.get(`drive/volumes/${volumeId}/photos?${anchor ? `PreviousPageLastLinkID=${anchor}` : ''}`, signal);
|
|
73
|
+
for (const photo of response.Photos) {
|
|
74
|
+
const nodeUid = (0, uids_1.makeNodeUid)(volumeId, photo.LinkID);
|
|
75
|
+
yield {
|
|
76
|
+
nodeUid,
|
|
77
|
+
captureTime: new Date(photo.CaptureTime * 1000),
|
|
78
|
+
tags: photo.Tags,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (!response.Photos.length) {
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
anchor = response.Photos[response.Photos.length - 1].LinkID;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async *iterateAlbums(volumeId, signal) {
|
|
88
|
+
let anchor = '';
|
|
89
|
+
while (true) {
|
|
90
|
+
const response = await this.apiService.get(`drive/photos/volumes/${volumeId}/albums?${anchor ? `AnchorID=${anchor}` : ''}`, signal);
|
|
91
|
+
for (const album of response.Albums) {
|
|
92
|
+
const albumUid = (0, uids_1.makeNodeUid)(volumeId, album.LinkID);
|
|
93
|
+
yield {
|
|
94
|
+
albumUid,
|
|
95
|
+
coverNodeUid: album.CoverLinkID ? (0, uids_1.makeNodeUid)(volumeId, album.CoverLinkID) : undefined,
|
|
96
|
+
photoCount: album.PhotoCount,
|
|
97
|
+
lastActivityTime: new Date(album.LastActivityTime * 1000),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (!response.More || !response.AnchorID) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
anchor = response.AnchorID;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
13
106
|
}
|
|
14
107
|
exports.PhotosAPIService = PhotosAPIService;
|
|
15
108
|
//# sourceMappingURL=apiService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiService.js","sourceRoot":"","sources":["../../../src/internal/photos/apiService.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"apiService.js","sourceRoot":"","sources":["../../../src/internal/photos/apiService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import { DriveAPIService } from '../apiService';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { DriveCrypto } from '../../crypto';
|
|
3
|
+
import { ProtonDriveAccount, ProtonDriveCryptoCache, ProtonDriveEntitiesCache, ProtonDriveTelemetry } from '../../interface';
|
|
4
4
|
import { Albums } from './albums';
|
|
5
|
-
import { NodesService } from './interface';
|
|
6
|
-
|
|
5
|
+
import { NodesService, SharesService } from './interface';
|
|
6
|
+
import { PhotoSharesManager } from './shares';
|
|
7
|
+
import { PhotosTimeline } from './timeline';
|
|
8
|
+
/**
|
|
9
|
+
* Provides facade for the whole photos module.
|
|
10
|
+
*
|
|
11
|
+
* The photos module is responsible for handling photos and albums metadata,
|
|
12
|
+
* including API communication, crypto, caching, and event handling.
|
|
13
|
+
*/
|
|
14
|
+
export declare function initPhotosModule(apiService: DriveAPIService, photoShares: PhotoSharesManager, nodesService: NodesService): {
|
|
7
15
|
timeline: PhotosTimeline;
|
|
8
16
|
albums: Albums;
|
|
9
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Provides facade for the photo share module.
|
|
20
|
+
*
|
|
21
|
+
* The photo share wraps the core share module, but uses photos volume instead
|
|
22
|
+
* of main volume. It provides the same interface so it can be used in the same
|
|
23
|
+
* way in various modules that use shares.
|
|
24
|
+
*/
|
|
25
|
+
export declare function initPhotoSharesModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveEntitiesCache: ProtonDriveEntitiesCache, driveCryptoCache: ProtonDriveCryptoCache, account: ProtonDriveAccount, crypto: DriveCrypto, sharesService: SharesService): PhotoSharesManager;
|
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.initPhotosModule = initPhotosModule;
|
|
4
|
-
|
|
5
|
-
const cache_1 = require("
|
|
6
|
-
const
|
|
4
|
+
exports.initPhotoSharesModule = initPhotoSharesModule;
|
|
5
|
+
const cache_1 = require("../shares/cache");
|
|
6
|
+
const cryptoCache_1 = require("../shares/cryptoCache");
|
|
7
|
+
const cryptoService_1 = require("../shares/cryptoService");
|
|
7
8
|
const albums_1 = require("./albums");
|
|
8
|
-
|
|
9
|
+
const apiService_1 = require("./apiService");
|
|
10
|
+
const shares_1 = require("./shares");
|
|
11
|
+
const timeline_1 = require("./timeline");
|
|
12
|
+
/**
|
|
13
|
+
* Provides facade for the whole photos module.
|
|
14
|
+
*
|
|
15
|
+
* The photos module is responsible for handling photos and albums metadata,
|
|
16
|
+
* including API communication, crypto, caching, and event handling.
|
|
17
|
+
*/
|
|
18
|
+
function initPhotosModule(apiService, photoShares, nodesService) {
|
|
9
19
|
const api = new apiService_1.PhotosAPIService(apiService);
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const albums = new albums_1.Albums(api, cache, nodesService);
|
|
20
|
+
const timeline = new timeline_1.PhotosTimeline(api, photoShares);
|
|
21
|
+
const albums = new albums_1.Albums(api, photoShares, nodesService);
|
|
13
22
|
return {
|
|
14
23
|
timeline,
|
|
15
24
|
albums,
|
|
16
25
|
};
|
|
17
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Provides facade for the photo share module.
|
|
29
|
+
*
|
|
30
|
+
* The photo share wraps the core share module, but uses photos volume instead
|
|
31
|
+
* of main volume. It provides the same interface so it can be used in the same
|
|
32
|
+
* way in various modules that use shares.
|
|
33
|
+
*/
|
|
34
|
+
function initPhotoSharesModule(telemetry, apiService, driveEntitiesCache, driveCryptoCache, account, crypto, sharesService) {
|
|
35
|
+
const api = new apiService_1.PhotosAPIService(apiService);
|
|
36
|
+
const cache = new cache_1.SharesCache(telemetry.getLogger('shares-cache'), driveEntitiesCache);
|
|
37
|
+
const cryptoCache = new cryptoCache_1.SharesCryptoCache(telemetry.getLogger('shares-cache'), driveCryptoCache);
|
|
38
|
+
const cryptoService = new cryptoService_1.SharesCryptoService(telemetry, crypto, account);
|
|
39
|
+
return new shares_1.PhotoSharesManager(telemetry.getLogger('photos-shares'), api, cache, cryptoCache, cryptoService, sharesService);
|
|
40
|
+
}
|
|
18
41
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/photos/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/photos/index.ts"],"names":[],"mappings":";;AAuBA,4CAaC;AASD,sDAsBC;AA3DD,2CAA8C;AAC9C,uDAA0D;AAC1D,2DAA8D;AAC9D,qCAAkC;AAClC,6CAAgD;AAEhD,qCAA8C;AAC9C,yCAA4C;AAE5C;;;;;GAKG;AACH,SAAgB,gBAAgB,CAC5B,UAA2B,EAC3B,WAA+B,EAC/B,YAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,6BAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,yBAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAE1D,OAAO;QACH,QAAQ;QACR,MAAM;KACT,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACjC,SAA+B,EAC/B,UAA2B,EAC3B,kBAA4C,EAC5C,gBAAwC,EACxC,OAA2B,EAC3B,MAAmB,EACnB,aAA4B;IAE5B,MAAM,GAAG,GAAG,IAAI,6BAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,mBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,IAAI,+BAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACjG,MAAM,aAAa,GAAG,IAAI,mCAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE1E,OAAO,IAAI,2BAAkB,CACzB,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EACpC,GAAG,EACH,KAAK,EACL,WAAW,EACX,aAAa,EACb,aAAa,CAChB,CAAC;AACN,CAAC"}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PrivateKey } from '../../crypto';
|
|
2
|
+
import { MissingNode, MetricVolumeType } from '../../interface';
|
|
2
3
|
import { DecryptedNode } from '../nodes';
|
|
4
|
+
import { EncryptedShare } from '../shares';
|
|
5
|
+
export interface SharesService {
|
|
6
|
+
getOwnVolumeIDs(): Promise<{
|
|
7
|
+
volumeId: string;
|
|
8
|
+
rootNodeId: string;
|
|
9
|
+
}>;
|
|
10
|
+
loadEncryptedShare(shareId: string): Promise<EncryptedShare>;
|
|
11
|
+
getSharePrivateKey(shareId: string): Promise<PrivateKey>;
|
|
12
|
+
getMyFilesShareMemberEmailKey(): Promise<{
|
|
13
|
+
email: string;
|
|
14
|
+
addressId: string;
|
|
15
|
+
addressKey: PrivateKey;
|
|
16
|
+
addressKeyId: string;
|
|
17
|
+
}>;
|
|
18
|
+
getContextShareMemberEmailKey(shareId: string): Promise<{
|
|
19
|
+
email: string;
|
|
20
|
+
addressId: string;
|
|
21
|
+
addressKey: PrivateKey;
|
|
22
|
+
addressKeyId: string;
|
|
23
|
+
}>;
|
|
24
|
+
isOwnVolume(volumeId: string): Promise<boolean>;
|
|
25
|
+
getVolumeMetricContext(volumeId: string): Promise<MetricVolumeType>;
|
|
26
|
+
}
|
|
3
27
|
export interface NodesService {
|
|
4
28
|
getNode(nodeUid: string): Promise<DecryptedNode>;
|
|
5
29
|
iterateNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PrivateKey } from '../../crypto';
|
|
2
|
+
import { Logger, MetricVolumeType } from '../../interface';
|
|
3
|
+
import { SharesCache } from '../shares/cache';
|
|
4
|
+
import { SharesCryptoCache } from '../shares/cryptoCache';
|
|
5
|
+
import { SharesCryptoService } from '../shares/cryptoService';
|
|
6
|
+
import { EncryptedShare, VolumeShareNodeIDs } from '../shares/interface';
|
|
7
|
+
import { PhotosAPIService } from './apiService';
|
|
8
|
+
import { SharesService } from './interface';
|
|
9
|
+
/**
|
|
10
|
+
* Provides high-level actions for managing photo share.
|
|
11
|
+
*
|
|
12
|
+
* The photo share manager wraps the core share service, but uses photos volume
|
|
13
|
+
* instead of main volume. It provides the same interface so it can be used in
|
|
14
|
+
* the same way in various modules that use shares.
|
|
15
|
+
*/
|
|
16
|
+
export declare class PhotoSharesManager {
|
|
17
|
+
private logger;
|
|
18
|
+
private apiService;
|
|
19
|
+
private cache;
|
|
20
|
+
private cryptoCache;
|
|
21
|
+
private cryptoService;
|
|
22
|
+
private sharesService;
|
|
23
|
+
private photoRootIds?;
|
|
24
|
+
constructor(logger: Logger, apiService: PhotosAPIService, cache: SharesCache, cryptoCache: SharesCryptoCache, cryptoService: SharesCryptoService, sharesService: SharesService);
|
|
25
|
+
getOwnVolumeIDs(): Promise<VolumeShareNodeIDs>;
|
|
26
|
+
private createVolume;
|
|
27
|
+
getSharePrivateKey(shareId: string): Promise<PrivateKey>;
|
|
28
|
+
getMyFilesShareMemberEmailKey(): Promise<{
|
|
29
|
+
email: string;
|
|
30
|
+
addressId: string;
|
|
31
|
+
addressKey: PrivateKey;
|
|
32
|
+
addressKeyId: string;
|
|
33
|
+
}>;
|
|
34
|
+
getContextShareMemberEmailKey(shareId: string): Promise<{
|
|
35
|
+
email: string;
|
|
36
|
+
addressId: string;
|
|
37
|
+
addressKey: PrivateKey;
|
|
38
|
+
addressKeyId: string;
|
|
39
|
+
}>;
|
|
40
|
+
isOwnVolume(volumeId: string): Promise<boolean>;
|
|
41
|
+
getVolumeMetricContext(volumeId: string): Promise<MetricVolumeType>;
|
|
42
|
+
loadEncryptedShare(shareId: string): Promise<EncryptedShare>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PhotoSharesManager = void 0;
|
|
4
|
+
const interface_1 = require("../../interface");
|
|
5
|
+
const apiService_1 = require("../apiService");
|
|
6
|
+
/**
|
|
7
|
+
* Provides high-level actions for managing photo share.
|
|
8
|
+
*
|
|
9
|
+
* The photo share manager wraps the core share service, but uses photos volume
|
|
10
|
+
* instead of main volume. It provides the same interface so it can be used in
|
|
11
|
+
* the same way in various modules that use shares.
|
|
12
|
+
*/
|
|
13
|
+
class PhotoSharesManager {
|
|
14
|
+
logger;
|
|
15
|
+
apiService;
|
|
16
|
+
cache;
|
|
17
|
+
cryptoCache;
|
|
18
|
+
cryptoService;
|
|
19
|
+
sharesService;
|
|
20
|
+
photoRootIds;
|
|
21
|
+
constructor(logger, apiService, cache, cryptoCache, cryptoService, sharesService) {
|
|
22
|
+
this.logger = logger;
|
|
23
|
+
this.apiService = apiService;
|
|
24
|
+
this.cache = cache;
|
|
25
|
+
this.cryptoCache = cryptoCache;
|
|
26
|
+
this.cryptoService = cryptoService;
|
|
27
|
+
this.sharesService = sharesService;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.apiService = apiService;
|
|
30
|
+
this.cache = cache;
|
|
31
|
+
this.cryptoCache = cryptoCache;
|
|
32
|
+
this.cryptoService = cryptoService;
|
|
33
|
+
this.sharesService = sharesService;
|
|
34
|
+
}
|
|
35
|
+
async getOwnVolumeIDs() {
|
|
36
|
+
if (this.photoRootIds) {
|
|
37
|
+
return this.photoRootIds;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const encryptedShare = await this.apiService.getPhotoShare();
|
|
41
|
+
// Once any place needs IDs for My files, it will most likely
|
|
42
|
+
// need also the keys for decrypting the tree. It is better to
|
|
43
|
+
// decrypt the share here right away.
|
|
44
|
+
const { share: myFilesShare, key } = await this.cryptoService.decryptRootShare(encryptedShare);
|
|
45
|
+
await this.cryptoCache.setShareKey(myFilesShare.shareId, key);
|
|
46
|
+
await this.cache.setVolume({
|
|
47
|
+
volumeId: myFilesShare.volumeId,
|
|
48
|
+
shareId: myFilesShare.shareId,
|
|
49
|
+
rootNodeId: myFilesShare.rootNodeId,
|
|
50
|
+
creatorEmail: encryptedShare.creatorEmail,
|
|
51
|
+
addressId: encryptedShare.addressId,
|
|
52
|
+
});
|
|
53
|
+
this.photoRootIds = {
|
|
54
|
+
volumeId: myFilesShare.volumeId,
|
|
55
|
+
shareId: myFilesShare.shareId,
|
|
56
|
+
rootNodeId: myFilesShare.rootNodeId,
|
|
57
|
+
};
|
|
58
|
+
return this.photoRootIds;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof apiService_1.NotFoundAPIError) {
|
|
62
|
+
this.logger.warn('Active photo volume not found, creating a new one');
|
|
63
|
+
return this.createVolume();
|
|
64
|
+
}
|
|
65
|
+
this.logger.error('Failed to get active photo volume', error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async createVolume() {
|
|
70
|
+
const address = await this.sharesService.getMyFilesShareMemberEmailKey();
|
|
71
|
+
const bootstrap = await this.cryptoService.generateVolumeBootstrap(address.addressKey);
|
|
72
|
+
const photoRootIds = await this.apiService.createPhotoVolume({
|
|
73
|
+
addressId: address.addressId,
|
|
74
|
+
addressKeyId: address.addressKeyId,
|
|
75
|
+
...bootstrap.shareKey.encrypted,
|
|
76
|
+
}, {
|
|
77
|
+
...bootstrap.rootNode.key.encrypted,
|
|
78
|
+
encryptedName: bootstrap.rootNode.encryptedName,
|
|
79
|
+
armoredHashKey: bootstrap.rootNode.armoredHashKey,
|
|
80
|
+
});
|
|
81
|
+
await this.cryptoCache.setShareKey(photoRootIds.shareId, bootstrap.shareKey.decrypted);
|
|
82
|
+
return photoRootIds;
|
|
83
|
+
}
|
|
84
|
+
async getSharePrivateKey(shareId) {
|
|
85
|
+
return this.sharesService.getSharePrivateKey(shareId);
|
|
86
|
+
}
|
|
87
|
+
async getMyFilesShareMemberEmailKey() {
|
|
88
|
+
return this.sharesService.getMyFilesShareMemberEmailKey();
|
|
89
|
+
}
|
|
90
|
+
async getContextShareMemberEmailKey(shareId) {
|
|
91
|
+
return this.sharesService.getContextShareMemberEmailKey(shareId);
|
|
92
|
+
}
|
|
93
|
+
async isOwnVolume(volumeId) {
|
|
94
|
+
const { volumeId: myVolumeId } = await this.getOwnVolumeIDs();
|
|
95
|
+
if (volumeId === myVolumeId) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return this.sharesService.isOwnVolume(volumeId);
|
|
99
|
+
}
|
|
100
|
+
async getVolumeMetricContext(volumeId) {
|
|
101
|
+
const { volumeId: myVolumeId } = await this.getOwnVolumeIDs();
|
|
102
|
+
if (volumeId === myVolumeId) {
|
|
103
|
+
return interface_1.MetricVolumeType.OwnVolume;
|
|
104
|
+
}
|
|
105
|
+
return this.sharesService.getVolumeMetricContext(volumeId);
|
|
106
|
+
}
|
|
107
|
+
async loadEncryptedShare(shareId) {
|
|
108
|
+
return this.sharesService.loadEncryptedShare(shareId);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.PhotoSharesManager = PhotoSharesManager;
|
|
112
|
+
//# sourceMappingURL=shares.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares.js","sourceRoot":"","sources":["../../../src/internal/photos/shares.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PhotosAPIService } from './apiService';
|
|
2
|
+
import { PhotoSharesManager } from './shares';
|
|
3
|
+
/**
|
|
4
|
+
* Provides access to the photo timeline.
|
|
5
|
+
*/
|
|
6
|
+
export declare class PhotosTimeline {
|
|
7
|
+
private apiService;
|
|
8
|
+
private photoShares;
|
|
9
|
+
constructor(apiService: PhotosAPIService, photoShares: PhotoSharesManager);
|
|
10
|
+
iterateTimeline(signal?: AbortSignal): AsyncGenerator<{
|
|
11
|
+
nodeUid: string;
|
|
12
|
+
captureTime: Date;
|
|
13
|
+
tags: number[];
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PhotosTimeline = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Provides access to the photo timeline.
|
|
6
|
+
*/
|
|
7
|
+
class PhotosTimeline {
|
|
8
|
+
apiService;
|
|
9
|
+
photoShares;
|
|
10
|
+
constructor(apiService, photoShares) {
|
|
11
|
+
this.apiService = apiService;
|
|
12
|
+
this.photoShares = photoShares;
|
|
13
|
+
this.apiService = apiService;
|
|
14
|
+
this.photoShares = photoShares;
|
|
15
|
+
}
|
|
16
|
+
async *iterateTimeline(signal) {
|
|
17
|
+
const { volumeId } = await this.photoShares.getOwnVolumeIDs();
|
|
18
|
+
yield* this.apiService.iterateTimeline(volumeId, signal);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.PhotosTimeline = PhotosTimeline;
|
|
22
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/internal/photos/timeline.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,cAAc;IAEX;IACA;IAFZ,YACY,UAA4B,EAC5B,WAA+B;QAD/B,eAAU,GAAV,UAAU,CAAkB;QAC5B,gBAAW,GAAX,WAAW,CAAoB;QAEvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,KAAK,CAAA,CAAE,eAAe,CAAC,MAAoB;QAKvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAC9D,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;CACJ;AAjBD,wCAiBC"}
|
|
@@ -29,7 +29,7 @@ export declare class SharesManager {
|
|
|
29
29
|
*
|
|
30
30
|
* If the default volume or My files section doesn't exist, it creates it.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
getOwnVolumeIDs(): Promise<VolumeShareNodeIDs>;
|
|
33
33
|
/**
|
|
34
34
|
* Creates new default volume for the user.
|
|
35
35
|
*
|
|
@@ -44,7 +44,7 @@ class SharesManager {
|
|
|
44
44
|
*
|
|
45
45
|
* If the default volume or My files section doesn't exist, it creates it.
|
|
46
46
|
*/
|
|
47
|
-
async
|
|
47
|
+
async getOwnVolumeIDs() {
|
|
48
48
|
if (this.myFilesIds) {
|
|
49
49
|
return this.myFilesIds;
|
|
50
50
|
}
|
|
@@ -125,7 +125,7 @@ class SharesManager {
|
|
|
125
125
|
return key.key;
|
|
126
126
|
}
|
|
127
127
|
async getMyFilesShareMemberEmailKey() {
|
|
128
|
-
const { volumeId } = await this.
|
|
128
|
+
const { volumeId } = await this.getOwnVolumeIDs();
|
|
129
129
|
try {
|
|
130
130
|
const { addressId } = await this.cache.getVolume(volumeId);
|
|
131
131
|
const address = await this.account.getOwnAddress(addressId);
|
|
@@ -169,10 +169,10 @@ class SharesManager {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
async isOwnVolume(volumeId) {
|
|
172
|
-
return (await this.
|
|
172
|
+
return (await this.getOwnVolumeIDs()).volumeId === volumeId;
|
|
173
173
|
}
|
|
174
174
|
async getVolumeMetricContext(volumeId) {
|
|
175
|
-
const { volumeId: myVolumeId } = await this.
|
|
175
|
+
const { volumeId: myVolumeId } = await this.getOwnVolumeIDs();
|
|
176
176
|
// SDK doesn't support public sharing yet, also public sharing
|
|
177
177
|
// doesn't use a volume but shareURL, thus we can simplify and
|
|
178
178
|
// ignore this case for now.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/internal/shares/manager.ts"],"names":[],"mappings":";;;AAAA,+CAA+E;AAE/E,8CAAiD;AAOjD;;;;;;;;GAQG;AACH,MAAa,aAAa;IAUV;IACA;IACA;IACA;IACA;IACA;IAdZ,0BAA0B;IAC1B,6EAA6E;IAC7E,yEAAyE;IACzE,kDAAkD;IAC1C,UAAU,CAAsB;IAEhC,UAAU,GAAoC,IAAI,GAAG,EAAE,CAAC;IAEhE,YACY,MAAc,EACd,UAA4B,EAC5B,KAAkB,EAClB,WAA8B,EAC9B,aAAkC,EAClC,OAA2B;QAL3B,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAkB;QAC5B,UAAK,GAAL,KAAK,CAAa;QAClB,gBAAW,GAAX,WAAW,CAAmB;QAC9B,kBAAa,GAAb,aAAa,CAAqB;QAClC,YAAO,GAAP,OAAO,CAAoB;QAEnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/internal/shares/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ describe('SharesManager', () => {
|
|
|
41
41
|
};
|
|
42
42
|
manager = new manager_1.SharesManager((0, logger_1.getMockLogger)(), apiService, cache, cryptoCache, cryptoService, account);
|
|
43
43
|
});
|
|
44
|
-
describe('
|
|
44
|
+
describe('getOwnVolumeIDs', () => {
|
|
45
45
|
const myFilesShare = {
|
|
46
46
|
shareId: 'myFilesShareId',
|
|
47
47
|
volumeId: 'myFilesVolumeId',
|
|
@@ -59,8 +59,8 @@ describe('SharesManager', () => {
|
|
|
59
59
|
apiService.getMyFiles = jest.fn().mockResolvedValue(encryptedShare);
|
|
60
60
|
cryptoService.decryptRootShare = jest.fn().mockResolvedValue({ share: myFilesShare, key });
|
|
61
61
|
// Calling twice to check if it loads only once.
|
|
62
|
-
await manager.
|
|
63
|
-
const result = await manager.
|
|
62
|
+
await manager.getOwnVolumeIDs();
|
|
63
|
+
const result = await manager.getOwnVolumeIDs();
|
|
64
64
|
expect(result).toStrictEqual(myFilesShare);
|
|
65
65
|
expect(apiService.getMyFiles).toHaveBeenCalledTimes(1);
|
|
66
66
|
expect(cryptoService.decryptRootShare).toHaveBeenCalledTimes(1);
|
|
@@ -88,14 +88,14 @@ describe('SharesManager', () => {
|
|
|
88
88
|
},
|
|
89
89
|
});
|
|
90
90
|
apiService.createVolume = jest.fn().mockResolvedValue(myFilesShare);
|
|
91
|
-
const result = await manager.
|
|
91
|
+
const result = await manager.getOwnVolumeIDs();
|
|
92
92
|
expect(result).toStrictEqual(myFilesShare);
|
|
93
93
|
expect(cryptoService.decryptRootShare).not.toHaveBeenCalled();
|
|
94
94
|
expect(cryptoCache.setShareKey).toHaveBeenCalledWith('myFilesShareId', 'decrypted share key');
|
|
95
95
|
});
|
|
96
96
|
it('should throw on unknown error', async () => {
|
|
97
97
|
apiService.getMyFiles = jest.fn().mockRejectedValue(new Error('Some error'));
|
|
98
|
-
await expect(manager.
|
|
98
|
+
await expect(manager.getOwnVolumeIDs()).rejects.toThrow('Some error');
|
|
99
99
|
expect(cryptoService.decryptRootShare).not.toHaveBeenCalled();
|
|
100
100
|
expect(apiService.createVolume).not.toHaveBeenCalled();
|
|
101
101
|
});
|
|
@@ -117,7 +117,7 @@ describe('SharesManager', () => {
|
|
|
117
117
|
});
|
|
118
118
|
describe('getMyFilesShareMemberEmailKey', () => {
|
|
119
119
|
it('should return cached volume email key', async () => {
|
|
120
|
-
jest.spyOn(manager, '
|
|
120
|
+
jest.spyOn(manager, 'getOwnVolumeIDs').mockResolvedValue({ volumeId: 'volumeId' });
|
|
121
121
|
cache.getVolume = jest.fn().mockResolvedValue({ addressId: 'addressId' });
|
|
122
122
|
account.getOwnAddress = jest
|
|
123
123
|
.fn()
|
|
@@ -130,7 +130,7 @@ describe('SharesManager', () => {
|
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
132
|
it('should load volume email key if not in cache', async () => {
|
|
133
|
-
jest.spyOn(manager, '
|
|
133
|
+
jest.spyOn(manager, 'getOwnVolumeIDs').mockResolvedValue({ volumeId: 'volumeId' });
|
|
134
134
|
const share = {
|
|
135
135
|
volumeId: 'volumeId',
|
|
136
136
|
shareId: 'shareId',
|