@protontech/drive-sdk 0.1.0 → 0.1.2
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/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.js +0 -1
- package/dist/cache/nullCache.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 +3 -3
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/eventsGenerator.js +1 -1
- package/dist/diagnostic/eventsGenerator.js.map +1 -1
- package/dist/diagnostic/httpClient.d.ts +1 -1
- package/dist/diagnostic/httpClient.js.map +1 -1
- package/dist/diagnostic/index.d.ts +3 -3
- package/dist/diagnostic/index.js.map +1 -1
- package/dist/diagnostic/integrityVerificationStream.js +1 -1
- package/dist/diagnostic/integrityVerificationStream.js.map +1 -1
- package/dist/diagnostic/interface.d.ts +2 -2
- package/dist/diagnostic/sdkDiagnostic.d.ts +3 -3
- package/dist/diagnostic/sdkDiagnostic.js +8 -2
- package/dist/diagnostic/sdkDiagnostic.js.map +1 -1
- package/dist/diagnostic/sdkDiagnosticFull.d.ts +4 -4
- package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -1
- package/dist/diagnostic/telemetry.js.map +1 -1
- package/dist/diagnostic/zipGenerators.js +2 -2
- package/dist/diagnostic/zipGenerators.js.map +1 -1
- package/dist/diagnostic/zipGenerators.test.js +1 -1
- package/dist/diagnostic/zipGenerators.test.js.map +1 -1
- package/dist/interface/events.d.ts +2 -4
- package/dist/interface/events.js.map +1 -1
- package/dist/interface/index.d.ts +5 -5
- package/dist/interface/index.js +0 -1
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/result.js.map +1 -1
- package/dist/interface/sharing.d.ts +1 -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 +1 -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 +0 -1
- 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 +4 -4
- 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 +2 -2
- package/dist/internal/events/apiService.js +9 -5
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.d.ts +3 -3
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.js +14 -14
- package/dist/internal/events/eventManager.d.ts +2 -1
- package/dist/internal/events/eventManager.js +9 -1
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +84 -60
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +10 -9
- package/dist/internal/events/index.js +38 -32
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +1 -1
- package/dist/internal/events/interface.js +0 -1
- package/dist/internal/events/interface.js.map +1 -1
- package/dist/internal/events/volumeEventManager.d.ts +3 -3
- package/dist/internal/events/volumeEventManager.js.map +1 -1
- package/dist/internal/events/volumeEventManager.test.js +55 -55
- package/dist/internal/events/volumeEventManager.test.js.map +1 -1
- 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 +5 -5
- package/dist/internal/nodes/cache.js +14 -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 +3 -3
- 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 +3 -3
- package/dist/internal/nodes/events.js +7 -7
- package/dist/internal/nodes/events.js.map +1 -1
- package/dist/internal/nodes/events.test.js +27 -21
- 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 +10 -10
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/index.test.d.ts +1 -0
- package/dist/internal/nodes/index.test.js +106 -0
- package/dist/internal/nodes/index.test.js.map +1 -0
- package/dist/internal/nodes/interface.d.ts +2 -2
- package/dist/internal/nodes/nodesAccess.d.ts +7 -7
- package/dist/internal/nodes/nodesAccess.js +28 -16
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +39 -13
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +6 -6
- package/dist/internal/nodes/nodesManagement.js +9 -7
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +9 -9
- 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 +2 -2
- package/dist/internal/shares/cache.js +12 -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 +7 -7
- 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 +4 -3
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cache.d.ts +2 -1
- package/dist/internal/sharing/cache.js +9 -0
- package/dist/internal/sharing/cache.js.map +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 -5
- 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 +5 -4
- package/dist/internal/sharing/events.js +28 -19
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +101 -88
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.d.ts +6 -6
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +5 -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 +4 -4
- package/dist/internal/sharing/sharingManagement.js +5 -7
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +297 -248
- 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 +3 -3
- package/dist/internal/upload/apiService.js +1 -1
- 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 +5 -5
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/interface.d.ts +4 -3
- package/dist/internal/upload/manager.d.ts +5 -5
- package/dist/internal/upload/manager.js +15 -9
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +139 -128
- 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 -7
- 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 +8 -8
- package/dist/protonDriveClient.js +12 -9
- package/dist/protonDriveClient.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/transformers.js +5 -2
- package/dist/transformers.js.map +1 -1
- package/package.json +1 -1
- package/src/cache/interface.ts +22 -22
- package/src/cache/memoryCache.test.ts +7 -7
- package/src/cache/memoryCache.ts +4 -4
- package/src/cache/nullCache.ts +1 -1
- package/src/config.ts +5 -5
- 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 +74 -94
- package/src/crypto/utils.ts +1 -1
- package/src/diagnostic/eventsGenerator.ts +2 -2
- package/src/diagnostic/httpClient.ts +6 -2
- package/src/diagnostic/index.ts +12 -10
- package/src/diagnostic/integrityVerificationStream.ts +3 -4
- package/src/diagnostic/interface.ts +81 -81
- package/src/diagnostic/sdkDiagnostic.ts +35 -24
- package/src/diagnostic/sdkDiagnosticFull.ts +16 -19
- package/src/diagnostic/telemetry.ts +4 -1
- package/src/diagnostic/zipGenerators.test.ts +1 -1
- package/src/diagnostic/zipGenerators.ts +3 -3
- package/src/errors.ts +21 -21
- 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 +4 -4
- package/src/interface/devices.ts +6 -6
- package/src/interface/download.ts +12 -9
- package/src/interface/events.ts +45 -39
- package/src/interface/httpClient.ts +11 -11
- package/src/interface/index.ts +76 -19
- package/src/interface/nodes.ts +47 -49
- package/src/interface/result.ts +1 -3
- package/src/interface/sharing.ts +60 -57
- package/src/interface/telemetry.ts +74 -74
- package/src/interface/thumbnail.ts +5 -6
- package/src/interface/upload.ts +20 -12
- 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 +66 -49
- package/src/internal/download/cryptoService.ts +34 -18
- package/src/internal/download/fileDownloader.test.ts +25 -9
- package/src/internal/download/fileDownloader.ts +36 -18
- 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 +30 -17
- package/src/internal/events/coreEventManager.test.ts +18 -18
- package/src/internal/events/coreEventManager.ts +9 -6
- package/src/internal/events/eventManager.test.ts +108 -82
- package/src/internal/events/eventManager.ts +16 -5
- package/src/internal/events/index.ts +75 -47
- package/src/internal/events/interface.ts +47 -39
- package/src/internal/events/volumeEventManager.test.ts +61 -65
- package/src/internal/events/volumeEventManager.ts +18 -9
- 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 +60 -44
- 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 +170 -88
- package/src/internal/nodes/events.test.ts +38 -28
- package/src/internal/nodes/events.ts +13 -12
- package/src/internal/nodes/extendedAttributes.test.ts +28 -24
- package/src/internal/nodes/extendedAttributes.ts +20 -15
- package/src/internal/nodes/index.test.ts +133 -0
- package/src/internal/nodes/index.ts +27 -15
- package/src/internal/nodes/interface.ts +42 -29
- package/src/internal/nodes/nodesAccess.test.ts +124 -58
- package/src/internal/nodes/nodesAccess.ts +73 -49
- package/src/internal/nodes/nodesManagement.test.ts +32 -31
- package/src/internal/nodes/nodesManagement.ts +39 -32
- 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 +21 -12
- 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 +19 -19
- package/src/internal/sharing/apiService.ts +282 -175
- package/src/internal/sharing/cache.test.ts +35 -35
- package/src/internal/sharing/cache.ts +11 -2
- package/src/internal/sharing/cryptoService.test.ts +58 -46
- package/src/internal/sharing/cryptoService.ts +121 -84
- package/src/internal/sharing/events.test.ts +113 -102
- package/src/internal/sharing/events.ts +42 -24
- package/src/internal/sharing/index.ts +22 -11
- package/src/internal/sharing/interface.ts +40 -40
- package/src/internal/sharing/sharingAccess.test.ts +71 -65
- package/src/internal/sharing/sharingAccess.ts +39 -21
- package/src/internal/sharing/sharingManagement.test.ts +398 -298
- package/src/internal/sharing/sharingManagement.ts +138 -65
- package/src/internal/uids.ts +1 -1
- package/src/internal/upload/apiService.ts +167 -117
- 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 +13 -14
- package/src/internal/upload/interface.ts +79 -78
- package/src/internal/upload/manager.test.ts +170 -156
- package/src/internal/upload/manager.ts +66 -39
- package/src/internal/upload/queue.ts +3 -3
- package/src/internal/upload/streamUploader.test.ts +40 -26
- package/src/internal/upload/streamUploader.ts +87 -69
- 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 +121 -39
- package/src/protonDrivePhotosClient.ts +16 -10
- package/src/telemetry.ts +60 -52
- package/src/tests/logger.ts +1 -1
- package/src/tests/telemetry.ts +2 -2
- package/src/transformers.ts +29 -21
- package/src/version.ts +0 -1
|
@@ -1,12 +1,42 @@
|
|
|
1
1
|
import bcrypt from 'bcryptjs';
|
|
2
2
|
import { c } from 'ttag';
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
DriveCrypto,
|
|
6
|
+
PrivateKey,
|
|
7
|
+
SessionKey,
|
|
8
|
+
SRPVerifier,
|
|
9
|
+
uint8ArrayToBase64String,
|
|
10
|
+
VERIFICATION_STATUS,
|
|
11
|
+
} from '../../crypto';
|
|
12
|
+
import {
|
|
13
|
+
ProtonDriveAccount,
|
|
14
|
+
ProtonInvitation,
|
|
15
|
+
ProtonInvitationWithNode,
|
|
16
|
+
NonProtonInvitation,
|
|
17
|
+
Author,
|
|
18
|
+
Result,
|
|
19
|
+
Member,
|
|
20
|
+
UnverifiedAuthorError,
|
|
21
|
+
resultError,
|
|
22
|
+
resultOk,
|
|
23
|
+
InvalidNameError,
|
|
24
|
+
ProtonDriveTelemetry,
|
|
25
|
+
MetricVolumeType,
|
|
26
|
+
} from '../../interface';
|
|
6
27
|
import { validateNodeName } from '../nodes/validations';
|
|
7
|
-
import { getErrorMessage, getVerificationMessage } from
|
|
8
|
-
import { EncryptedShare } from
|
|
9
|
-
import {
|
|
28
|
+
import { getErrorMessage, getVerificationMessage } from '../errors';
|
|
29
|
+
import { EncryptedShare } from '../shares';
|
|
30
|
+
import {
|
|
31
|
+
EncryptedInvitation,
|
|
32
|
+
EncryptedInvitationWithNode,
|
|
33
|
+
EncryptedExternalInvitation,
|
|
34
|
+
EncryptedMember,
|
|
35
|
+
EncryptedPublicLink,
|
|
36
|
+
PublicLinkWithCreatorEmail,
|
|
37
|
+
EncryptedBookmark,
|
|
38
|
+
SharesService,
|
|
39
|
+
} from './interface';
|
|
10
40
|
|
|
11
41
|
// Version 2 of bcrypt with 2**10 rounds.
|
|
12
42
|
// https://en.wikipedia.org/wiki/Bcrypt#Description
|
|
@@ -26,7 +56,7 @@ enum PublicLinkFlags {
|
|
|
26
56
|
|
|
27
57
|
/**
|
|
28
58
|
* Provides crypto operations for sharing.
|
|
29
|
-
*
|
|
59
|
+
*
|
|
30
60
|
* The sharing crypto service is responsible for encrypting and decrypting
|
|
31
61
|
* shares, invitations, etc.
|
|
32
62
|
*/
|
|
@@ -45,31 +75,31 @@ export class SharingCryptoService {
|
|
|
45
75
|
|
|
46
76
|
/**
|
|
47
77
|
* Generates a share key for a standard share used for sharing with other users.
|
|
48
|
-
*
|
|
78
|
+
*
|
|
49
79
|
* Standard share, in contrast to a root share, is encrypted with node key and
|
|
50
80
|
* can be managed by any admin.
|
|
51
81
|
*/
|
|
52
82
|
async generateShareKeys(
|
|
53
83
|
nodeKeys: {
|
|
54
|
-
key: PrivateKey
|
|
55
|
-
passphraseSessionKey: SessionKey
|
|
56
|
-
nameSessionKey: SessionKey
|
|
84
|
+
key: PrivateKey;
|
|
85
|
+
passphraseSessionKey: SessionKey;
|
|
86
|
+
nameSessionKey: SessionKey;
|
|
57
87
|
},
|
|
58
88
|
addressKey: PrivateKey,
|
|
59
89
|
): Promise<{
|
|
60
90
|
shareKey: {
|
|
61
91
|
encrypted: {
|
|
62
|
-
armoredKey: string
|
|
63
|
-
armoredPassphrase: string
|
|
64
|
-
armoredPassphraseSignature: string
|
|
65
|
-
}
|
|
92
|
+
armoredKey: string;
|
|
93
|
+
armoredPassphrase: string;
|
|
94
|
+
armoredPassphraseSignature: string;
|
|
95
|
+
};
|
|
66
96
|
decrypted: {
|
|
67
|
-
key: PrivateKey
|
|
68
|
-
passphraseSessionKey: SessionKey
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
base64PpassphraseKeyPacket: string
|
|
72
|
-
base64NameKeyPacket: string
|
|
97
|
+
key: PrivateKey;
|
|
98
|
+
passphraseSessionKey: SessionKey;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
base64PpassphraseKeyPacket: string;
|
|
102
|
+
base64NameKeyPacket: string;
|
|
73
103
|
}> {
|
|
74
104
|
const shareKey = await this.driveCrypto.generateKey([nodeKeys.key, addressKey], addressKey);
|
|
75
105
|
|
|
@@ -87,21 +117,24 @@ export class SharingCryptoService {
|
|
|
87
117
|
base64PpassphraseKeyPacket,
|
|
88
118
|
base64NameKeyPacket,
|
|
89
119
|
};
|
|
90
|
-
}
|
|
120
|
+
}
|
|
91
121
|
|
|
92
122
|
/**
|
|
93
123
|
* Decrypts a share using the node key.
|
|
94
|
-
*
|
|
124
|
+
*
|
|
95
125
|
* The share is encrypted with the node key and can be managed by any admin.
|
|
96
126
|
*
|
|
97
127
|
* Old shares are encrypted with address key only and thus available only
|
|
98
128
|
* to owners. `decryptShare` automatically tries to decrypt the share with
|
|
99
129
|
* address keys as fallback if available.
|
|
100
130
|
*/
|
|
101
|
-
async decryptShare(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
131
|
+
async decryptShare(
|
|
132
|
+
share: EncryptedShare,
|
|
133
|
+
nodeKey: PrivateKey,
|
|
134
|
+
): Promise<{
|
|
135
|
+
author: Author;
|
|
136
|
+
key: PrivateKey;
|
|
137
|
+
passphraseSessionKey: SessionKey;
|
|
105
138
|
}> {
|
|
106
139
|
// All standard shares should be encrypted with node key.
|
|
107
140
|
// Using node key is essential so any admin can manage the share.
|
|
@@ -121,25 +154,26 @@ export class SharingCryptoService {
|
|
|
121
154
|
share.encryptedCrypto.armoredPassphraseSignature,
|
|
122
155
|
decryptionKeys,
|
|
123
156
|
addressPublicKeys,
|
|
124
|
-
)
|
|
157
|
+
);
|
|
125
158
|
|
|
126
|
-
const author: Result<string, UnverifiedAuthorError> =
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
159
|
+
const author: Result<string, UnverifiedAuthorError> =
|
|
160
|
+
verified === VERIFICATION_STATUS.SIGNED_AND_VALID
|
|
161
|
+
? resultOk(share.creatorEmail)
|
|
162
|
+
: resultError({
|
|
163
|
+
claimedAuthor: share.creatorEmail,
|
|
164
|
+
error: getVerificationMessage(verified),
|
|
165
|
+
});
|
|
132
166
|
|
|
133
167
|
return {
|
|
134
168
|
author,
|
|
135
169
|
key,
|
|
136
170
|
passphraseSessionKey,
|
|
137
|
-
}
|
|
171
|
+
};
|
|
138
172
|
}
|
|
139
173
|
|
|
140
174
|
/**
|
|
141
175
|
* Encrypts an invitation for sharing a node with another user.
|
|
142
|
-
*
|
|
176
|
+
*
|
|
143
177
|
* `inviteeEmail` is used to load public key of the invitee and used to
|
|
144
178
|
* encrypt share's session key. `inviterKey` is used to sign the invitation.
|
|
145
179
|
*/
|
|
@@ -148,18 +182,20 @@ export class SharingCryptoService {
|
|
|
148
182
|
inviterKey: PrivateKey,
|
|
149
183
|
inviteeEmail: string,
|
|
150
184
|
): Promise<{
|
|
151
|
-
base64KeyPacket: string
|
|
152
|
-
base64KeyPacketSignature: string
|
|
185
|
+
base64KeyPacket: string;
|
|
186
|
+
base64KeyPacketSignature: string;
|
|
153
187
|
}> {
|
|
154
188
|
const inviteePublicKeys = await this.account.getPublicKeys(inviteeEmail);
|
|
155
|
-
const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey)
|
|
189
|
+
const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey);
|
|
156
190
|
return result;
|
|
157
|
-
}
|
|
191
|
+
}
|
|
158
192
|
|
|
159
193
|
/**
|
|
160
194
|
* Decrypts and verifies an invitation and node's name.
|
|
161
195
|
*/
|
|
162
|
-
async decryptInvitationWithNode(
|
|
196
|
+
async decryptInvitationWithNode(
|
|
197
|
+
encryptedInvitation: EncryptedInvitationWithNode,
|
|
198
|
+
): Promise<ProtonInvitationWithNode> {
|
|
163
199
|
const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
|
|
164
200
|
const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
|
|
165
201
|
|
|
@@ -171,11 +207,7 @@ export class SharingCryptoService {
|
|
|
171
207
|
|
|
172
208
|
let nodeName: Result<string, Error>;
|
|
173
209
|
try {
|
|
174
|
-
const result = await this.driveCrypto.decryptNodeName(
|
|
175
|
-
encryptedInvitation.node.encryptedName,
|
|
176
|
-
shareKey,
|
|
177
|
-
[],
|
|
178
|
-
);
|
|
210
|
+
const result = await this.driveCrypto.decryptNodeName(encryptedInvitation.node.encryptedName, shareKey, []);
|
|
179
211
|
nodeName = resultOk(result.name);
|
|
180
212
|
} catch (error: unknown) {
|
|
181
213
|
const message = getErrorMessage(error);
|
|
@@ -184,13 +216,14 @@ export class SharingCryptoService {
|
|
|
184
216
|
}
|
|
185
217
|
|
|
186
218
|
return {
|
|
187
|
-
...await this.decryptInvitation(encryptedInvitation),
|
|
219
|
+
...(await this.decryptInvitation(encryptedInvitation)),
|
|
188
220
|
node: {
|
|
221
|
+
uid: encryptedInvitation.node.uid,
|
|
189
222
|
name: nodeName,
|
|
190
223
|
type: encryptedInvitation.node.type,
|
|
191
224
|
mediaType: encryptedInvitation.node.mediaType,
|
|
192
225
|
},
|
|
193
|
-
}
|
|
226
|
+
};
|
|
194
227
|
}
|
|
195
228
|
|
|
196
229
|
/**
|
|
@@ -213,22 +246,19 @@ export class SharingCryptoService {
|
|
|
213
246
|
* Accepts an invitation by signing the session key by invitee.
|
|
214
247
|
*/
|
|
215
248
|
async acceptInvitation(encryptedInvitation: EncryptedInvitationWithNode): Promise<{
|
|
216
|
-
base64SessionKeySignature: string
|
|
249
|
+
base64SessionKeySignature: string;
|
|
217
250
|
}> {
|
|
218
251
|
const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
|
|
219
252
|
const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
|
|
220
|
-
const result = await this.driveCrypto.acceptInvitation(
|
|
221
|
-
encryptedInvitation.base64KeyPacket,
|
|
222
|
-
inviteeKey,
|
|
223
|
-
);
|
|
253
|
+
const result = await this.driveCrypto.acceptInvitation(encryptedInvitation.base64KeyPacket, inviteeKey);
|
|
224
254
|
return result;
|
|
225
255
|
}
|
|
226
256
|
|
|
227
257
|
/**
|
|
228
258
|
* Encrypts an external invitation for sharing a node with another user.
|
|
229
|
-
*
|
|
259
|
+
*
|
|
230
260
|
* `inviteeEmail` is used to sign the invitation with `inviterKey`.
|
|
231
|
-
*
|
|
261
|
+
*
|
|
232
262
|
* External invitations are used to share nodes with users who are not
|
|
233
263
|
* registered with Proton Drive. The external invitation then requires
|
|
234
264
|
* the invitee to sign up to create key. Then it can be followed by
|
|
@@ -239,7 +269,7 @@ export class SharingCryptoService {
|
|
|
239
269
|
inviterKey: PrivateKey,
|
|
240
270
|
inviteeEmail: string,
|
|
241
271
|
): Promise<{
|
|
242
|
-
base64ExternalInvitationSignature: string
|
|
272
|
+
base64ExternalInvitationSignature: string;
|
|
243
273
|
}> {
|
|
244
274
|
const result = await this.driveCrypto.encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail);
|
|
245
275
|
return result;
|
|
@@ -278,19 +308,30 @@ export class SharingCryptoService {
|
|
|
278
308
|
};
|
|
279
309
|
}
|
|
280
310
|
|
|
281
|
-
async encryptPublicLink(
|
|
311
|
+
async encryptPublicLink(
|
|
312
|
+
creatorEmail: string,
|
|
313
|
+
shareSessionKey: SessionKey,
|
|
314
|
+
password: string,
|
|
315
|
+
): Promise<{
|
|
282
316
|
crypto: {
|
|
283
|
-
base64SharePasswordSalt: string
|
|
284
|
-
base64SharePassphraseKeyPacket: string
|
|
285
|
-
armoredPassword: string
|
|
286
|
-
}
|
|
287
|
-
srp: SRPVerifier
|
|
317
|
+
base64SharePasswordSalt: string;
|
|
318
|
+
base64SharePassphraseKeyPacket: string;
|
|
319
|
+
armoredPassword: string;
|
|
320
|
+
};
|
|
321
|
+
srp: SRPVerifier;
|
|
288
322
|
}> {
|
|
289
323
|
const address = await this.account.getOwnAddress(creatorEmail);
|
|
290
324
|
const addressKey = address.keys[address.primaryKeyIndex].key;
|
|
291
325
|
|
|
292
|
-
const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } =
|
|
293
|
-
|
|
326
|
+
const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } =
|
|
327
|
+
await this.computeKeySaltAndPassphrase(password);
|
|
328
|
+
const { base64SharePassphraseKeyPacket, armoredPassword, srp } =
|
|
329
|
+
await this.driveCrypto.encryptPublicLinkPasswordAndSessionKey(
|
|
330
|
+
password,
|
|
331
|
+
addressKey,
|
|
332
|
+
bcryptPassphrase,
|
|
333
|
+
shareSessionKey,
|
|
334
|
+
);
|
|
294
335
|
|
|
295
336
|
return {
|
|
296
337
|
crypto: {
|
|
@@ -299,7 +340,7 @@ export class SharingCryptoService {
|
|
|
299
340
|
armoredPassword,
|
|
300
341
|
},
|
|
301
342
|
srp,
|
|
302
|
-
}
|
|
343
|
+
};
|
|
303
344
|
}
|
|
304
345
|
|
|
305
346
|
async generatePublicLinkPassword(): Promise<string> {
|
|
@@ -327,17 +368,14 @@ export class SharingCryptoService {
|
|
|
327
368
|
return {
|
|
328
369
|
base64Salt: uint8ArrayToBase64String(salt),
|
|
329
370
|
bcryptPassphrase,
|
|
330
|
-
}
|
|
331
|
-
}
|
|
371
|
+
};
|
|
372
|
+
}
|
|
332
373
|
|
|
333
374
|
async decryptPublicLink(encryptedPublicLink: EncryptedPublicLink): Promise<PublicLinkWithCreatorEmail> {
|
|
334
375
|
const address = await this.account.getOwnAddress(encryptedPublicLink.creatorEmail);
|
|
335
376
|
const addressKeys = address.keys.map(({ key }) => key);
|
|
336
377
|
|
|
337
|
-
const { password, customPassword } = await this.decryptShareUrlPassword(
|
|
338
|
-
encryptedPublicLink,
|
|
339
|
-
addressKeys,
|
|
340
|
-
);
|
|
378
|
+
const { password, customPassword } = await this.decryptShareUrlPassword(encryptedPublicLink, addressKeys);
|
|
341
379
|
|
|
342
380
|
return {
|
|
343
381
|
uid: encryptedPublicLink.uid,
|
|
@@ -347,16 +385,16 @@ export class SharingCryptoService {
|
|
|
347
385
|
url: `${encryptedPublicLink.publicUrl}#${password}`,
|
|
348
386
|
customPassword,
|
|
349
387
|
creatorEmail: encryptedPublicLink.creatorEmail,
|
|
350
|
-
numberOfInitializedDownloads: encryptedPublicLink.numberOfInitializedDownloads
|
|
351
|
-
}
|
|
388
|
+
numberOfInitializedDownloads: encryptedPublicLink.numberOfInitializedDownloads,
|
|
389
|
+
};
|
|
352
390
|
}
|
|
353
391
|
|
|
354
392
|
private async decryptShareUrlPassword(
|
|
355
393
|
encryptedPublicLink: Pick<EncryptedPublicLink, 'armoredUrlPassword' | 'flags'>,
|
|
356
394
|
addressKeys: PrivateKey[],
|
|
357
395
|
): Promise<{
|
|
358
|
-
password: string
|
|
359
|
-
customPassword?: string
|
|
396
|
+
password: string;
|
|
397
|
+
customPassword?: string;
|
|
360
398
|
}> {
|
|
361
399
|
const password = await this.driveCrypto.decryptShareUrlPassword(
|
|
362
400
|
encryptedPublicLink.armoredUrlPassword,
|
|
@@ -370,21 +408,21 @@ export class SharingCryptoService {
|
|
|
370
408
|
case PublicLinkFlags.CustomPassword:
|
|
371
409
|
return {
|
|
372
410
|
password,
|
|
373
|
-
}
|
|
411
|
+
};
|
|
374
412
|
case PublicLinkFlags.GeneratedPasswordIncluded:
|
|
375
413
|
case PublicLinkFlags.GeneratedPasswordWithCustomPassword:
|
|
376
414
|
return {
|
|
377
415
|
password: password.substring(0, PUBLIC_LINK_GENERATED_PASSWORD_LENGTH),
|
|
378
416
|
customPassword: password.substring(PUBLIC_LINK_GENERATED_PASSWORD_LENGTH) || undefined,
|
|
379
|
-
}
|
|
417
|
+
};
|
|
380
418
|
default:
|
|
381
419
|
throw new Error(`Unsupported public link with flags: ${encryptedPublicLink.flags}`);
|
|
382
420
|
}
|
|
383
421
|
}
|
|
384
422
|
|
|
385
423
|
async decryptBookmark(encryptedBookmark: EncryptedBookmark): Promise<{
|
|
386
|
-
url: Result<string, Error
|
|
387
|
-
nodeName: Result<string, Error | InvalidNameError
|
|
424
|
+
url: Result<string, Error>;
|
|
425
|
+
nodeName: Result<string, Error | InvalidNameError>;
|
|
388
426
|
}> {
|
|
389
427
|
// TODO: Signatures are not checked and not specified in the interface.
|
|
390
428
|
// In the future, we will need to add authorship verification.
|
|
@@ -478,14 +516,13 @@ export class SharingCryptoService {
|
|
|
478
516
|
}
|
|
479
517
|
}
|
|
480
518
|
|
|
481
|
-
private async decryptBookmarkName(
|
|
519
|
+
private async decryptBookmarkName(
|
|
520
|
+
encryptedBookmark: EncryptedBookmark,
|
|
521
|
+
shareKey: PrivateKey,
|
|
522
|
+
): Promise<Result<string, Error | InvalidNameError>> {
|
|
482
523
|
try {
|
|
483
524
|
// Use the share key to decrypt the node name of the bookmark.
|
|
484
|
-
const { name } = await this.driveCrypto.decryptNodeName(
|
|
485
|
-
encryptedBookmark.node.encryptedName,
|
|
486
|
-
shareKey,
|
|
487
|
-
[],
|
|
488
|
-
);
|
|
525
|
+
const { name } = await this.driveCrypto.decryptNodeName(encryptedBookmark.node.encryptedName, shareKey, []);
|
|
489
526
|
|
|
490
527
|
try {
|
|
491
528
|
validateNodeName(name);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { getMockLogger } from
|
|
2
|
-
import { DriveEvent, DriveEventType } from
|
|
3
|
-
import { SharingCache } from
|
|
4
|
-
import { SharingAccess } from
|
|
5
|
-
import { SharingEventHandler } from
|
|
6
|
-
import { SharesManager } from
|
|
1
|
+
import { getMockLogger } from '../../tests/logger';
|
|
2
|
+
import { DriveEvent, DriveEventType } from '../events';
|
|
3
|
+
import { SharingCache } from './cache';
|
|
4
|
+
import { SharingAccess } from './sharingAccess';
|
|
5
|
+
import { SharingEventHandler } from './events';
|
|
6
|
+
import { SharesManager } from '../shares/manager';
|
|
7
7
|
|
|
8
8
|
// FIXME: test tree_refresh and tree_remove
|
|
9
9
|
|
|
10
|
-
describe(
|
|
10
|
+
describe('handleSharedByMeNodes', () => {
|
|
11
11
|
let cache: SharingCache;
|
|
12
12
|
let sharingEventHandler: SharingEventHandler;
|
|
13
13
|
let sharesManager: SharesManager;
|
|
@@ -20,7 +20,8 @@ describe("handleSharedByMeNodes", () => {
|
|
|
20
20
|
addSharedByMeNodeUid: jest.fn(),
|
|
21
21
|
removeSharedByMeNodeUid: jest.fn(),
|
|
22
22
|
setSharedWithMeNodeUids: jest.fn(),
|
|
23
|
-
getSharedByMeNodeUids: jest.fn().mockResolvedValue([
|
|
23
|
+
getSharedByMeNodeUids: jest.fn().mockResolvedValue(['cachedNodeUid']),
|
|
24
|
+
hasSharedByMeNodeUidsLoaded: jest.fn().mockResolvedValue(true),
|
|
24
25
|
};
|
|
25
26
|
sharesManager = {
|
|
26
27
|
isOwnVolume: jest.fn(async (volumeId: string) => volumeId === 'MyVolume1'),
|
|
@@ -28,102 +29,112 @@ describe("handleSharedByMeNodes", () => {
|
|
|
28
29
|
sharingEventHandler = new SharingEventHandler(getMockLogger(), cache, sharesManager);
|
|
29
30
|
});
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
32
|
+
it('should add if new own shared node is created', async () => {
|
|
33
|
+
const event: DriveEvent = {
|
|
34
|
+
eventId: '1',
|
|
35
|
+
type: DriveEventType.NodeCreated,
|
|
36
|
+
nodeUid: 'newNodeUid',
|
|
37
|
+
parentNodeUid: 'parentUid',
|
|
38
|
+
isTrashed: false,
|
|
39
|
+
isShared: true,
|
|
40
|
+
treeEventScopeId: 'MyVolume1',
|
|
41
|
+
};
|
|
42
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
43
|
+
expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith('newNodeUid');
|
|
44
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('should not add if new shared node is not own', async () => {
|
|
48
|
+
const event: DriveEvent = {
|
|
49
|
+
eventId: '1',
|
|
50
|
+
type: DriveEventType.NodeCreated,
|
|
51
|
+
nodeUid: 'newNodeUid',
|
|
52
|
+
parentNodeUid: 'parentUid',
|
|
53
|
+
isTrashed: false,
|
|
54
|
+
isShared: true,
|
|
55
|
+
treeEventScopeId: 'NotOwnVolume',
|
|
56
|
+
};
|
|
57
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
58
|
+
expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
|
|
59
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should not add if new own node is not shared', async () => {
|
|
63
|
+
const event: DriveEvent = {
|
|
64
|
+
type: DriveEventType.NodeCreated,
|
|
65
|
+
nodeUid: 'newNodeUid',
|
|
66
|
+
parentNodeUid: 'parentUid',
|
|
67
|
+
isTrashed: false,
|
|
68
|
+
isShared: false,
|
|
69
|
+
eventId: '1',
|
|
70
|
+
treeEventScopeId: 'MyVolume1',
|
|
71
|
+
};
|
|
72
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
73
|
+
expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
|
|
74
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('should add if own node is updated and shared', async () => {
|
|
78
|
+
const event: DriveEvent = {
|
|
79
|
+
type: DriveEventType.NodeUpdated,
|
|
80
|
+
nodeUid: 'cachedNodeUid',
|
|
81
|
+
parentNodeUid: 'parentUid',
|
|
82
|
+
isTrashed: false,
|
|
83
|
+
isShared: true,
|
|
84
|
+
eventId: '1',
|
|
85
|
+
treeEventScopeId: 'MyVolume1',
|
|
86
|
+
};
|
|
87
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
88
|
+
expect(cache.addSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
|
|
89
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should remove if shared node is un-shared', async () => {
|
|
93
|
+
const event: DriveEvent = {
|
|
94
|
+
type: DriveEventType.NodeUpdated,
|
|
95
|
+
nodeUid: 'cachedNodeUid',
|
|
96
|
+
parentNodeUid: 'parentUid',
|
|
97
|
+
isTrashed: false,
|
|
98
|
+
isShared: false,
|
|
99
|
+
eventId: '1',
|
|
100
|
+
treeEventScopeId: 'MyVolume1',
|
|
101
|
+
};
|
|
102
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
103
|
+
expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
|
|
104
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('should remove if shared node is deleted', async () => {
|
|
108
|
+
const event: DriveEvent = {
|
|
109
|
+
type: DriveEventType.NodeDeleted,
|
|
110
|
+
nodeUid: 'cachedNodeUid',
|
|
111
|
+
parentNodeUid: 'parentUid',
|
|
112
|
+
eventId: '1',
|
|
113
|
+
treeEventScopeId: 'MyVolume1',
|
|
114
|
+
};
|
|
115
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
116
|
+
expect(cache.removeSharedByMeNodeUid).toHaveBeenCalledWith('cachedNodeUid');
|
|
117
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('should not update cache if shared by me is not loaded', async () => {
|
|
121
|
+
cache.hasSharedByMeNodeUidsLoaded = jest.fn().mockResolvedValue(false);
|
|
122
|
+
const event: DriveEvent = {
|
|
123
|
+
eventId: '1',
|
|
124
|
+
type: DriveEventType.NodeCreated,
|
|
125
|
+
nodeUid: 'newNodeUid',
|
|
126
|
+
parentNodeUid: 'parentUid',
|
|
127
|
+
isTrashed: false,
|
|
128
|
+
isShared: true,
|
|
129
|
+
treeEventScopeId: 'MyVolume1',
|
|
130
|
+
};
|
|
131
|
+
await sharingEventHandler.handleDriveEvent(event);
|
|
132
|
+
expect(cache.addSharedByMeNodeUid).not.toHaveBeenCalled();
|
|
133
|
+
expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
|
|
123
134
|
});
|
|
124
135
|
});
|
|
125
136
|
|
|
126
|
-
describe(
|
|
137
|
+
describe('handleSharedWithMeNodes', () => {
|
|
127
138
|
let cache: SharingCache;
|
|
128
139
|
let sharingAccess: SharingAccess;
|
|
129
140
|
let sharesManager: SharesManager;
|
|
@@ -145,7 +156,7 @@ describe("handleSharedWithMeNodes", () => {
|
|
|
145
156
|
} as any;
|
|
146
157
|
});
|
|
147
158
|
|
|
148
|
-
it(
|
|
159
|
+
it('should update cache', async () => {
|
|
149
160
|
const event: DriveEvent = {
|
|
150
161
|
type: DriveEventType.SharedWithMeUpdated,
|
|
151
162
|
eventId: 'event1',
|