@protontech/drive-sdk 0.9.7 → 0.9.8

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 (52) hide show
  1. package/dist/interface/upload.d.ts +10 -0
  2. package/dist/internal/nodes/mediaTypes.d.ts +2 -0
  3. package/dist/internal/nodes/mediaTypes.js +3 -0
  4. package/dist/internal/nodes/mediaTypes.js.map +1 -1
  5. package/dist/internal/nodes/nodesManagement.js +2 -1
  6. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  7. package/dist/internal/photos/albums.d.ts +12 -1
  8. package/dist/internal/photos/albums.js +80 -1
  9. package/dist/internal/photos/albums.js.map +1 -1
  10. package/dist/internal/photos/albums.test.d.ts +1 -0
  11. package/dist/internal/photos/albums.test.js +193 -0
  12. package/dist/internal/photos/albums.test.js.map +1 -0
  13. package/dist/internal/photos/albumsCrypto.d.ts +35 -0
  14. package/dist/internal/photos/albumsCrypto.js +66 -0
  15. package/dist/internal/photos/albumsCrypto.js.map +1 -0
  16. package/dist/internal/photos/albumsCrypto.test.d.ts +1 -0
  17. package/dist/internal/photos/albumsCrypto.test.js +134 -0
  18. package/dist/internal/photos/albumsCrypto.test.js.map +1 -0
  19. package/dist/internal/photos/apiService.d.ts +18 -0
  20. package/dist/internal/photos/apiService.js +48 -0
  21. package/dist/internal/photos/apiService.js.map +1 -1
  22. package/dist/internal/photos/index.d.ts +3 -3
  23. package/dist/internal/photos/index.js +5 -3
  24. package/dist/internal/photos/index.js.map +1 -1
  25. package/dist/internal/photos/upload.js +3 -2
  26. package/dist/internal/photos/upload.js.map +1 -1
  27. package/dist/internal/upload/streamUploader.d.ts +3 -1
  28. package/dist/internal/upload/streamUploader.js +10 -3
  29. package/dist/internal/upload/streamUploader.js.map +1 -1
  30. package/dist/internal/upload/streamUploader.test.js +10 -0
  31. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  32. package/dist/protonDrivePhotosClient.d.ts +38 -0
  33. package/dist/protonDrivePhotosClient.js +46 -0
  34. package/dist/protonDrivePhotosClient.js.map +1 -1
  35. package/dist/protonDrivePublicLinkClient.d.ts +6 -0
  36. package/dist/protonDrivePublicLinkClient.js +8 -0
  37. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/interface/upload.ts +10 -0
  40. package/src/internal/nodes/mediaTypes.ts +3 -0
  41. package/src/internal/nodes/nodesManagement.ts +2 -1
  42. package/src/internal/photos/albums.test.ts +241 -0
  43. package/src/internal/photos/albums.ts +119 -0
  44. package/src/internal/photos/albumsCrypto.test.ts +181 -0
  45. package/src/internal/photos/albumsCrypto.ts +100 -0
  46. package/src/internal/photos/apiService.ts +94 -2
  47. package/src/internal/photos/index.ts +6 -4
  48. package/src/internal/photos/upload.ts +3 -2
  49. package/src/internal/upload/streamUploader.test.ts +38 -0
  50. package/src/internal/upload/streamUploader.ts +10 -3
  51. package/src/protonDrivePhotosClient.ts +64 -1
  52. package/src/protonDrivePublicLinkClient.ts +14 -0
@@ -234,6 +234,44 @@ export declare class ProtonDrivePhotosClient {
234
234
  * @returns An array of node UIDs of duplicate photos. Empty array if no duplicates found.
235
235
  */
236
236
  findPhotoDuplicates(name: string, generateSha1: () => Promise<string>, signal?: AbortSignal): Promise<string[]>;
237
+ /**
238
+ * Creates a new album with the given name.
239
+ *
240
+ * @param name - The name for the new album.
241
+ * @returns The created album node.
242
+ */
243
+ createAlbum(name: string): Promise<MaybePhotoNode>;
244
+ /**
245
+ * Updates an existing album.
246
+ *
247
+ * Updates can include a new name and/or a cover photo.
248
+ *
249
+ * @param nodeUid - The UID of the album to edit.
250
+ * @param updates - The updates to apply.
251
+ * @returns The updated album node.
252
+ */
253
+ updateAlbum(nodeUid: NodeOrUid, updates: {
254
+ name?: string;
255
+ coverPhotoNodeUid?: NodeOrUid;
256
+ }): Promise<MaybePhotoNode>;
257
+ /**
258
+ * Deletes an album.
259
+ *
260
+ * Photos in the timeline will not be deleted. If the album has photos
261
+ * that are not in the timeline (uploaded by another user), the method
262
+ * will throw an error. The photos must be moved to the timeline, or
263
+ * the album must be deleted with `force` option that deletes the photos
264
+ * not in the timeline as well.
265
+ *
266
+ * This operation is irreversible. Both the album and the photos will be
267
+ * permanently deleted, skipping the trash.
268
+ *
269
+ * @param nodeUid - The UID of the album to delete.
270
+ * @param force - Whether to force the deletion.
271
+ */
272
+ deleteAlbum(nodeUid: NodeOrUid, options?: {
273
+ force?: boolean;
274
+ }): Promise<void>;
237
275
  /**
238
276
  * Iterates the albums.
239
277
  *
@@ -352,6 +352,52 @@ class ProtonDrivePhotosClient {
352
352
  this.logger.info(`Checking if photo have duplicates`);
353
353
  return this.photos.timeline.findPhotoDuplicates(name, generateSha1, signal);
354
354
  }
355
+ /**
356
+ * Creates a new album with the given name.
357
+ *
358
+ * @param name - The name for the new album.
359
+ * @returns The created album node.
360
+ */
361
+ async createAlbum(name) {
362
+ this.logger.info('Creating album');
363
+ return (0, transformers_1.convertInternalPhotoNodePromise)(this.photos.albums.createAlbum(name));
364
+ }
365
+ /**
366
+ * Updates an existing album.
367
+ *
368
+ * Updates can include a new name and/or a cover photo.
369
+ *
370
+ * @param nodeUid - The UID of the album to edit.
371
+ * @param updates - The updates to apply.
372
+ * @returns The updated album node.
373
+ */
374
+ async updateAlbum(nodeUid, updates) {
375
+ this.logger.info(`Updating album ${(0, transformers_1.getUid)(nodeUid)}`);
376
+ const coverPhotoNodeUid = updates.coverPhotoNodeUid ? (0, transformers_1.getUid)(updates.coverPhotoNodeUid) : undefined;
377
+ return (0, transformers_1.convertInternalPhotoNodePromise)(this.photos.albums.updateAlbum((0, transformers_1.getUid)(nodeUid), {
378
+ name: updates.name,
379
+ coverPhotoNodeUid,
380
+ }));
381
+ }
382
+ /**
383
+ * Deletes an album.
384
+ *
385
+ * Photos in the timeline will not be deleted. If the album has photos
386
+ * that are not in the timeline (uploaded by another user), the method
387
+ * will throw an error. The photos must be moved to the timeline, or
388
+ * the album must be deleted with `force` option that deletes the photos
389
+ * not in the timeline as well.
390
+ *
391
+ * This operation is irreversible. Both the album and the photos will be
392
+ * permanently deleted, skipping the trash.
393
+ *
394
+ * @param nodeUid - The UID of the album to delete.
395
+ * @param force - Whether to force the deletion.
396
+ */
397
+ async deleteAlbum(nodeUid, options = {}) {
398
+ this.logger.info(`Deleting album ${(0, transformers_1.getUid)(nodeUid)}`);
399
+ await this.photos.albums.deleteAlbum((0, transformers_1.getUid)(nodeUid), options);
400
+ }
355
401
  /**
356
402
  * Iterates the albums.
357
403
  *
@@ -1 +1 @@
1
- {"version":3,"file":"protonDrivePhotosClient.js","sourceRoot":"","sources":["../src/protonDrivePhotosClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protonDrivePhotosClient.js","sourceRoot":"","sources":["../src/protonDrivePhotosClient.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,12 @@ export declare class ProtonDrivePublicLinkClient {
35
35
  * This is used by Docs app to encrypt and decrypt document updates.
36
36
  */
37
37
  getDocsKey: (nodeUid: NodeOrUid) => Promise<SessionKey>;
38
+ /**
39
+ * Experimental feature to get the passphrase for a node.
40
+ *
41
+ * This is used by public link page to report abuse.
42
+ */
43
+ getNodePassphrase: (nodeUid: NodeOrUid) => Promise<string>;
38
44
  /**
39
45
  * Experimental feature to check if hashes match the malware database.
40
46
  */
@@ -61,6 +61,14 @@ class ProtonDrivePublicLinkClient {
61
61
  }
62
62
  return keys.contentKeyPacketSessionKey;
63
63
  },
64
+ getNodePassphrase: async (nodeUid) => {
65
+ this.logger.debug(`Getting node passphrase for ${(0, transformers_1.getUid)(nodeUid)}`);
66
+ const keys = await this.sharingPublic.nodes.access.getNodeKeys((0, transformers_1.getUid)(nodeUid));
67
+ if (!keys.passphrase) {
68
+ throw new Error('Node does not have a passphrase');
69
+ }
70
+ return keys.passphrase;
71
+ },
64
72
  scanHashes: async (hashes) => {
65
73
  this.logger.debug(`Scanning ${hashes.length} hashes`);
66
74
  return this.sharingPublic.nodes.security.scanHashes(hashes);
@@ -1 +1 @@
1
- {"version":3,"file":"protonDrivePublicLinkClient.js","sourceRoot":"","sources":["../src/protonDrivePublicLinkClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protonDrivePublicLinkClient.js","sourceRoot":"","sources":["../src/protonDrivePublicLinkClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@protontech/drive-sdk",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Proton Drive SDK",
5
5
  "license": "GPL-3.0",
6
6
  "main": "dist/index.js",
@@ -10,6 +10,16 @@ export type UploadMetadata = {
10
10
  * fail.
11
11
  */
12
12
  expectedSize: number;
13
+ /**
14
+ * Expected SHA1 hash of the file content.
15
+ *
16
+ * If provided, the SDK will verify that the SHA1 hash of the uploaded
17
+ * content matches the expected SHA1 hash. If the hashes do not match,
18
+ * the upload will fail with an IntegrityError.
19
+ *
20
+ * The hash should be provided as a hexadecimal string (40 characters).
21
+ */
22
+ expectedSha1?: string;
13
23
  /**
14
24
  * Modification time of the file.
15
25
  *
@@ -1,3 +1,6 @@
1
+ export const FOLDER_MEDIA_TYPE = 'Folder';
2
+ export const ALBUM_MEDIA_TYPE = 'Album';
3
+
1
4
  const PROTON_DOC_MEDIA_TYPE = 'application/vnd.proton.doc';
2
5
  const PROTON_SHEET_MEDIA_TYPE = 'application/vnd.proton.sheet';
3
6
 
@@ -12,6 +12,7 @@ import { generateFolderExtendedAttributes } from './extendedAttributes';
12
12
  import { DecryptedNode, EncryptedNode } from './interface';
13
13
  import { splitExtension, joinNameAndExtension } from './nodeName';
14
14
  import { NodesAccessBase } from './nodesAccess';
15
+ import { FOLDER_MEDIA_TYPE } from './mediaTypes';
15
16
  import { validateNodeName } from './validations';
16
17
 
17
18
  const AVAILABLE_NAME_BATCH_SIZE = 10;
@@ -373,7 +374,7 @@ export abstract class NodesManagementBase<
373
374
  uid: nodeUid,
374
375
  parentUid: parentNodeUid,
375
376
  type: NodeType.Folder,
376
- mediaType: 'Folder',
377
+ mediaType: FOLDER_MEDIA_TYPE,
377
378
  creationTime: new Date(),
378
379
  modificationTime: new Date(),
379
380
 
@@ -0,0 +1,241 @@
1
+ import { NodeType, MemberRole } from '../../interface';
2
+ import { ValidationError } from '../../errors';
3
+ import { Albums } from './albums';
4
+ import { AlbumsCryptoService } from './albumsCrypto';
5
+ import { PhotosAPIService } from './apiService';
6
+ import { DecryptedPhotoNode } from './interface';
7
+ import { PhotosNodesAccess } from './nodes';
8
+ import { PhotoSharesManager } from './shares';
9
+
10
+ describe('Albums', () => {
11
+ let apiService: PhotosAPIService;
12
+ let cryptoService: AlbumsCryptoService;
13
+ let photoShares: PhotoSharesManager;
14
+ let nodesService: PhotosNodesAccess;
15
+ let albums: Albums;
16
+
17
+ let nodes: { [uid: string]: DecryptedPhotoNode };
18
+
19
+ beforeEach(() => {
20
+ nodes = {
21
+ rootNodeUid: {
22
+ uid: 'rootNodeUid',
23
+ parentUid: '',
24
+ hash: 'rootHash',
25
+ } as DecryptedPhotoNode,
26
+ albumNodeUid: {
27
+ uid: 'albumNodeUid',
28
+ parentUid: 'rootNodeUid',
29
+ name: { ok: true, value: 'old album name' },
30
+ hash: 'albumHash',
31
+ encryptedName: 'encryptedAlbumName',
32
+ } as DecryptedPhotoNode,
33
+ };
34
+
35
+ // @ts-expect-error No need to implement all methods for mocking
36
+ apiService = {
37
+ createAlbum: jest.fn().mockResolvedValue('volumeId~newAlbumNodeId'),
38
+ updateAlbum: jest.fn(),
39
+ deleteAlbum: jest.fn(),
40
+ };
41
+
42
+ // @ts-expect-error No need to implement all methods for mocking
43
+ cryptoService = {
44
+ createAlbum: jest.fn().mockResolvedValue({
45
+ encryptedCrypto: {
46
+ encryptedName: 'newEncryptedAlbumName',
47
+ hash: 'newAlbumHash',
48
+ armoredKey: 'armoredKey',
49
+ armoredNodePassphrase: 'armoredNodePassphrase',
50
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
51
+ signatureEmail: 'signature@example.com',
52
+ armoredHashKey: 'armoredHashKey',
53
+ },
54
+ keys: {
55
+ passphrase: 'passphrase',
56
+ key: 'nodeKey',
57
+ passphraseSessionKey: 'passphraseSessionKey',
58
+ hashKey: new Uint8Array([1, 2, 3]),
59
+ },
60
+ }),
61
+ renameAlbum: jest.fn().mockResolvedValue({
62
+ signatureEmail: 'newSignatureEmail',
63
+ armoredNodeName: 'newArmoredAlbumName',
64
+ hash: 'newHash',
65
+ }),
66
+ };
67
+
68
+ // @ts-expect-error No need to implement all methods for mocking
69
+ photoShares = {
70
+ getRootIDs: jest.fn().mockResolvedValue({ volumeId: 'volumeId', rootNodeId: 'rootNodeId' }),
71
+ };
72
+
73
+ // @ts-expect-error No need to implement all methods for mocking
74
+ nodesService = {
75
+ getVolumeRootFolder: jest.fn().mockResolvedValue(nodes.rootNodeUid),
76
+ getNode: jest.fn().mockImplementation((uid: string) => nodes[uid]),
77
+ getNodeKeys: jest.fn().mockImplementation((uid) => ({
78
+ key: `${uid}-key`,
79
+ hashKey: `${uid}-hashKey`,
80
+ passphrase: `${uid}-passphrase`,
81
+ passphraseSessionKey: `${uid}-passphraseSessionKey`,
82
+ })),
83
+ getParentKeys: jest.fn().mockImplementation(({ parentUid }) => ({
84
+ key: `${parentUid}-key`,
85
+ hashKey: `${parentUid}-hashKey`,
86
+ })),
87
+ getNodeSigningKeys: jest.fn().mockResolvedValue({
88
+ type: 'userAddress',
89
+ email: 'user@example.com',
90
+ addressId: 'addressId',
91
+ key: 'addressKey',
92
+ }),
93
+ notifyNodeChanged: jest.fn(),
94
+ notifyNodeDeleted: jest.fn(),
95
+ notifyChildCreated: jest.fn(),
96
+ };
97
+
98
+ albums = new Albums(apiService, cryptoService, photoShares, nodesService);
99
+ });
100
+
101
+ describe('createAlbum', () => {
102
+ it('creates album and returns decrypted node', async () => {
103
+ const newAlbum = await albums.createAlbum('My New Album');
104
+
105
+ expect(newAlbum).toEqual(
106
+ expect.objectContaining({
107
+ uid: 'volumeId~newAlbumNodeId',
108
+ parentUid: 'rootNodeUid',
109
+ type: NodeType.Album,
110
+ mediaType: 'Album',
111
+ name: { ok: true, value: 'My New Album' },
112
+ hash: 'newAlbumHash',
113
+ encryptedName: 'newEncryptedAlbumName',
114
+ keyAuthor: { ok: true, value: 'signature@example.com' },
115
+ nameAuthor: { ok: true, value: 'signature@example.com' },
116
+ }),
117
+ );
118
+
119
+ expect(nodesService.getNodeSigningKeys).toHaveBeenCalledWith({ parentNodeUid: 'rootNodeUid' });
120
+ expect(cryptoService.createAlbum).toHaveBeenCalledWith(
121
+ { key: 'rootNodeUid-key', hashKey: 'rootNodeUid-hashKey' },
122
+ { type: 'userAddress', email: 'user@example.com', addressId: 'addressId', key: 'addressKey' },
123
+ 'My New Album',
124
+ );
125
+ expect(apiService.createAlbum).toHaveBeenCalledWith('rootNodeUid', {
126
+ encryptedName: 'newEncryptedAlbumName',
127
+ hash: 'newAlbumHash',
128
+ armoredKey: 'armoredKey',
129
+ armoredNodePassphrase: 'armoredNodePassphrase',
130
+ armoredNodePassphraseSignature: 'armoredNodePassphraseSignature',
131
+ signatureEmail: 'signature@example.com',
132
+ armoredHashKey: 'armoredHashKey',
133
+ });
134
+ expect(nodesService.notifyChildCreated).toHaveBeenCalledWith('rootNodeUid');
135
+ });
136
+
137
+ it('throws validation error for invalid album name', async () => {
138
+ await expect(albums.createAlbum('invalid/name')).rejects.toThrow(ValidationError);
139
+ });
140
+
141
+ it('throws error when parent hash key is not available', async () => {
142
+ nodesService.getNodeKeys = jest.fn().mockResolvedValue({
143
+ key: 'rootNodeUid-key',
144
+ hashKey: undefined,
145
+ });
146
+
147
+ await expect(albums.createAlbum('My Album')).rejects.toThrow(
148
+ 'Cannot create album: parent folder hash key not available',
149
+ );
150
+ });
151
+ });
152
+
153
+ describe('updateAlbum', () => {
154
+ it('updates album name and notifies cache', async () => {
155
+ const updatedAlbum = await albums.updateAlbum('albumNodeUid', { name: 'new album name' });
156
+
157
+ expect(updatedAlbum).toEqual({
158
+ ...nodes.albumNodeUid,
159
+ name: { ok: true, value: 'new album name' },
160
+ encryptedName: 'newArmoredAlbumName',
161
+ nameAuthor: { ok: true, value: 'newSignatureEmail' },
162
+ hash: 'newHash',
163
+ });
164
+ expect(nodesService.getNodeSigningKeys).toHaveBeenCalledWith({
165
+ nodeUid: 'albumNodeUid',
166
+ parentNodeUid: 'rootNodeUid',
167
+ });
168
+ expect(cryptoService.renameAlbum).toHaveBeenCalledWith(
169
+ { key: 'rootNodeUid-key', hashKey: 'rootNodeUid-hashKey' },
170
+ 'encryptedAlbumName',
171
+ { type: 'userAddress', email: 'user@example.com', addressId: 'addressId', key: 'addressKey' },
172
+ 'new album name',
173
+ );
174
+ expect(apiService.updateAlbum).toHaveBeenCalledWith(
175
+ 'albumNodeUid',
176
+ undefined,
177
+ {
178
+ encryptedName: 'newArmoredAlbumName',
179
+ hash: 'newHash',
180
+ originalHash: 'albumHash',
181
+ nameSignatureEmail: 'newSignatureEmail',
182
+ },
183
+ );
184
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalledWith('albumNodeUid');
185
+ });
186
+
187
+ it('updates album cover photo only', async () => {
188
+ const updatedAlbum = await albums.updateAlbum('albumNodeUid', { coverPhotoNodeUid: 'photoNodeUid' });
189
+
190
+ expect(updatedAlbum).toEqual(nodes.albumNodeUid);
191
+ expect(cryptoService.renameAlbum).not.toHaveBeenCalled();
192
+ expect(apiService.updateAlbum).toHaveBeenCalledWith('albumNodeUid', 'photoNodeUid', undefined);
193
+ expect(nodesService.notifyNodeChanged).toHaveBeenCalledWith('albumNodeUid');
194
+ });
195
+
196
+ it('updates album name and cover photo together', async () => {
197
+ const updatedAlbum = await albums.updateAlbum('albumNodeUid', {
198
+ name: 'new album name',
199
+ coverPhotoNodeUid: 'photoNodeUid',
200
+ });
201
+
202
+ expect(updatedAlbum).toEqual({
203
+ ...nodes.albumNodeUid,
204
+ name: { ok: true, value: 'new album name' },
205
+ encryptedName: 'newArmoredAlbumName',
206
+ nameAuthor: { ok: true, value: 'newSignatureEmail' },
207
+ hash: 'newHash',
208
+ });
209
+ expect(apiService.updateAlbum).toHaveBeenCalledWith(
210
+ 'albumNodeUid',
211
+ 'photoNodeUid',
212
+ {
213
+ encryptedName: 'newArmoredAlbumName',
214
+ hash: 'newHash',
215
+ originalHash: 'albumHash',
216
+ nameSignatureEmail: 'newSignatureEmail',
217
+ },
218
+ );
219
+ });
220
+
221
+ it('throws validation error for invalid album name', async () => {
222
+ await expect(albums.updateAlbum('albumNodeUid', { name: 'invalid/name' })).rejects.toThrow(ValidationError);
223
+ });
224
+ });
225
+
226
+ describe('deleteAlbum', () => {
227
+ it('deletes album and notifies cache', async () => {
228
+ await albums.deleteAlbum('albumNodeUid');
229
+
230
+ expect(apiService.deleteAlbum).toHaveBeenCalledWith('albumNodeUid', {});
231
+ expect(nodesService.notifyNodeDeleted).toHaveBeenCalledWith('albumNodeUid');
232
+ });
233
+
234
+ it('deletes album with force option', async () => {
235
+ await albums.deleteAlbum('albumNodeUid', { force: true });
236
+
237
+ expect(apiService.deleteAlbum).toHaveBeenCalledWith('albumNodeUid', { force: true });
238
+ expect(nodesService.notifyNodeDeleted).toHaveBeenCalledWith('albumNodeUid');
239
+ });
240
+ });
241
+ });
@@ -1,6 +1,12 @@
1
+ import { MemberRole, NodeType, resultOk } from '../../interface';
1
2
  import { BatchLoading } from '../batchLoading';
2
3
  import { DecryptedNode } from '../nodes';
4
+ import { ALBUM_MEDIA_TYPE } from '../nodes/mediaTypes';
5
+ import { validateNodeName } from '../nodes/validations';
6
+ import { splitNodeUid } from '../uids';
7
+ import { AlbumsCryptoService } from './albumsCrypto';
3
8
  import { PhotosAPIService } from './apiService';
9
+ import { DecryptedPhotoNode } from './interface';
4
10
  import { PhotosNodesAccess } from './nodes';
5
11
  import { PhotoSharesManager } from './shares';
6
12
 
@@ -12,10 +18,12 @@ const BATCH_LOADING_SIZE = 10;
12
18
  export class Albums {
13
19
  constructor(
14
20
  private apiService: PhotosAPIService,
21
+ private cryptoService: AlbumsCryptoService,
15
22
  private photoShares: PhotoSharesManager,
16
23
  private nodesService: PhotosNodesAccess,
17
24
  ) {
18
25
  this.apiService = apiService;
26
+ this.cryptoService = cryptoService;
19
27
  this.photoShares = photoShares;
20
28
  this.nodesService = nodesService;
21
29
  }
@@ -33,6 +41,117 @@ export class Albums {
33
41
  yield* batchLoading.loadRest();
34
42
  }
35
43
 
44
+ async createAlbum(name: string): Promise<DecryptedPhotoNode> {
45
+ validateNodeName(name);
46
+
47
+ const rootNode = await this.nodesService.getVolumeRootFolder();
48
+ const parentKeys = await this.nodesService.getNodeKeys(rootNode.uid);
49
+ if (!parentKeys.hashKey) {
50
+ throw new Error('Cannot create album: parent folder hash key not available');
51
+ }
52
+
53
+ const signingKeys = await this.nodesService.getNodeSigningKeys({ parentNodeUid: rootNode.uid });
54
+ const { encryptedCrypto } = await this.cryptoService.createAlbum(
55
+ { key: parentKeys.key, hashKey: parentKeys.hashKey },
56
+ signingKeys,
57
+ name,
58
+ );
59
+
60
+ const nodeUid = await this.apiService.createAlbum(rootNode.uid, {
61
+ encryptedName: encryptedCrypto.encryptedName,
62
+ hash: encryptedCrypto.hash,
63
+ armoredKey: encryptedCrypto.armoredKey,
64
+ armoredNodePassphrase: encryptedCrypto.armoredNodePassphrase,
65
+ armoredNodePassphraseSignature: encryptedCrypto.armoredNodePassphraseSignature,
66
+ signatureEmail: encryptedCrypto.signatureEmail,
67
+ armoredHashKey: encryptedCrypto.armoredHashKey,
68
+ });
69
+
70
+ await this.nodesService.notifyChildCreated(rootNode.uid);
71
+
72
+ return {
73
+ // Internal metadata
74
+ hash: encryptedCrypto.hash,
75
+ encryptedName: encryptedCrypto.encryptedName,
76
+
77
+ // Basic node metadata
78
+ uid: nodeUid,
79
+ parentUid: rootNode.uid,
80
+ type: NodeType.Album,
81
+ mediaType: ALBUM_MEDIA_TYPE,
82
+ creationTime: new Date(),
83
+ modificationTime: new Date(),
84
+
85
+ // Share node metadata
86
+ isShared: false,
87
+ isSharedPublicly: false,
88
+ directRole: MemberRole.Inherited,
89
+
90
+ // Decrypted metadata
91
+ isStale: false,
92
+ keyAuthor: resultOk(encryptedCrypto.signatureEmail),
93
+ nameAuthor: resultOk(encryptedCrypto.signatureEmail),
94
+ name: resultOk(name),
95
+ treeEventScopeId: splitNodeUid(nodeUid).volumeId,
96
+ };
97
+ }
98
+
99
+ async updateAlbum(
100
+ nodeUid: string,
101
+ updates: {
102
+ name?: string;
103
+ coverPhotoNodeUid?: string;
104
+ },
105
+ ): Promise<DecryptedPhotoNode> {
106
+ if (updates.name) {
107
+ validateNodeName(updates.name);
108
+ }
109
+
110
+ const node = await this.nodesService.getNode(nodeUid);
111
+ const newNode = { ...node };
112
+
113
+ let nameUpdate:
114
+ | {
115
+ encryptedName: string;
116
+ hash: string;
117
+ originalHash: string;
118
+ nameSignatureEmail: string;
119
+ }
120
+ | undefined;
121
+
122
+ if (updates.name) {
123
+ const parentKeys = await this.nodesService.getParentKeys(node);
124
+ const signingKeys = await this.nodesService.getNodeSigningKeys({ nodeUid, parentNodeUid: node.parentUid });
125
+
126
+ const { signatureEmail, armoredNodeName, hash } = await this.cryptoService.renameAlbum(
127
+ { key: parentKeys.key, hashKey: parentKeys.hashKey },
128
+ node.encryptedName,
129
+ signingKeys,
130
+ updates.name,
131
+ );
132
+
133
+ nameUpdate = {
134
+ encryptedName: armoredNodeName,
135
+ hash,
136
+ originalHash: node.hash || '',
137
+ nameSignatureEmail: signatureEmail,
138
+ };
139
+ newNode.name = resultOk(updates.name);
140
+ newNode.encryptedName = nameUpdate.encryptedName;
141
+ newNode.nameAuthor = resultOk(nameUpdate.nameSignatureEmail);
142
+ newNode.hash = nameUpdate.hash;
143
+ }
144
+
145
+ await this.apiService.updateAlbum(nodeUid, updates.coverPhotoNodeUid, nameUpdate);
146
+ await this.nodesService.notifyNodeChanged(nodeUid);
147
+ return newNode;
148
+ }
149
+
150
+ async deleteAlbum(nodeUid: string, options: { force?: boolean } = {}): Promise<void> {
151
+ await this.apiService.deleteAlbum(nodeUid, options);
152
+ await this.nodesService.notifyNodeDeleted(nodeUid);
153
+ }
154
+
36
155
  private async *iterateNodesAndIgnoreMissingOnes(
37
156
  nodeUids: string[],
38
157
  signal?: AbortSignal,