@protontech/drive-sdk 0.0.13 → 0.1.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/cache/index.d.ts +1 -0
- package/dist/cache/index.js +3 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/memoryCache.d.ts +1 -1
- package/dist/cache/memoryCache.js +0 -1
- package/dist/cache/memoryCache.js.map +1 -1
- package/dist/cache/memoryCache.test.js +2 -4
- package/dist/cache/memoryCache.test.js.map +1 -1
- package/dist/cache/nullCache.d.ts +14 -0
- package/dist/cache/nullCache.js +36 -0
- package/dist/cache/nullCache.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/crypto/driveCrypto.d.ts +2 -5
- package/dist/crypto/driveCrypto.js +7 -12
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/crypto/driveCrypto.test.js +14 -14
- package/dist/crypto/openPGPCrypto.js +5 -3
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/eventsGenerator.d.ts +14 -0
- package/dist/diagnostic/eventsGenerator.js +49 -0
- package/dist/diagnostic/eventsGenerator.js.map +1 -0
- package/dist/diagnostic/httpClient.d.ts +16 -0
- package/dist/diagnostic/httpClient.js +81 -0
- package/dist/diagnostic/httpClient.js.map +1 -0
- package/dist/diagnostic/index.d.ts +10 -0
- package/dist/diagnostic/index.js +35 -0
- package/dist/diagnostic/index.js.map +1 -0
- package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
- package/dist/diagnostic/integrityVerificationStream.js +56 -0
- package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
- package/dist/diagnostic/interface.d.ts +102 -0
- package/dist/diagnostic/interface.js +3 -0
- package/dist/diagnostic/interface.js.map +1 -0
- package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
- package/dist/diagnostic/sdkDiagnostic.js +222 -0
- package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
- package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
- package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
- package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
- package/dist/diagnostic/telemetry.d.ts +25 -0
- package/dist/diagnostic/telemetry.js +70 -0
- package/dist/diagnostic/telemetry.js.map +1 -0
- package/dist/diagnostic/zipGenerators.d.ts +9 -0
- package/dist/diagnostic/zipGenerators.js +64 -0
- package/dist/diagnostic/zipGenerators.js.map +1 -0
- package/dist/diagnostic/zipGenerators.test.js +144 -0
- package/dist/diagnostic/zipGenerators.test.js.map +1 -0
- package/dist/errors.d.ts +2 -1
- package/dist/errors.js +3 -1
- package/dist/errors.js.map +1 -1
- package/dist/interface/config.d.ts +26 -0
- package/dist/interface/config.js +3 -0
- package/dist/interface/config.js.map +1 -0
- package/dist/interface/download.d.ts +2 -2
- package/dist/interface/events.d.ts +58 -20
- package/dist/interface/events.js +11 -1
- package/dist/interface/events.js.map +1 -1
- package/dist/interface/httpClient.d.ts +0 -14
- package/dist/interface/index.d.ts +11 -7
- package/dist/interface/index.js +2 -2
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/nodes.d.ts +9 -0
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/result.js.map +1 -1
- package/dist/interface/sharing.d.ts +2 -0
- package/dist/interface/sharing.js.map +1 -1
- package/dist/interface/telemetry.js +0 -8
- package/dist/interface/telemetry.js.map +1 -1
- package/dist/interface/thumbnail.js.map +1 -1
- package/dist/interface/upload.d.ts +7 -1
- package/dist/internal/apiService/apiService.d.ts +1 -1
- package/dist/internal/apiService/apiService.js +7 -11
- package/dist/internal/apiService/apiService.js.map +1 -1
- package/dist/internal/apiService/apiService.test.js +55 -48
- package/dist/internal/apiService/apiService.test.js.map +1 -1
- package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
- package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
- package/dist/internal/apiService/errors.js +14 -8
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/errors.test.js +17 -12
- package/dist/internal/apiService/errors.test.js.map +1 -1
- package/dist/internal/apiService/transformers.d.ts +1 -1
- package/dist/internal/apiService/transformers.js +1 -1
- package/dist/internal/asyncIteratorMap.test.js +2 -2
- package/dist/internal/asyncIteratorMap.test.js.map +1 -1
- package/dist/internal/asyncIteratorRace.d.ts +13 -0
- package/dist/internal/asyncIteratorRace.js +59 -0
- package/dist/internal/asyncIteratorRace.js.map +1 -0
- package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
- package/dist/internal/asyncIteratorRace.test.js +119 -0
- package/dist/internal/asyncIteratorRace.test.js.map +1 -0
- package/dist/internal/batch.d.ts +1 -0
- package/dist/internal/batch.js +12 -0
- package/dist/internal/batch.js.map +1 -0
- package/dist/internal/batch.test.d.ts +1 -0
- package/dist/internal/batch.test.js +41 -0
- package/dist/internal/batch.test.js.map +1 -0
- package/dist/internal/batchLoading.js.map +1 -1
- package/dist/internal/batchLoading.test.js +13 -13
- package/dist/internal/batchLoading.test.js.map +1 -1
- package/dist/internal/devices/apiService.d.ts +3 -3
- package/dist/internal/devices/apiService.js +2 -2
- package/dist/internal/devices/apiService.js.map +1 -1
- package/dist/internal/devices/cryptoService.js +1 -2
- package/dist/internal/devices/cryptoService.js.map +1 -1
- package/dist/internal/devices/index.d.ts +5 -5
- package/dist/internal/devices/index.js.map +1 -1
- package/dist/internal/devices/interface.d.ts +3 -3
- package/dist/internal/devices/manager.js +2 -2
- package/dist/internal/devices/manager.js.map +1 -1
- package/dist/internal/devices/manager.test.js +38 -7
- package/dist/internal/devices/manager.test.js.map +1 -1
- package/dist/internal/download/apiService.d.ts +4 -4
- package/dist/internal/download/apiService.js +32 -32
- package/dist/internal/download/apiService.js.map +1 -1
- package/dist/internal/download/cryptoService.d.ts +4 -4
- package/dist/internal/download/cryptoService.js +6 -5
- package/dist/internal/download/cryptoService.js.map +1 -1
- package/dist/internal/download/fileDownloader.d.ts +6 -6
- package/dist/internal/download/fileDownloader.js +3 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/download/fileDownloader.test.js +1 -1
- package/dist/internal/download/fileDownloader.test.js.map +1 -1
- package/dist/internal/download/index.d.ts +5 -5
- package/dist/internal/download/index.js +5 -5
- package/dist/internal/download/index.js.map +1 -1
- package/dist/internal/download/interface.d.ts +3 -4
- package/dist/internal/download/telemetry.d.ts +3 -3
- package/dist/internal/download/telemetry.js +4 -2
- package/dist/internal/download/telemetry.js.map +1 -1
- package/dist/internal/download/telemetry.test.js +8 -8
- package/dist/internal/download/telemetry.test.js.map +1 -1
- package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
- package/dist/internal/download/thumbnailDownloader.js +6 -6
- package/dist/internal/download/thumbnailDownloader.js.map +1 -1
- package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
- package/dist/internal/errors.d.ts +1 -1
- package/dist/internal/errors.js +1 -3
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/events/apiService.d.ts +5 -7
- package/dist/internal/events/apiService.js +19 -22
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.d.ts +9 -12
- package/dist/internal/events/coreEventManager.js +19 -36
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.d.ts +1 -0
- package/dist/internal/events/coreEventManager.test.js +87 -0
- package/dist/internal/events/coreEventManager.test.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +11 -36
- package/dist/internal/events/eventManager.js +59 -106
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +177 -83
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +16 -36
- package/dist/internal/events/index.js +56 -72
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +59 -14
- package/dist/internal/events/interface.js +12 -3
- package/dist/internal/events/interface.js.map +1 -1
- package/dist/internal/events/volumeEventManager.d.ts +9 -19
- package/dist/internal/events/volumeEventManager.js +58 -45
- package/dist/internal/events/volumeEventManager.js.map +1 -1
- package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
- package/dist/internal/events/volumeEventManager.test.js +203 -0
- package/dist/internal/events/volumeEventManager.test.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +4 -3
- package/dist/internal/nodes/apiService.js +36 -15
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +60 -41
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.d.ts +14 -5
- package/dist/internal/nodes/cache.js +31 -7
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cache.test.js +31 -9
- package/dist/internal/nodes/cache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.d.ts +2 -2
- package/dist/internal/nodes/cryptoCache.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.test.js +24 -4
- package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.d.ts +4 -4
- package/dist/internal/nodes/cryptoService.js +11 -17
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +320 -241
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/events.d.ts +8 -84
- package/dist/internal/nodes/events.js +43 -217
- package/dist/internal/nodes/events.js.map +1 -1
- package/dist/internal/nodes/events.test.js +35 -279
- package/dist/internal/nodes/events.test.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
- package/dist/internal/nodes/extendedAttributes.js +3 -1
- package/dist/internal/nodes/extendedAttributes.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.test.js +7 -10
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
- package/dist/internal/nodes/index.d.ts +12 -13
- package/dist/internal/nodes/index.js +5 -5
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/index.test.js +24 -32
- package/dist/internal/nodes/index.test.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +2 -2
- package/dist/internal/nodes/nodesAccess.d.ts +22 -7
- package/dist/internal/nodes/nodesAccess.js +65 -16
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +165 -101
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +7 -9
- package/dist/internal/nodes/nodesManagement.js +21 -33
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +42 -21
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
- package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
- package/dist/internal/nodes/nodesRevisions.js.map +1 -1
- package/dist/internal/photos/albums.d.ts +3 -3
- package/dist/internal/photos/albums.js.map +1 -1
- package/dist/internal/photos/apiService.d.ts +1 -1
- package/dist/internal/photos/apiService.js +3 -6
- package/dist/internal/photos/apiService.js.map +1 -1
- package/dist/internal/photos/cache.d.ts +1 -1
- package/dist/internal/photos/index.d.ts +5 -5
- package/dist/internal/photos/index.js.map +1 -1
- package/dist/internal/photos/interface.d.ts +2 -2
- package/dist/internal/photos/photosTimeline.d.ts +3 -3
- package/dist/internal/photos/photosTimeline.js +1 -2
- package/dist/internal/photos/photosTimeline.js.map +1 -1
- package/dist/internal/sdkEvents.d.ts +1 -1
- package/dist/internal/sdkEvents.js +2 -7
- package/dist/internal/sdkEvents.js.map +1 -1
- package/dist/internal/sdkEvents.test.js +8 -8
- package/dist/internal/shares/apiService.d.ts +2 -2
- package/dist/internal/shares/apiService.js +5 -3
- package/dist/internal/shares/apiService.js.map +1 -1
- package/dist/internal/shares/cache.d.ts +4 -2
- package/dist/internal/shares/cache.js +14 -6
- package/dist/internal/shares/cache.js.map +1 -1
- package/dist/internal/shares/cache.test.js.map +1 -1
- package/dist/internal/shares/cryptoCache.d.ts +2 -2
- package/dist/internal/shares/cryptoCache.test.js +8 -2
- package/dist/internal/shares/cryptoCache.test.js.map +1 -1
- package/dist/internal/shares/cryptoService.d.ts +3 -3
- package/dist/internal/shares/cryptoService.js.map +1 -1
- package/dist/internal/shares/cryptoService.test.js +42 -42
- package/dist/internal/shares/cryptoService.test.js.map +1 -1
- package/dist/internal/shares/index.d.ts +4 -4
- package/dist/internal/shares/index.js.map +1 -1
- package/dist/internal/shares/interface.d.ts +2 -2
- package/dist/internal/shares/manager.d.ts +8 -7
- package/dist/internal/shares/manager.js +3 -0
- package/dist/internal/shares/manager.js.map +1 -1
- package/dist/internal/shares/manager.test.js +71 -63
- package/dist/internal/shares/manager.test.js.map +1 -1
- package/dist/internal/sharing/apiService.d.ts +4 -4
- package/dist/internal/sharing/apiService.js +5 -3
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cache.d.ts +1 -1
- package/dist/internal/sharing/cache.test.js +33 -33
- package/dist/internal/sharing/cryptoService.d.ts +3 -3
- package/dist/internal/sharing/cryptoService.js +3 -4
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.test.js +39 -39
- package/dist/internal/sharing/cryptoService.test.js.map +1 -1
- package/dist/internal/sharing/events.d.ts +24 -56
- package/dist/internal/sharing/events.js +45 -138
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +85 -189
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.d.ts +8 -9
- package/dist/internal/sharing/index.js +5 -5
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +8 -4
- package/dist/internal/sharing/sharingAccess.d.ts +6 -6
- package/dist/internal/sharing/sharingAccess.js +8 -4
- package/dist/internal/sharing/sharingAccess.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.test.js +45 -39
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.d.ts +5 -6
- package/dist/internal/sharing/sharingManagement.js +12 -16
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +305 -286
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
- package/dist/internal/uids.js.map +1 -1
- package/dist/internal/upload/apiService.d.ts +5 -6
- package/dist/internal/upload/apiService.js +8 -5
- package/dist/internal/upload/apiService.js.map +1 -1
- package/dist/internal/upload/blockVerifier.d.ts +3 -3
- package/dist/internal/upload/blockVerifier.js +1 -1
- package/dist/internal/upload/blockVerifier.js.map +1 -1
- package/dist/internal/upload/chunkStreamReader.test.js +6 -6
- package/dist/internal/upload/cryptoService.d.ts +4 -4
- package/dist/internal/upload/cryptoService.js +4 -4
- package/dist/internal/upload/cryptoService.js.map +1 -1
- package/dist/internal/upload/digests.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +6 -6
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/fileUploader.test.js.map +1 -1
- package/dist/internal/upload/index.d.ts +6 -6
- package/dist/internal/upload/index.js +3 -3
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/interface.d.ts +5 -3
- package/dist/internal/upload/manager.d.ts +8 -8
- package/dist/internal/upload/manager.js +23 -52
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +185 -147
- package/dist/internal/upload/manager.test.js.map +1 -1
- package/dist/internal/upload/streamUploader.d.ts +6 -6
- package/dist/internal/upload/streamUploader.js +9 -8
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/streamUploader.test.js +17 -12
- package/dist/internal/upload/streamUploader.test.js.map +1 -1
- package/dist/internal/upload/telemetry.d.ts +3 -3
- package/dist/internal/upload/telemetry.js +5 -3
- package/dist/internal/upload/telemetry.js.map +1 -1
- package/dist/internal/upload/telemetry.test.js +8 -8
- package/dist/internal/upload/telemetry.test.js.map +1 -1
- package/dist/protonDriveClient.d.ts +27 -170
- package/dist/protonDriveClient.js +37 -198
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePhotosClient.js +3 -2
- package/dist/protonDrivePhotosClient.js.map +1 -1
- package/dist/telemetry.js +18 -15
- package/dist/telemetry.js.map +1 -1
- package/dist/tests/logger.js.map +1 -1
- package/dist/tests/telemetry.d.ts +1 -1
- package/dist/transformers.js +4 -2
- package/dist/transformers.js.map +1 -1
- package/package.json +3 -3
- package/src/cache/index.ts +1 -0
- package/src/cache/interface.ts +22 -22
- package/src/cache/memoryCache.test.ts +7 -7
- package/src/cache/memoryCache.ts +5 -5
- package/src/cache/nullCache.ts +38 -0
- package/src/config.ts +17 -2
- package/src/crypto/driveCrypto.test.ts +15 -15
- package/src/crypto/driveCrypto.ts +120 -156
- package/src/crypto/hmac.ts +1 -1
- package/src/crypto/interface.ts +63 -72
- package/src/crypto/openPGPCrypto.ts +76 -94
- package/src/crypto/utils.ts +1 -1
- package/src/diagnostic/eventsGenerator.ts +48 -0
- package/src/diagnostic/httpClient.ts +84 -0
- package/src/diagnostic/index.ts +40 -0
- package/src/diagnostic/integrityVerificationStream.ts +55 -0
- package/src/diagnostic/interface.ts +158 -0
- package/src/diagnostic/sdkDiagnostic.ts +249 -0
- package/src/diagnostic/sdkDiagnosticFull.ts +37 -0
- package/src/diagnostic/telemetry.ts +74 -0
- package/src/diagnostic/zipGenerators.test.ts +177 -0
- package/src/diagnostic/zipGenerators.ts +70 -0
- package/src/errors.ts +25 -22
- package/src/index.ts +3 -3
- package/src/interface/account.ts +10 -10
- package/src/interface/author.ts +6 -6
- package/src/interface/config.ts +28 -0
- package/src/interface/devices.ts +6 -6
- package/src/interface/download.ts +12 -9
- package/src/interface/events.ts +76 -25
- package/src/interface/httpClient.ts +11 -27
- package/src/interface/index.ts +81 -20
- package/src/interface/nodes.ts +67 -60
- package/src/interface/result.ts +1 -3
- package/src/interface/sharing.ts +60 -56
- package/src/interface/telemetry.ts +74 -74
- package/src/interface/thumbnail.ts +5 -6
- package/src/interface/upload.ts +25 -11
- package/src/internal/apiService/apiService.test.ts +109 -76
- package/src/internal/apiService/apiService.ts +40 -26
- package/src/internal/apiService/coreTypes.ts +2474 -2463
- package/src/internal/apiService/driveTypes.ts +1868 -1822
- package/src/internal/apiService/errorCodes.ts +4 -4
- package/src/internal/apiService/errors.test.ts +25 -23
- package/src/internal/apiService/errors.ts +15 -9
- package/src/internal/apiService/index.ts +1 -1
- package/src/internal/apiService/transformers.ts +2 -2
- package/src/internal/asyncIteratorMap.test.ts +4 -4
- package/src/internal/asyncIteratorMap.ts +1 -1
- package/src/internal/asyncIteratorRace.test.ts +149 -0
- package/src/internal/asyncIteratorRace.ts +79 -0
- package/src/internal/batch.test.ts +50 -0
- package/src/internal/batch.ts +9 -0
- package/src/internal/batchLoading.test.ts +13 -14
- package/src/internal/batchLoading.ts +8 -8
- package/src/internal/devices/apiService.ts +58 -51
- package/src/internal/devices/cryptoService.ts +22 -17
- package/src/internal/devices/index.ts +17 -10
- package/src/internal/devices/interface.ts +21 -12
- package/src/internal/devices/manager.test.ts +40 -9
- package/src/internal/devices/manager.ts +3 -3
- package/src/internal/download/apiService.ts +72 -52
- package/src/internal/download/cryptoService.ts +34 -18
- package/src/internal/download/fileDownloader.test.ts +25 -9
- package/src/internal/download/fileDownloader.ts +38 -20
- package/src/internal/download/index.ts +19 -19
- package/src/internal/download/interface.ts +19 -20
- package/src/internal/download/queue.ts +3 -3
- package/src/internal/download/telemetry.test.ts +11 -11
- package/src/internal/download/telemetry.ts +24 -14
- package/src/internal/download/thumbnailDownloader.test.ts +11 -6
- package/src/internal/download/thumbnailDownloader.ts +43 -32
- package/src/internal/errors.ts +7 -5
- package/src/internal/events/apiService.ts +46 -36
- package/src/internal/events/coreEventManager.test.ts +101 -0
- package/src/internal/events/coreEventManager.ts +26 -48
- package/src/internal/events/eventManager.test.ts +211 -93
- package/src/internal/events/eventManager.ts +72 -117
- package/src/internal/events/index.ts +71 -91
- package/src/internal/events/interface.ts +92 -29
- package/src/internal/events/volumeEventManager.test.ts +239 -0
- package/src/internal/events/volumeEventManager.ts +68 -57
- package/src/internal/nodes/apiService.test.ts +197 -147
- package/src/internal/nodes/apiService.ts +288 -174
- package/src/internal/nodes/cache.test.ts +48 -20
- package/src/internal/nodes/cache.ts +79 -45
- package/src/internal/nodes/cryptoCache.test.ts +34 -14
- package/src/internal/nodes/cryptoCache.ts +10 -5
- package/src/internal/nodes/cryptoService.test.ts +492 -351
- package/src/internal/nodes/cryptoService.ts +171 -89
- package/src/internal/nodes/events.test.ts +48 -344
- package/src/internal/nodes/events.ts +48 -254
- package/src/internal/nodes/extendedAttributes.test.ts +28 -24
- package/src/internal/nodes/extendedAttributes.ts +20 -15
- package/src/internal/nodes/index.test.ts +51 -55
- package/src/internal/nodes/index.ts +32 -22
- package/src/internal/nodes/interface.ts +44 -31
- package/src/internal/nodes/nodesAccess.test.ts +237 -130
- package/src/internal/nodes/nodesAccess.ts +113 -50
- package/src/internal/nodes/nodesManagement.test.ts +64 -39
- package/src/internal/nodes/nodesManagement.ts +51 -62
- package/src/internal/nodes/nodesRevisions.ts +7 -7
- package/src/internal/nodes/validations.ts +2 -2
- package/src/internal/photos/albums.ts +5 -5
- package/src/internal/photos/apiService.ts +4 -7
- package/src/internal/photos/cache.ts +1 -1
- package/src/internal/photos/index.ts +8 -8
- package/src/internal/photos/interface.ts +2 -2
- package/src/internal/photos/photosTimeline.ts +4 -5
- package/src/internal/sdkEvents.test.ts +10 -10
- package/src/internal/sdkEvents.ts +5 -13
- package/src/internal/shares/apiService.ts +44 -33
- package/src/internal/shares/cache.test.ts +6 -4
- package/src/internal/shares/cache.ts +25 -14
- package/src/internal/shares/cryptoCache.test.ts +17 -11
- package/src/internal/shares/cryptoCache.ts +4 -4
- package/src/internal/shares/cryptoService.test.ts +72 -74
- package/src/internal/shares/cryptoService.ts +48 -23
- package/src/internal/shares/index.ts +23 -11
- package/src/internal/shares/interface.ts +8 -8
- package/src/internal/shares/manager.test.ts +88 -80
- package/src/internal/shares/manager.ts +27 -23
- package/src/internal/sharing/apiService.ts +283 -175
- package/src/internal/sharing/cache.test.ts +35 -35
- package/src/internal/sharing/cache.ts +3 -3
- package/src/internal/sharing/cryptoService.test.ts +58 -46
- package/src/internal/sharing/cryptoService.ts +121 -83
- package/src/internal/sharing/events.test.ts +97 -207
- package/src/internal/sharing/events.ts +46 -157
- package/src/internal/sharing/index.ts +24 -16
- package/src/internal/sharing/interface.ts +46 -42
- package/src/internal/sharing/sharingAccess.test.ts +71 -65
- package/src/internal/sharing/sharingAccess.ts +39 -21
- package/src/internal/sharing/sharingManagement.test.ts +405 -335
- package/src/internal/sharing/sharingManagement.ts +144 -75
- package/src/internal/uids.ts +1 -1
- package/src/internal/upload/apiService.ts +168 -119
- package/src/internal/upload/blockVerifier.ts +8 -6
- package/src/internal/upload/chunkStreamReader.test.ts +7 -7
- package/src/internal/upload/cryptoService.ts +42 -36
- package/src/internal/upload/digests.ts +2 -2
- package/src/internal/upload/fileUploader.test.ts +15 -3
- package/src/internal/upload/fileUploader.ts +39 -17
- package/src/internal/upload/index.ts +17 -18
- package/src/internal/upload/interface.ts +79 -77
- package/src/internal/upload/manager.test.ts +222 -175
- package/src/internal/upload/manager.ts +74 -80
- package/src/internal/upload/queue.ts +3 -3
- package/src/internal/upload/streamUploader.test.ts +40 -27
- package/src/internal/upload/streamUploader.ts +87 -71
- package/src/internal/upload/telemetry.test.ts +11 -11
- package/src/internal/upload/telemetry.ts +25 -15
- package/src/internal/wait.test.ts +1 -1
- package/src/internal/wait.ts +3 -3
- package/src/protonDriveClient.ts +189 -276
- package/src/protonDrivePhotosClient.ts +20 -13
- package/src/telemetry.ts +60 -52
- package/src/tests/logger.ts +1 -1
- package/src/tests/telemetry.ts +2 -2
- package/src/transformers.ts +27 -21
- package/src/version.ts +0 -1
- package/dist/internal/events/cache.d.ts +0 -28
- package/dist/internal/events/cache.js +0 -67
- package/dist/internal/events/cache.js.map +0 -1
- package/dist/internal/events/cache.test.js +0 -43
- package/dist/internal/events/cache.test.js.map +0 -1
- package/src/internal/events/cache.test.ts +0 -47
- package/src/internal/events/cache.ts +0 -80
- /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { c } from 'ttag';
|
|
2
2
|
|
|
3
|
-
import { PrivateKey, SessionKey } from
|
|
4
|
-
import { InvalidNameError, Logger, MissingNode, NodeType, Result, resultError, resultOk } from
|
|
5
|
-
import { DecryptionError, ProtonDriveError } from
|
|
3
|
+
import { PrivateKey, SessionKey } from '../../crypto';
|
|
4
|
+
import { InvalidNameError, Logger, MissingNode, NodeType, Result, resultError, resultOk } from '../../interface';
|
|
5
|
+
import { DecryptionError, ProtonDriveError } from '../../errors';
|
|
6
6
|
import { asyncIteratorMap } from '../asyncIteratorMap';
|
|
7
7
|
import { getErrorMessage } from '../errors';
|
|
8
|
-
import { BatchLoading } from
|
|
9
|
-
import { makeNodeUid, splitNodeUid } from
|
|
10
|
-
import { NodeAPIService } from
|
|
11
|
-
import { NodesCache } from
|
|
12
|
-
import { NodesCryptoCache } from
|
|
13
|
-
import { NodesCryptoService } from
|
|
14
|
-
import { parseFileExtendedAttributes, parseFolderExtendedAttributes } from
|
|
15
|
-
import { SharesService, EncryptedNode, DecryptedUnparsedNode, DecryptedNode, DecryptedNodeKeys } from
|
|
16
|
-
import { validateNodeName } from
|
|
8
|
+
import { BatchLoading } from '../batchLoading';
|
|
9
|
+
import { makeNodeUid, splitNodeUid } from '../uids';
|
|
10
|
+
import { NodeAPIService } from './apiService';
|
|
11
|
+
import { NodesCache } from './cache';
|
|
12
|
+
import { NodesCryptoCache } from './cryptoCache';
|
|
13
|
+
import { NodesCryptoService } from './cryptoService';
|
|
14
|
+
import { parseFileExtendedAttributes, parseFolderExtendedAttributes } from './extendedAttributes';
|
|
15
|
+
import { SharesService, EncryptedNode, DecryptedUnparsedNode, DecryptedNode, DecryptedNodeKeys } from './interface';
|
|
16
|
+
import { validateNodeName } from './validations';
|
|
17
17
|
import { isProtonDocument, isProtonSheet } from './mediaTypes';
|
|
18
18
|
|
|
19
19
|
// This is the number of nodes that are loaded in parallel.
|
|
@@ -28,7 +28,7 @@ const DECRYPTION_CONCURRENCY = 15;
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Provides access to node metadata.
|
|
31
|
-
*
|
|
31
|
+
*
|
|
32
32
|
* The node access module is responsible for fetching, decrypting and caching
|
|
33
33
|
* nodes metadata.
|
|
34
34
|
*/
|
|
@@ -59,7 +59,7 @@ export class NodesAccess {
|
|
|
59
59
|
let cachedNode;
|
|
60
60
|
try {
|
|
61
61
|
cachedNode = await this.cache.getNode(nodeUid);
|
|
62
|
-
} catch {
|
|
62
|
+
} catch {}
|
|
63
63
|
|
|
64
64
|
if (cachedNode && !cachedNode.isStale) {
|
|
65
65
|
return cachedNode;
|
|
@@ -75,7 +75,10 @@ export class NodesAccess {
|
|
|
75
75
|
// Ensure the parent is loaded and up-to-date.
|
|
76
76
|
const parentNode = await this.getNode(parentNodeUid);
|
|
77
77
|
|
|
78
|
-
const batchLoading = new BatchLoading<string, DecryptedNode>({
|
|
78
|
+
const batchLoading = new BatchLoading<string, DecryptedNode>({
|
|
79
|
+
iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal),
|
|
80
|
+
batchSize: BATCH_LOADING_SIZE,
|
|
81
|
+
});
|
|
79
82
|
|
|
80
83
|
const areChildrenCached = await this.cache.isFolderChildrenLoaded(parentNodeUid);
|
|
81
84
|
if (areChildrenCached) {
|
|
@@ -95,7 +98,7 @@ export class NodesAccess {
|
|
|
95
98
|
let node;
|
|
96
99
|
try {
|
|
97
100
|
node = await this.cache.getNode(nodeUid);
|
|
98
|
-
} catch {
|
|
101
|
+
} catch {}
|
|
99
102
|
|
|
100
103
|
if (node && !node.isStale) {
|
|
101
104
|
yield node;
|
|
@@ -111,12 +114,15 @@ export class NodesAccess {
|
|
|
111
114
|
// Improvement requested: keep status of loaded trash and leverage cache.
|
|
112
115
|
async *iterateTrashedNodes(signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
|
|
113
116
|
const { volumeId } = await this.shareService.getMyFilesIDs();
|
|
114
|
-
const batchLoading = new BatchLoading<string, DecryptedNode>({
|
|
117
|
+
const batchLoading = new BatchLoading<string, DecryptedNode>({
|
|
118
|
+
iterateItems: (nodeUids) => this.loadNodes(nodeUids, signal),
|
|
119
|
+
batchSize: BATCH_LOADING_SIZE,
|
|
120
|
+
});
|
|
115
121
|
for await (const nodeUid of this.apiService.iterateTrashedNodeUids(volumeId, signal)) {
|
|
116
122
|
let node;
|
|
117
123
|
try {
|
|
118
124
|
node = await this.cache.getNode(nodeUid);
|
|
119
|
-
} catch {
|
|
125
|
+
} catch {}
|
|
120
126
|
|
|
121
127
|
if (node && !node.isStale) {
|
|
122
128
|
yield node;
|
|
@@ -129,7 +135,10 @@ export class NodesAccess {
|
|
|
129
135
|
}
|
|
130
136
|
|
|
131
137
|
async *iterateNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode | MissingNode> {
|
|
132
|
-
const batchLoading = new BatchLoading<string, DecryptedNode | MissingNode>({
|
|
138
|
+
const batchLoading = new BatchLoading<string, DecryptedNode | MissingNode>({
|
|
139
|
+
iterateItems: (nodeUids) => this.loadNodesWithMissingReport(nodeUids, signal),
|
|
140
|
+
batchSize: BATCH_LOADING_SIZE,
|
|
141
|
+
});
|
|
133
142
|
for await (const result of this.cache.iterateNodes(nodeUids)) {
|
|
134
143
|
if (result.ok && !result.node.isStale) {
|
|
135
144
|
yield result.node;
|
|
@@ -140,13 +149,49 @@ export class NodesAccess {
|
|
|
140
149
|
yield* batchLoading.loadRest();
|
|
141
150
|
}
|
|
142
151
|
|
|
143
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Call to invalidate the folder listing cache. This should be refactored into a clean
|
|
154
|
+
* cache layer once the cache is split off.
|
|
155
|
+
*/
|
|
156
|
+
async notifyChildCreated(nodeUid: string): Promise<void> {
|
|
157
|
+
await this.cache.resetFolderChildrenLoaded(nodeUid);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Call to invalidate the node cache when a node changes. Parent can be set after a move
|
|
162
|
+
* to ensure parent listing of new parent is up to date if cached.
|
|
163
|
+
* This should be refactored into a clean cache layer once the cache is split off.
|
|
164
|
+
*/
|
|
165
|
+
async notifyNodeChanged(nodeUid: string, newParentUid?: string): Promise<void> {
|
|
166
|
+
try {
|
|
167
|
+
const node = await this.cache.getNode(nodeUid);
|
|
168
|
+
if (node.isStale && newParentUid === null) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
node.isStale = true;
|
|
172
|
+
if (newParentUid) {
|
|
173
|
+
node.parentUid = newParentUid;
|
|
174
|
+
}
|
|
175
|
+
await this.cache.setNode(node);
|
|
176
|
+
} catch (error: unknown) {
|
|
177
|
+
this.logger.warn(`Failed to set node ${nodeUid} as stale after sharing: ${error}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Call to remove a node from cache. This should be refactored when the cache is split off.
|
|
183
|
+
*/
|
|
184
|
+
async notifyNodeDeleted(nodeUid: string): Promise<void> {
|
|
185
|
+
await this.cache.removeNodes([nodeUid]);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private async loadNode(nodeUid: string): Promise<{ node: DecryptedNode; keys?: DecryptedNodeKeys }> {
|
|
144
189
|
const { volumeId: ownVolumeId } = await this.shareService.getMyFilesIDs();
|
|
145
190
|
const encryptedNode = await this.apiService.getNode(nodeUid, ownVolumeId);
|
|
146
191
|
return this.decryptNode(encryptedNode);
|
|
147
192
|
}
|
|
148
193
|
|
|
149
|
-
private async*
|
|
194
|
+
private async *loadNodes(nodeUids: string[], signal?: AbortSignal): AsyncGenerator<DecryptedNode> {
|
|
150
195
|
for await (const result of this.loadNodesWithMissingReport(nodeUids, signal)) {
|
|
151
196
|
if ('missingUid' in result) {
|
|
152
197
|
continue;
|
|
@@ -155,7 +200,10 @@ export class NodesAccess {
|
|
|
155
200
|
}
|
|
156
201
|
}
|
|
157
202
|
|
|
158
|
-
private async*
|
|
203
|
+
private async *loadNodesWithMissingReport(
|
|
204
|
+
nodeUids: string[],
|
|
205
|
+
signal?: AbortSignal,
|
|
206
|
+
): AsyncGenerator<DecryptedNode | MissingNode> {
|
|
159
207
|
const returnedNodeUids: string[] = [];
|
|
160
208
|
const errors = [];
|
|
161
209
|
|
|
@@ -171,7 +219,11 @@ export class NodesAccess {
|
|
|
171
219
|
return resultError(error);
|
|
172
220
|
}
|
|
173
221
|
};
|
|
174
|
-
const decryptedNodesIterator = asyncIteratorMap(
|
|
222
|
+
const decryptedNodesIterator = asyncIteratorMap(
|
|
223
|
+
encryptedNodesIterator,
|
|
224
|
+
decryptNodeMapper,
|
|
225
|
+
DECRYPTION_CONCURRENCY,
|
|
226
|
+
);
|
|
175
227
|
for await (const node of decryptedNodesIterator) {
|
|
176
228
|
if (node.ok) {
|
|
177
229
|
yield node.value;
|
|
@@ -196,7 +248,9 @@ export class NodesAccess {
|
|
|
196
248
|
}
|
|
197
249
|
}
|
|
198
250
|
|
|
199
|
-
private async decryptNode(
|
|
251
|
+
private async decryptNode(
|
|
252
|
+
encryptedNode: EncryptedNode,
|
|
253
|
+
): Promise<{ node: DecryptedNode; keys?: DecryptedNodeKeys }> {
|
|
200
254
|
let parentKey;
|
|
201
255
|
try {
|
|
202
256
|
const parentKeys = await this.getParentKeys(encryptedNode);
|
|
@@ -217,6 +271,7 @@ export class NodesAccess {
|
|
|
217
271
|
error: getErrorMessage(error),
|
|
218
272
|
}),
|
|
219
273
|
errors: [error],
|
|
274
|
+
treeEventScopeId: splitNodeUid(encryptedNode.uid).volumeId,
|
|
220
275
|
},
|
|
221
276
|
};
|
|
222
277
|
}
|
|
@@ -262,17 +317,20 @@ export class NodesAccess {
|
|
|
262
317
|
return {
|
|
263
318
|
...unparsedNode,
|
|
264
319
|
isStale: false,
|
|
265
|
-
activeRevision: !unparsedNode.activeRevision?.ok
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
320
|
+
activeRevision: !unparsedNode.activeRevision?.ok
|
|
321
|
+
? unparsedNode.activeRevision
|
|
322
|
+
: resultOk({
|
|
323
|
+
uid: unparsedNode.activeRevision.value.uid,
|
|
324
|
+
state: unparsedNode.activeRevision.value.state,
|
|
325
|
+
creationTime: unparsedNode.activeRevision.value.creationTime,
|
|
326
|
+
storageSize: unparsedNode.activeRevision.value.storageSize,
|
|
327
|
+
contentAuthor: unparsedNode.activeRevision.value.contentAuthor,
|
|
328
|
+
thumbnails: unparsedNode.activeRevision.value.thumbnails,
|
|
329
|
+
...extendedAttributes,
|
|
330
|
+
}),
|
|
274
331
|
folder: undefined,
|
|
275
|
-
|
|
332
|
+
treeEventScopeId: splitNodeUid(unparsedNode.uid).volumeId,
|
|
333
|
+
};
|
|
276
334
|
}
|
|
277
335
|
|
|
278
336
|
const extendedAttributes = unparsedNode.folder?.extendedAttributes
|
|
@@ -283,13 +341,18 @@ export class NodesAccess {
|
|
|
283
341
|
name: nodeName,
|
|
284
342
|
isStale: false,
|
|
285
343
|
activeRevision: undefined,
|
|
286
|
-
folder: extendedAttributes
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
344
|
+
folder: extendedAttributes
|
|
345
|
+
? {
|
|
346
|
+
...extendedAttributes,
|
|
347
|
+
}
|
|
348
|
+
: undefined,
|
|
349
|
+
treeEventScopeId: splitNodeUid(unparsedNode.uid).volumeId,
|
|
350
|
+
};
|
|
290
351
|
}
|
|
291
352
|
|
|
292
|
-
async getParentKeys(
|
|
353
|
+
async getParentKeys(
|
|
354
|
+
node: Pick<DecryptedNode, 'parentUid' | 'shareId'>,
|
|
355
|
+
): Promise<Pick<DecryptedNodeKeys, 'key' | 'hashKey'>> {
|
|
293
356
|
if (node.parentUid) {
|
|
294
357
|
try {
|
|
295
358
|
return await this.getNodeKeys(node.parentUid);
|
|
@@ -306,7 +369,7 @@ export class NodesAccess {
|
|
|
306
369
|
if (node.shareId) {
|
|
307
370
|
return {
|
|
308
371
|
key: await this.shareService.getSharePrivateKey(node.shareId),
|
|
309
|
-
}
|
|
372
|
+
};
|
|
310
373
|
}
|
|
311
374
|
// This is bug that should not happen.
|
|
312
375
|
// API cannot provide node without parent or share.
|
|
@@ -326,11 +389,11 @@ export class NodesAccess {
|
|
|
326
389
|
}
|
|
327
390
|
|
|
328
391
|
async getNodePrivateAndSessionKeys(nodeUid: string): Promise<{
|
|
329
|
-
key: PrivateKey
|
|
330
|
-
passphrase: string
|
|
331
|
-
passphraseSessionKey: SessionKey
|
|
332
|
-
contentKeyPacketSessionKey?: SessionKey
|
|
333
|
-
nameSessionKey: SessionKey
|
|
392
|
+
key: PrivateKey;
|
|
393
|
+
passphrase: string;
|
|
394
|
+
passphraseSessionKey: SessionKey;
|
|
395
|
+
contentKeyPacketSessionKey?: SessionKey;
|
|
396
|
+
nameSessionKey: SessionKey;
|
|
334
397
|
}> {
|
|
335
398
|
const node = await this.getNode(nodeUid);
|
|
336
399
|
const { key: parentKey } = await this.getParentKeys(node);
|
|
@@ -346,10 +409,10 @@ export class NodesAccess {
|
|
|
346
409
|
}
|
|
347
410
|
|
|
348
411
|
async getRootNodeEmailKey(nodeUid: string): Promise<{
|
|
349
|
-
email: string
|
|
350
|
-
addressId: string
|
|
351
|
-
addressKey: PrivateKey
|
|
352
|
-
addressKeyId: string
|
|
412
|
+
email: string;
|
|
413
|
+
addressId: string;
|
|
414
|
+
addressKey: PrivateKey;
|
|
415
|
+
addressKeyId: string;
|
|
353
416
|
}> {
|
|
354
417
|
const rootNode = await this.getRootNode(nodeUid);
|
|
355
418
|
if (!rootNode.shareId) {
|
|
@@ -379,5 +442,5 @@ export class NodesAccess {
|
|
|
379
442
|
private async getRootNode(nodeUid: string): Promise<DecryptedNode> {
|
|
380
443
|
const node = await this.getNode(nodeUid);
|
|
381
444
|
return node.parentUid ? this.getRootNode(node.parentUid) : node;
|
|
382
|
-
}
|
|
445
|
+
}
|
|
383
446
|
}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { NodeAPIService } from
|
|
2
|
-
import { NodesCryptoCache } from
|
|
3
|
-
import { NodesCryptoService } from
|
|
1
|
+
import { NodeAPIService } from './apiService';
|
|
2
|
+
import { NodesCryptoCache } from './cryptoCache';
|
|
3
|
+
import { NodesCryptoService } from './cryptoService';
|
|
4
4
|
import { NodesAccess } from './nodesAccess';
|
|
5
|
-
import { NodesEvents } from './events';
|
|
6
5
|
import { DecryptedNode } from './interface';
|
|
7
6
|
import { NodesManagement } from './nodesManagement';
|
|
7
|
+
import { NodeResult } from '../../interface';
|
|
8
8
|
|
|
9
9
|
describe('NodesManagement', () => {
|
|
10
10
|
let apiService: NodeAPIService;
|
|
11
11
|
let cryptoCache: NodesCryptoCache;
|
|
12
12
|
let cryptoService: NodesCryptoService;
|
|
13
13
|
let nodesAccess: NodesAccess;
|
|
14
|
-
let nodesEvents: NodesEvents;
|
|
15
14
|
let management: NodesManagement;
|
|
16
15
|
|
|
17
16
|
let nodes: { [uid: string]: DecryptedNode };
|
|
@@ -50,15 +49,21 @@ describe('NodesManagement', () => {
|
|
|
50
49
|
apiService = {
|
|
51
50
|
renameNode: jest.fn(),
|
|
52
51
|
moveNode: jest.fn(),
|
|
53
|
-
trashNodes: jest.fn()
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
trashNodes: jest.fn(async function* (uids) {
|
|
53
|
+
yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
|
|
54
|
+
}),
|
|
55
|
+
restoreNodes: jest.fn(async function* (uids) {
|
|
56
|
+
yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
|
|
57
|
+
}),
|
|
58
|
+
deleteNodes: jest.fn(async function* (uids) {
|
|
59
|
+
yield* uids.map((uid) => ({ ok: true, uid }) as NodeResult);
|
|
60
|
+
}),
|
|
56
61
|
createFolder: jest.fn(),
|
|
57
|
-
}
|
|
62
|
+
};
|
|
58
63
|
// @ts-expect-error No need to implement all methods for mocking
|
|
59
64
|
cryptoCache = {
|
|
60
65
|
setNodeKeys: jest.fn(),
|
|
61
|
-
}
|
|
66
|
+
};
|
|
62
67
|
// @ts-expect-error No need to implement all methods for mocking
|
|
63
68
|
cryptoService = {
|
|
64
69
|
encryptNewName: jest.fn().mockResolvedValue({
|
|
@@ -68,7 +73,7 @@ describe('NodesManagement', () => {
|
|
|
68
73
|
}),
|
|
69
74
|
moveNode: jest.fn(),
|
|
70
75
|
createFolder: jest.fn(),
|
|
71
|
-
}
|
|
76
|
+
};
|
|
72
77
|
// @ts-expect-error No need to implement all methods for mocking
|
|
73
78
|
nodesAccess = {
|
|
74
79
|
getNode: jest.fn().mockImplementation((uid: string) => nodes[uid]),
|
|
@@ -83,23 +88,21 @@ describe('NodesManagement', () => {
|
|
|
83
88
|
hashKey: `${nodes[uid].parentUid}-hashKey`,
|
|
84
89
|
})),
|
|
85
90
|
iterateNodes: jest.fn(),
|
|
86
|
-
getNodePrivateAndSessionKeys: jest.fn().mockImplementation((uid) =>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
nodesDeleted: jest.fn(),
|
|
100
|
-
}
|
|
91
|
+
getNodePrivateAndSessionKeys: jest.fn().mockImplementation((uid) =>
|
|
92
|
+
Promise.resolve({
|
|
93
|
+
key: `${uid}-key`,
|
|
94
|
+
passphrase: `${uid}-passphrase`,
|
|
95
|
+
passphraseSessionKey: `${uid}-passphraseSessionKey`,
|
|
96
|
+
contentKeyPacketSessionKey: `${uid}-contentKeyPacketSessionKey`,
|
|
97
|
+
nameSessionKey: `${uid}-nameSessionKey`,
|
|
98
|
+
}),
|
|
99
|
+
),
|
|
100
|
+
getRootNodeEmailKey: jest.fn().mockResolvedValue({ email: 'root-email', addressKey: 'root-key' }),
|
|
101
|
+
notifyNodeChanged: jest.fn(),
|
|
102
|
+
notifyNodeDeleted: jest.fn(),
|
|
103
|
+
};
|
|
101
104
|
|
|
102
|
-
management = new NodesManagement(apiService, cryptoCache, cryptoService, nodesAccess
|
|
105
|
+
management = new NodesManagement(apiService, cryptoCache, cryptoService, nodesAccess);
|
|
103
106
|
});
|
|
104
107
|
|
|
105
108
|
it('renameNode manages rename and updates cache', async () => {
|
|
@@ -108,6 +111,7 @@ describe('NodesManagement', () => {
|
|
|
108
111
|
expect(newNode).toEqual({
|
|
109
112
|
...nodes.nodeUid,
|
|
110
113
|
name: { ok: true, value: 'new name' },
|
|
114
|
+
encryptedName: 'newArmoredNodeName',
|
|
111
115
|
nameAuthor: { ok: true, value: 'newSignatureEmail' },
|
|
112
116
|
hash: 'newHash',
|
|
113
117
|
});
|
|
@@ -115,15 +119,15 @@ describe('NodesManagement', () => {
|
|
|
115
119
|
expect(cryptoService.encryptNewName).toHaveBeenCalledWith(
|
|
116
120
|
{ key: 'parentUid-key', hashKey: 'parentUid-hashKey' },
|
|
117
121
|
'nodeUid-nameSessionKey',
|
|
118
|
-
{ email:
|
|
122
|
+
{ email: 'root-email', addressKey: 'root-key' },
|
|
119
123
|
'new name',
|
|
120
124
|
);
|
|
121
125
|
expect(apiService.renameNode).toHaveBeenCalledWith(
|
|
122
126
|
nodes.nodeUid.uid,
|
|
123
127
|
{ hash: nodes.nodeUid.hash },
|
|
124
|
-
{ encryptedName: 'newArmoredNodeName', nameSignatureEmail: 'newSignatureEmail', hash: 'newHash' }
|
|
128
|
+
{ encryptedName: 'newArmoredNodeName', nameSignatureEmail: 'newSignatureEmail', hash: 'newHash' },
|
|
125
129
|
);
|
|
126
|
-
expect(
|
|
130
|
+
expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledWith('nodeUid');
|
|
127
131
|
});
|
|
128
132
|
|
|
129
133
|
it('moveNode manages move and updates cache', async () => {
|
|
@@ -134,7 +138,7 @@ describe('NodesManagement', () => {
|
|
|
134
138
|
armoredNodePassphraseSignature: 'movedArmoredNodePassphraseSignature',
|
|
135
139
|
signatureEmail: 'movedSignatureEmail',
|
|
136
140
|
nameSignatureEmail: 'movedNameSignatureEmail',
|
|
137
|
-
}
|
|
141
|
+
};
|
|
138
142
|
cryptoService.moveNode = jest.fn().mockResolvedValue(encryptedCrypto);
|
|
139
143
|
|
|
140
144
|
const newNode = await management.moveNode('nodeUid', 'newParentNodeUid');
|
|
@@ -142,6 +146,7 @@ describe('NodesManagement', () => {
|
|
|
142
146
|
expect(newNode).toEqual({
|
|
143
147
|
...nodes.nodeUid,
|
|
144
148
|
parentUid: 'newParentNodeUid',
|
|
149
|
+
encryptedName: 'movedArmoredNodeName',
|
|
145
150
|
hash: 'movedHash',
|
|
146
151
|
keyAuthor: { ok: true, value: 'movedSignatureEmail' },
|
|
147
152
|
nameAuthor: { ok: true, value: 'movedNameSignatureEmail' },
|
|
@@ -154,10 +159,10 @@ describe('NodesManagement', () => {
|
|
|
154
159
|
passphrase: 'nodeUid-passphrase',
|
|
155
160
|
passphraseSessionKey: 'nodeUid-passphraseSessionKey',
|
|
156
161
|
contentKeyPacketSessionKey: 'nodeUid-contentKeyPacketSessionKey',
|
|
157
|
-
nameSessionKey: 'nodeUid-nameSessionKey'
|
|
162
|
+
nameSessionKey: 'nodeUid-nameSessionKey',
|
|
158
163
|
}),
|
|
159
164
|
expect.objectContaining({ key: 'newParentNodeUid-key', hashKey: 'newParentNodeUid-hashKey' }),
|
|
160
|
-
{ email:
|
|
165
|
+
{ email: 'root-email', addressKey: 'root-key' },
|
|
161
166
|
);
|
|
162
167
|
expect(apiService.moveNode).toHaveBeenCalledWith(
|
|
163
168
|
'nodeUid',
|
|
@@ -171,7 +176,7 @@ describe('NodesManagement', () => {
|
|
|
171
176
|
signatureEmail: undefined,
|
|
172
177
|
},
|
|
173
178
|
);
|
|
174
|
-
expect(
|
|
179
|
+
expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledWith('nodeUid', 'newParentNodeUid');
|
|
175
180
|
});
|
|
176
181
|
|
|
177
182
|
it('moveNode manages move of anonymous node', async () => {
|
|
@@ -182,7 +187,7 @@ describe('NodesManagement', () => {
|
|
|
182
187
|
armoredNodePassphraseSignature: 'movedArmoredNodePassphraseSignature',
|
|
183
188
|
signatureEmail: 'movedSignatureEmail',
|
|
184
189
|
nameSignatureEmail: 'movedNameSignatureEmail',
|
|
185
|
-
}
|
|
190
|
+
};
|
|
186
191
|
cryptoService.moveNode = jest.fn().mockResolvedValue(encryptedCrypto);
|
|
187
192
|
|
|
188
193
|
const newNode = await management.moveNode('anonymousNodeUid', 'newParentNodeUid');
|
|
@@ -194,14 +199,15 @@ describe('NodesManagement', () => {
|
|
|
194
199
|
passphrase: 'anonymousNodeUid-passphrase',
|
|
195
200
|
passphraseSessionKey: 'anonymousNodeUid-passphraseSessionKey',
|
|
196
201
|
contentKeyPacketSessionKey: 'anonymousNodeUid-contentKeyPacketSessionKey',
|
|
197
|
-
nameSessionKey: 'anonymousNodeUid-nameSessionKey'
|
|
202
|
+
nameSessionKey: 'anonymousNodeUid-nameSessionKey',
|
|
198
203
|
}),
|
|
199
204
|
expect.objectContaining({ key: 'newParentNodeUid-key', hashKey: 'newParentNodeUid-hashKey' }),
|
|
200
|
-
{ email:
|
|
205
|
+
{ email: 'root-email', addressKey: 'root-key' },
|
|
201
206
|
);
|
|
202
207
|
expect(newNode).toEqual({
|
|
203
208
|
...nodes.anonymousNodeUid,
|
|
204
209
|
parentUid: 'newParentNodeUid',
|
|
210
|
+
encryptedName: 'movedArmoredNodeName',
|
|
205
211
|
hash: 'movedHash',
|
|
206
212
|
keyAuthor: { ok: true, value: 'movedSignatureEmail' },
|
|
207
213
|
nameAuthor: { ok: true, value: 'movedNameSignatureEmail' },
|
|
@@ -213,9 +219,28 @@ describe('NodesManagement', () => {
|
|
|
213
219
|
},
|
|
214
220
|
{
|
|
215
221
|
parentUid: 'newParentNodeUid',
|
|
216
|
-
...encryptedCrypto
|
|
222
|
+
...encryptedCrypto,
|
|
217
223
|
},
|
|
218
224
|
);
|
|
219
|
-
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('trashes node and updates cache', async () => {
|
|
228
|
+
const uids = ['v1~n1', 'v1~n2'];
|
|
229
|
+
const trashed = new Set();
|
|
230
|
+
for await (const node of management.trashNodes(uids)) {
|
|
231
|
+
trashed.add(node.uid);
|
|
232
|
+
}
|
|
233
|
+
expect(trashed).toEqual(new Set(uids));
|
|
234
|
+
expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledTimes(2);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('restores node and updates cache', async () => {
|
|
238
|
+
const uids = ['v1~n1', 'v1~n2'];
|
|
239
|
+
const restored = new Set();
|
|
240
|
+
for await (const node of management.restoreNodes(uids)) {
|
|
241
|
+
restored.add(node.uid);
|
|
242
|
+
}
|
|
243
|
+
expect(restored).toEqual(new Set(uids));
|
|
244
|
+
expect(nodesAccess.notifyNodeChanged).toHaveBeenCalledTimes(2);
|
|
220
245
|
});
|
|
221
246
|
});
|