@protontech/drive-sdk 0.9.8 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/crypto/driveCrypto.d.ts +15 -15
  2. package/dist/crypto/driveCrypto.js.map +1 -1
  3. package/dist/crypto/hmac.d.ts +3 -3
  4. package/dist/crypto/hmac.js.map +1 -1
  5. package/dist/crypto/interface.d.ts +45 -25
  6. package/dist/crypto/interface.js.map +1 -1
  7. package/dist/crypto/openPGPCrypto.d.ts +37 -37
  8. package/dist/crypto/openPGPCrypto.js.map +1 -1
  9. package/dist/crypto/utils.d.ts +1 -1
  10. package/dist/interface/index.d.ts +3 -3
  11. package/dist/interface/index.js.map +1 -1
  12. package/dist/interface/nodes.d.ts +8 -0
  13. package/dist/interface/photos.d.ts +18 -1
  14. package/dist/interface/sharing.d.ts +2 -0
  15. package/dist/interface/telemetry.d.ts +1 -0
  16. package/dist/interface/telemetry.js.map +1 -1
  17. package/dist/interface/thumbnail.d.ts +2 -2
  18. package/dist/internal/apiService/apiService.js +25 -12
  19. package/dist/internal/apiService/apiService.js.map +1 -1
  20. package/dist/internal/apiService/apiService.test.js +33 -5
  21. package/dist/internal/apiService/apiService.test.js.map +1 -1
  22. package/dist/internal/apiService/driveTypes.d.ts +2942 -3187
  23. package/dist/internal/apiService/errors.test.js +17 -7
  24. package/dist/internal/apiService/errors.test.js.map +1 -1
  25. package/dist/internal/devices/manager.d.ts +1 -0
  26. package/dist/internal/devices/manager.js +11 -0
  27. package/dist/internal/devices/manager.js.map +1 -1
  28. package/dist/internal/download/apiService.d.ts +1 -1
  29. package/dist/internal/download/cryptoService.d.ts +4 -4
  30. package/dist/internal/download/cryptoService.js.map +1 -1
  31. package/dist/internal/download/fileDownloader.js.map +1 -1
  32. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  33. package/dist/internal/download/thumbnailDownloader.js.map +1 -1
  34. package/dist/internal/nodes/cryptoService.d.ts +4 -4
  35. package/dist/internal/nodes/cryptoService.js +5 -3
  36. package/dist/internal/nodes/cryptoService.js.map +1 -1
  37. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  38. package/dist/internal/nodes/interface.d.ts +1 -1
  39. package/dist/internal/nodes/nodesManagement.js +0 -1
  40. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  41. package/dist/internal/photos/addToAlbum.d.ts +46 -0
  42. package/dist/internal/photos/addToAlbum.js +257 -0
  43. package/dist/internal/photos/addToAlbum.js.map +1 -0
  44. package/dist/internal/photos/addToAlbum.test.d.ts +1 -0
  45. package/dist/internal/photos/addToAlbum.test.js +409 -0
  46. package/dist/internal/photos/addToAlbum.test.js.map +1 -0
  47. package/dist/internal/photos/albums.d.ts +7 -2
  48. package/dist/internal/photos/albums.js +24 -1
  49. package/dist/internal/photos/albums.js.map +1 -1
  50. package/dist/internal/photos/albums.test.js +26 -1
  51. package/dist/internal/photos/albums.test.js.map +1 -1
  52. package/dist/internal/photos/albumsCrypto.d.ts +20 -3
  53. package/dist/internal/photos/albumsCrypto.js +27 -0
  54. package/dist/internal/photos/albumsCrypto.js.map +1 -1
  55. package/dist/internal/photos/apiService.d.ts +20 -0
  56. package/dist/internal/photos/apiService.js +142 -0
  57. package/dist/internal/photos/apiService.js.map +1 -1
  58. package/dist/internal/photos/apiService.test.d.ts +1 -0
  59. package/dist/internal/photos/apiService.test.js +199 -0
  60. package/dist/internal/photos/apiService.test.js.map +1 -0
  61. package/dist/internal/photos/errors.d.ts +4 -0
  62. package/dist/internal/photos/errors.js +17 -0
  63. package/dist/internal/photos/errors.js.map +1 -0
  64. package/dist/internal/photos/index.d.ts +1 -1
  65. package/dist/internal/photos/index.js +1 -1
  66. package/dist/internal/photos/index.js.map +1 -1
  67. package/dist/internal/photos/interface.d.ts +36 -1
  68. package/dist/internal/photos/interface.js +14 -0
  69. package/dist/internal/photos/interface.js.map +1 -1
  70. package/dist/internal/photos/nodes.js +32 -2
  71. package/dist/internal/photos/nodes.js.map +1 -1
  72. package/dist/internal/photos/nodes.test.js +25 -5
  73. package/dist/internal/photos/nodes.test.js.map +1 -1
  74. package/dist/internal/photos/timeline.d.ts +2 -5
  75. package/dist/internal/photos/timeline.js.map +1 -1
  76. package/dist/internal/photos/upload.d.ts +2 -2
  77. package/dist/internal/photos/upload.js.map +1 -1
  78. package/dist/internal/shares/apiService.js +1 -0
  79. package/dist/internal/shares/apiService.js.map +1 -1
  80. package/dist/internal/shares/interface.d.ts +1 -0
  81. package/dist/internal/sharing/apiService.d.ts +8 -1
  82. package/dist/internal/sharing/apiService.js +23 -1
  83. package/dist/internal/sharing/apiService.js.map +1 -1
  84. package/dist/internal/sharing/cryptoService.js +8 -4
  85. package/dist/internal/sharing/cryptoService.js.map +1 -1
  86. package/dist/internal/sharing/sharingManagement.d.ts +1 -0
  87. package/dist/internal/sharing/sharingManagement.js +15 -2
  88. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  89. package/dist/internal/sharing/sharingManagement.test.js +30 -5
  90. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  91. package/dist/internal/sharingPublic/nodes.d.ts +2 -2
  92. package/dist/internal/sharingPublic/nodes.js.map +1 -1
  93. package/dist/internal/upload/apiService.d.ts +5 -5
  94. package/dist/internal/upload/apiService.js.map +1 -1
  95. package/dist/internal/upload/blockVerifier.d.ts +2 -2
  96. package/dist/internal/upload/blockVerifier.js.map +1 -1
  97. package/dist/internal/upload/chunkStreamReader.d.ts +2 -2
  98. package/dist/internal/upload/chunkStreamReader.js.map +1 -1
  99. package/dist/internal/upload/chunkStreamReader.test.js.map +1 -1
  100. package/dist/internal/upload/cryptoService.d.ts +7 -7
  101. package/dist/internal/upload/cryptoService.js.map +1 -1
  102. package/dist/internal/upload/interface.d.ts +6 -6
  103. package/dist/internal/upload/manager.d.ts +1 -1
  104. package/dist/internal/upload/manager.js.map +1 -1
  105. package/dist/internal/upload/streamUploader.d.ts +1 -1
  106. package/dist/internal/utils.d.ts +1 -1
  107. package/dist/protonDriveClient.d.ts +8 -0
  108. package/dist/protonDriveClient.js +11 -0
  109. package/dist/protonDriveClient.js.map +1 -1
  110. package/dist/protonDrivePhotosClient.d.ts +42 -7
  111. package/dist/protonDrivePhotosClient.js +50 -2
  112. package/dist/protonDrivePhotosClient.js.map +1 -1
  113. package/dist/protonDrivePublicLinkClient.d.ts +9 -0
  114. package/dist/protonDrivePublicLinkClient.js +12 -0
  115. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  116. package/dist/transformers.js +2 -0
  117. package/dist/transformers.js.map +1 -1
  118. package/package.json +4 -4
  119. package/src/crypto/driveCrypto.ts +15 -15
  120. package/src/crypto/hmac.ts +4 -4
  121. package/src/crypto/interface.ts +58 -27
  122. package/src/crypto/openPGPCrypto.ts +26 -26
  123. package/src/interface/index.ts +10 -2
  124. package/src/interface/nodes.ts +1 -0
  125. package/src/interface/photos.ts +19 -1
  126. package/src/interface/sharing.ts +2 -0
  127. package/src/interface/telemetry.ts +1 -0
  128. package/src/interface/thumbnail.ts +2 -2
  129. package/src/internal/apiService/apiService.test.ts +38 -6
  130. package/src/internal/apiService/apiService.ts +33 -12
  131. package/src/internal/apiService/driveTypes.ts +2942 -3187
  132. package/src/internal/devices/manager.ts +14 -0
  133. package/src/internal/download/apiService.ts +1 -1
  134. package/src/internal/download/cryptoService.ts +4 -4
  135. package/src/internal/download/fileDownloader.test.ts +4 -4
  136. package/src/internal/download/fileDownloader.ts +6 -6
  137. package/src/internal/download/thumbnailDownloader.ts +4 -4
  138. package/src/internal/nodes/cryptoService.test.ts +2 -2
  139. package/src/internal/nodes/cryptoService.ts +11 -8
  140. package/src/internal/nodes/interface.ts +1 -1
  141. package/src/internal/nodes/nodesManagement.ts +0 -1
  142. package/src/internal/photos/addToAlbum.test.ts +515 -0
  143. package/src/internal/photos/addToAlbum.ts +341 -0
  144. package/src/internal/photos/albums.test.ts +46 -22
  145. package/src/internal/photos/albums.ts +48 -2
  146. package/src/internal/photos/albumsCrypto.ts +54 -3
  147. package/src/internal/photos/apiService.test.ts +233 -0
  148. package/src/internal/photos/apiService.ts +234 -15
  149. package/src/internal/photos/errors.ts +11 -0
  150. package/src/internal/photos/index.ts +2 -2
  151. package/src/internal/photos/interface.ts +40 -1
  152. package/src/internal/photos/nodes.test.ts +27 -6
  153. package/src/internal/photos/nodes.ts +34 -2
  154. package/src/internal/photos/timeline.ts +2 -5
  155. package/src/internal/photos/upload.ts +2 -2
  156. package/src/internal/shares/apiService.ts +1 -0
  157. package/src/internal/shares/interface.ts +1 -0
  158. package/src/internal/sharing/apiService.ts +49 -5
  159. package/src/internal/sharing/cryptoService.ts +10 -4
  160. package/src/internal/sharing/sharingManagement.test.ts +33 -5
  161. package/src/internal/sharing/sharingManagement.ts +28 -6
  162. package/src/internal/sharingPublic/nodes.ts +1 -1
  163. package/src/internal/upload/apiService.ts +5 -5
  164. package/src/internal/upload/blockVerifier.ts +3 -3
  165. package/src/internal/upload/chunkStreamReader.test.ts +7 -7
  166. package/src/internal/upload/chunkStreamReader.ts +3 -3
  167. package/src/internal/upload/cryptoService.ts +9 -9
  168. package/src/internal/upload/interface.ts +6 -6
  169. package/src/internal/upload/manager.ts +2 -2
  170. package/src/internal/upload/streamUploader.ts +1 -1
  171. package/src/protonDriveClient.ts +15 -3
  172. package/src/protonDrivePhotosClient.ts +78 -22
  173. package/src/protonDrivePublicLinkClient.ts +13 -0
  174. package/src/transformers.ts +2 -0
@@ -23,6 +23,20 @@ export class DevicesManager {
23
23
  this.nodesManagementService = nodesManagementService;
24
24
  }
25
25
 
26
+ async getDevice(deviceUid: string): Promise<Device> {
27
+ const device = await this.getDeviceMetadata(deviceUid);
28
+
29
+ const [node] = await Array.fromAsync(this.nodesService.iterateNodes([device.rootFolderUid]));
30
+ if (!node || 'missingUid' in node) {
31
+ throw new ValidationError(c('Error').t`Device not found`);
32
+ }
33
+
34
+ return {
35
+ ...device,
36
+ name: node.name,
37
+ };
38
+ }
39
+
26
40
  async *iterateDevices(signal?: AbortSignal): AsyncGenerator<Device> {
27
41
  const devices = await this.apiService.getDevices(signal);
28
42
 
@@ -91,7 +91,7 @@ export class DownloadAPIService {
91
91
  token: string,
92
92
  onProgress?: (downloadedBytes: number) => void,
93
93
  signal?: AbortSignal,
94
- ): Promise<Uint8Array> {
94
+ ): Promise<Uint8Array<ArrayBuffer>> {
95
95
  const rawBlockStream = await this.apiService.getBlockStream(baseUrl, token, signal);
96
96
  const progressStream = new ObserverStream((value) => {
97
97
  onProgress?.(value.length);
@@ -34,7 +34,7 @@ export class DownloadCryptoService {
34
34
  };
35
35
  }
36
36
 
37
- async decryptBlock(encryptedBlock: Uint8Array, revisionKeys: RevisionKeys): Promise<Uint8Array> {
37
+ async decryptBlock(encryptedBlock: Uint8Array<ArrayBuffer>, revisionKeys: RevisionKeys): Promise<Uint8Array<ArrayBuffer>> {
38
38
  let decryptedBlock;
39
39
  try {
40
40
  // We do not verify signatures on blocks. We only verify
@@ -55,7 +55,7 @@ export class DownloadCryptoService {
55
55
  return decryptedBlock;
56
56
  }
57
57
 
58
- async decryptThumbnail(thumbnail: Uint8Array, contentKeyPacketSessionKey: SessionKey): Promise<Uint8Array> {
58
+ async decryptThumbnail(thumbnail: Uint8Array<ArrayBuffer>, contentKeyPacketSessionKey: SessionKey): Promise<Uint8Array<ArrayBuffer>> {
59
59
  let decryptedBlock;
60
60
  try {
61
61
  const result = await this.driveCrypto.decryptThumbnailBlock(
@@ -72,7 +72,7 @@ export class DownloadCryptoService {
72
72
  return decryptedBlock;
73
73
  }
74
74
 
75
- async verifyBlockIntegrity(encryptedBlock: Uint8Array, base64sha256Hash: string): Promise<void> {
75
+ async verifyBlockIntegrity(encryptedBlock: Uint8Array<ArrayBuffer>, base64sha256Hash: string): Promise<void> {
76
76
  const digest = await crypto.subtle.digest('SHA-256', encryptedBlock);
77
77
  const expectedHash = uint8ArrayToBase64String(new Uint8Array(digest));
78
78
 
@@ -87,7 +87,7 @@ export class DownloadCryptoService {
87
87
  async verifyManifest(
88
88
  revision: Revision,
89
89
  nodeKey: PrivateKey,
90
- allBlockHashes: Uint8Array[],
90
+ allBlockHashes: Uint8Array<ArrayBuffer>[],
91
91
  armoredManifestSignature?: string,
92
92
  ): Promise<void> {
93
93
  const hash = mergeUint8Arrays(allBlockHashes);
@@ -85,8 +85,8 @@ describe('FileDownloader', () => {
85
85
  let onFinish: () => void;
86
86
 
87
87
  let downloader: FileDownloader;
88
- let writer: WritableStreamDefaultWriter<Uint8Array>;
89
- let stream: WritableStream<Uint8Array>;
88
+ let writer: WritableStreamDefaultWriter<Uint8Array<ArrayBuffer>>;
89
+ let stream: WritableStream<Uint8Array<ArrayBuffer>>;
90
90
 
91
91
  const verifySuccess = async (
92
92
  fileProgress: number = 6, // 3 blocks of length 1, 2, 3
@@ -360,8 +360,8 @@ describe('FileDownloader', () => {
360
360
  let onFinish: () => void;
361
361
 
362
362
  let downloader: FileDownloader;
363
- let writer: WritableStreamDefaultWriter<Uint8Array>;
364
- let stream: WritableStream<Uint8Array>;
363
+ let writer: WritableStreamDefaultWriter<Uint8Array<ArrayBuffer>>;
364
+ let stream: WritableStream<Uint8Array<ArrayBuffer>>;
365
365
 
366
366
  beforeEach(() => {
367
367
  onProgress = jest.fn();
@@ -30,7 +30,7 @@ export class FileDownloader {
30
30
  number,
31
31
  {
32
32
  downloadPromise: Promise<void>;
33
- decryptedBufferedBlock?: Uint8Array;
33
+ decryptedBufferedBlock?: Uint8Array<ArrayBuffer>;
34
34
  }
35
35
  >();
36
36
 
@@ -120,7 +120,7 @@ export class FileDownloader {
120
120
  claimedBlockSizes: number[],
121
121
  position: number,
122
122
  cryptoKeys: RevisionKeys,
123
- ): Promise<Uint8Array | Error | undefined> {
123
+ ): Promise<Uint8Array<ArrayBuffer> | Error | undefined> {
124
124
  const { value, done } = getBlockIndex(claimedBlockSizes, position);
125
125
  if (done) {
126
126
  return;
@@ -174,7 +174,7 @@ export class FileDownloader {
174
174
 
175
175
  // Collection of all block hashes for manifest verification.
176
176
  // This includes both thumbnail and regular blocks.
177
- const allBlockHashes: Uint8Array[] = [];
177
+ const allBlockHashes: Uint8Array<ArrayBuffer>[] = [];
178
178
  let armoredManifestSignature: string | undefined;
179
179
 
180
180
  try {
@@ -271,12 +271,12 @@ export class FileDownloader {
271
271
  ignoreIntegrityErrors: boolean,
272
272
  cryptoKeys: RevisionKeys,
273
273
  onProgress?: (downloadedBytes: number) => void,
274
- ): Promise<Uint8Array> {
274
+ ): Promise<Uint8Array<ArrayBuffer>> {
275
275
  const logger = new LoggerWithPrefix(this.logger, `block ${blockMetadata.index}`);
276
276
  logger.info(`Download started`);
277
277
 
278
278
  let blockProgress = 0;
279
- let decryptedBlock: Uint8Array | null = null;
279
+ let decryptedBlock: Uint8Array<ArrayBuffer> | null = null;
280
280
  let retries = 0;
281
281
 
282
282
  while (!decryptedBlock) {
@@ -369,7 +369,7 @@ export class FileDownloader {
369
369
  }
370
370
  }
371
371
 
372
- private async flushCompletedBlocks(write: (chunk: Uint8Array) => void | Promise<void>) {
372
+ private async flushCompletedBlocks(write: (chunk: Uint8Array<ArrayBuffer>) => void | Promise<void>) {
373
373
  this.logger.debug(`Flushing completed blocks`);
374
374
  while (this.isNextBlockDownloaded) {
375
375
  const decryptedBlock = this.ongoingDownloads.get(this.nextBlockIndex)!.decryptedBufferedBlock!;
@@ -24,7 +24,7 @@ export class ThumbnailDownloader {
24
24
  private batchThumbnailToNodeUids = new Map<string, string>();
25
25
  private ongoingDownloads = new Map<string, Promise<void>>();
26
26
  private bufferedThumbnails: (
27
- | { nodeUid: string; ok: true; thumbnail: Uint8Array }
27
+ | { nodeUid: string; ok: true; thumbnail: Uint8Array<ArrayBuffer> }
28
28
  | { nodeUid: string; ok: false; error: string }
29
29
  )[] = [];
30
30
 
@@ -163,7 +163,7 @@ export class ThumbnailDownloader {
163
163
  private async *iterateThumbnailDownloads(
164
164
  signal?: AbortSignal,
165
165
  ): AsyncGenerator<
166
- | { nodeUid: string; ok: true; downloadPromise: Promise<Uint8Array> }
166
+ | { nodeUid: string; ok: true; downloadPromise: Promise<Uint8Array<ArrayBuffer>> }
167
167
  | { nodeUid: string; ok: false; error: string }
168
168
  > {
169
169
  const missingThumbnailUids = new Set(this.batchThumbnailToNodeUids.keys());
@@ -212,10 +212,10 @@ export class ThumbnailDownloader {
212
212
  bareUrl: string,
213
213
  token: string,
214
214
  signal?: AbortSignal,
215
- ): Promise<Uint8Array> {
215
+ ): Promise<Uint8Array<ArrayBuffer>> {
216
216
  const logger = new LoggerWithPrefix(this.logger, `thumbnail ${token}`);
217
217
 
218
- let decryptedBlock: Uint8Array | null = null;
218
+ let decryptedBlock: Uint8Array<ArrayBuffer> | null = null;
219
219
  let attempt = 0;
220
220
 
221
221
  while (!decryptedBlock) {
@@ -1,4 +1,4 @@
1
- import { DriveCrypto, PrivateKey, SessionKey, VERIFICATION_STATUS } from '../../crypto';
1
+ import { DriveCrypto, PrivateKey, PublicKey, SessionKey, VERIFICATION_STATUS } from '../../crypto';
2
2
  import { MemberRole, ProtonDriveAccount, ProtonDriveTelemetry, RevisionState } from '../../interface';
3
3
  import { getMockTelemetry } from '../../tests/telemetry';
4
4
  import {
@@ -20,7 +20,7 @@ describe('nodesCryptoService', () => {
20
20
 
21
21
  let cryptoService: NodesCryptoService;
22
22
 
23
- const publicAddressKey = { _idx: 21312 };
23
+ const publicAddressKey = { _idx: 21312 } as PublicKey;
24
24
  const ownPrivateAddressKey = { id: 'id', key: 'key' as unknown as PrivateKey };
25
25
 
26
26
  beforeEach(() => {
@@ -145,7 +145,10 @@ export class NodesCryptoService {
145
145
  }),
146
146
  nameAuthor,
147
147
  membership,
148
- activeRevision: 'file' in node.encryptedCrypto ? resultError(new Error(errorMessage)) : undefined,
148
+ activeRevision:
149
+ 'file' in node.encryptedCrypto
150
+ ? resultError(new Error(errorMessage, { cause: error }))
151
+ : undefined,
149
152
  folder: undefined,
150
153
  errors: [error],
151
154
  },
@@ -210,7 +213,7 @@ export class NodesCryptoService {
210
213
  void this.reporter.reportDecryptionError(node, 'nodeExtendedAttributes', error);
211
214
  const message = getErrorMessage(error);
212
215
  const errorMessage = c('Error').t`Failed to decrypt active revision: ${message}`;
213
- activeRevision = resultError(new Error(errorMessage));
216
+ activeRevision = resultError(new Error(errorMessage, { cause: error }));
214
217
  }
215
218
 
216
219
  try {
@@ -361,7 +364,7 @@ export class NodesCryptoService {
361
364
  void this.reporter.reportDecryptionError(node, 'nodeName', error);
362
365
  const errorMessage = getErrorMessage(error);
363
366
  return {
364
- name: resultError(new Error(errorMessage)),
367
+ name: resultError(new Error(errorMessage, { cause: error })),
365
368
  author: resultError({
366
369
  claimedAuthor: getClaimedAuthor(nameSignatureEmail, verificationKeys.length === 0),
367
370
  error: errorMessage,
@@ -433,7 +436,7 @@ export class NodesCryptoService {
433
436
  nodeKey: PrivateKey,
434
437
  addressKeys: PublicKey[],
435
438
  ): Promise<{
436
- hashKey: Uint8Array;
439
+ hashKey: Uint8Array<ArrayBuffer>;
437
440
  author: Author;
438
441
  }> {
439
442
  if (!('folder' in node.encryptedCrypto)) {
@@ -583,7 +586,7 @@ export class NodesCryptoService {
583
586
  }
584
587
 
585
588
  async createFolder(
586
- parentKeys: { key: PrivateKey; hashKey: Uint8Array },
589
+ parentKeys: { key: PrivateKey; hashKey: Uint8Array<ArrayBuffer> },
587
590
  signingKeys: NodeSigningKeys,
588
591
  name: string,
589
592
  extendedAttributes?: string,
@@ -648,7 +651,7 @@ export class NodesCryptoService {
648
651
  }
649
652
 
650
653
  async encryptNewName(
651
- parentKeys: { key: PrivateKey; hashKey?: Uint8Array },
654
+ parentKeys: { key: PrivateKey; hashKey?: Uint8Array<ArrayBuffer> },
652
655
  nodeNameSessionKey: SessionKey,
653
656
  signingKeys: NodeSigningKeys,
654
657
  newName: string,
@@ -684,7 +687,7 @@ export class NodesCryptoService {
684
687
  async encryptNodeWithNewParent(
685
688
  nodeName: DecryptedNode['name'],
686
689
  keys: { passphrase: string; passphraseSessionKey: SessionKey; nameSessionKey: SessionKey },
687
- parentKeys: { key: PrivateKey; hashKey: Uint8Array },
690
+ parentKeys: { key: PrivateKey; hashKey: Uint8Array<ArrayBuffer> },
688
691
  signingKeys: NodeSigningKeys,
689
692
  ): Promise<{
690
693
  encryptedName: string;
@@ -732,7 +735,7 @@ export class NodesCryptoService {
732
735
  };
733
736
  }
734
737
 
735
- async generateNameHashes(parentHashKey: Uint8Array, names: string[]): Promise<{ name: string; hash: string }[]> {
738
+ async generateNameHashes(parentHashKey: Uint8Array<ArrayBuffer>, names: string[]): Promise<{ name: string; hash: string }[]> {
736
739
  return Promise.all(
737
740
  names.map(async (name) => ({
738
741
  name,
@@ -157,7 +157,7 @@ export interface DecryptedNodeKeys {
157
157
  key: PrivateKey;
158
158
  passphraseSessionKey: SessionKey;
159
159
  contentKeyPacketSessionKey?: SessionKey;
160
- hashKey?: Uint8Array;
160
+ hashKey?: Uint8Array<ArrayBuffer>;
161
161
  }
162
162
 
163
163
  interface BaseRevision {
@@ -180,7 +180,6 @@ export abstract class NodesManagementBase<
180
180
  encryptedName: encryptedCrypto.encryptedName,
181
181
  nameSignatureEmail: encryptedCrypto.nameSignatureEmail,
182
182
  hash: encryptedCrypto.hash,
183
- // TODO: When moving photos, we need to pass content hash.
184
183
  },
185
184
  );
186
185
  const newNode: TDecryptedNode = {