@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,20 +1,24 @@
|
|
|
1
|
-
import { MemoryCache } from
|
|
2
|
-
import { NodeType, MemberRole, RevisionState, resultOk, Result } from
|
|
3
|
-
import { getMockLogger } from
|
|
4
|
-
import { CACHE_TAG_KEYS, NodesCache } from
|
|
5
|
-
import { DecryptedNode, DecryptedRevision } from
|
|
6
|
-
|
|
7
|
-
function generateNode(
|
|
1
|
+
import { MemoryCache } from '../../cache';
|
|
2
|
+
import { NodeType, MemberRole, RevisionState, resultOk, Result } from '../../interface';
|
|
3
|
+
import { getMockLogger } from '../../tests/logger';
|
|
4
|
+
import { CACHE_TAG_KEYS, NodesCache } from './cache';
|
|
5
|
+
import { DecryptedNode, DecryptedRevision } from './interface';
|
|
6
|
+
|
|
7
|
+
function generateNode(
|
|
8
|
+
uid: string,
|
|
9
|
+
parentUid = 'root',
|
|
10
|
+
params: Partial<DecryptedNode> & { volumeId?: string } = {},
|
|
11
|
+
): DecryptedNode {
|
|
8
12
|
return {
|
|
9
|
-
uid: `${params.volumeId ||
|
|
10
|
-
parentUid: `${params.volumeId ||
|
|
13
|
+
uid: `${params.volumeId || 'volumeId'}~:${uid}`,
|
|
14
|
+
parentUid: `${params.volumeId || 'volumeId'}~:${parentUid}`,
|
|
11
15
|
directMemberRole: MemberRole.Admin,
|
|
12
16
|
type: NodeType.File,
|
|
13
|
-
mediaType:
|
|
17
|
+
mediaType: 'text',
|
|
14
18
|
isShared: false,
|
|
15
19
|
creationTime: new Date(),
|
|
16
20
|
trashTime: undefined,
|
|
17
|
-
volumeId:
|
|
21
|
+
volumeId: 'volumeId',
|
|
18
22
|
isStale: false,
|
|
19
23
|
activeRevision: undefined,
|
|
20
24
|
folder: undefined,
|
|
@@ -108,7 +112,7 @@ describe('nodesCache', () => {
|
|
|
108
112
|
creationTime: new Date('2021-01-01'),
|
|
109
113
|
storageSize: 100,
|
|
110
114
|
contentAuthor: resultOk('test@test.com'),
|
|
111
|
-
claimedModificationTime: new Date('2021-02-01')
|
|
115
|
+
claimedModificationTime: new Date('2021-02-01'),
|
|
112
116
|
});
|
|
113
117
|
const node = generateNode('node1', '', { activeRevision });
|
|
114
118
|
|
|
@@ -135,7 +139,9 @@ describe('nodesCache', () => {
|
|
|
135
139
|
await cache.getNode('badObject');
|
|
136
140
|
fail('Should have thrown an error');
|
|
137
141
|
} catch (error) {
|
|
138
|
-
expect(`${error}`).toBe(
|
|
142
|
+
expect(`${error}`).toBe(
|
|
143
|
+
'Error: Failed to deserialise node: Unexpected token \'a\', \"aaa\" is not valid JSON',
|
|
144
|
+
);
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
try {
|
|
@@ -153,7 +159,7 @@ describe('nodesCache', () => {
|
|
|
153
159
|
cache,
|
|
154
160
|
['node1', 'node1a', 'node1b', 'node1c', 'node1c-alpha', 'node1c-beta', 'node2', 'node2a', 'node2b'],
|
|
155
161
|
['node3'],
|
|
156
|
-
)
|
|
162
|
+
);
|
|
157
163
|
});
|
|
158
164
|
|
|
159
165
|
it('should remove node and its children', async () => {
|
|
@@ -162,8 +168,8 @@ describe('nodesCache', () => {
|
|
|
162
168
|
await verifyNodesCache(
|
|
163
169
|
cache,
|
|
164
170
|
['node1', 'node1a', 'node1b', 'node1c', 'node1c-alpha', 'node1c-beta', 'node3'],
|
|
165
|
-
['node2', 'node2a', 'node2b'
|
|
166
|
-
)
|
|
171
|
+
['node2', 'node2a', 'node2b'],
|
|
172
|
+
);
|
|
167
173
|
});
|
|
168
174
|
|
|
169
175
|
it('should remove node and its children recursively', async () => {
|
|
@@ -198,9 +204,21 @@ describe('nodesCache', () => {
|
|
|
198
204
|
expect(nodeUids).toStrictEqual(['volumeId~:node1', 'volumeId~:node2', 'volumeId~:node3']);
|
|
199
205
|
await verifyNodesCache(
|
|
200
206
|
cache,
|
|
201
|
-
[
|
|
207
|
+
[
|
|
208
|
+
'root',
|
|
209
|
+
'node1',
|
|
210
|
+
'node1a',
|
|
211
|
+
'node1b',
|
|
212
|
+
'node1c',
|
|
213
|
+
'node1c-alpha',
|
|
214
|
+
'node1c-beta',
|
|
215
|
+
'node2',
|
|
216
|
+
'node2a',
|
|
217
|
+
'node2b',
|
|
218
|
+
'node3',
|
|
219
|
+
],
|
|
202
220
|
['badObject'],
|
|
203
|
-
)
|
|
221
|
+
);
|
|
204
222
|
});
|
|
205
223
|
|
|
206
224
|
it('should iterate trashed nodes', async () => {
|
|
@@ -224,8 +242,18 @@ describe('nodesCache', () => {
|
|
|
224
242
|
await generateTreeStructure(cache);
|
|
225
243
|
await cache.setNodesStaleFromVolume('volumeId');
|
|
226
244
|
|
|
227
|
-
const staleNodeUids = [
|
|
228
|
-
|
|
245
|
+
const staleNodeUids = [
|
|
246
|
+
'node1',
|
|
247
|
+
'node1a',
|
|
248
|
+
'node1b',
|
|
249
|
+
'node1c',
|
|
250
|
+
'node1c-alpha',
|
|
251
|
+
'node1c-beta',
|
|
252
|
+
'node2',
|
|
253
|
+
'node2a',
|
|
254
|
+
'node2b',
|
|
255
|
+
'node3',
|
|
256
|
+
].map((uid) => `volumeId~:${uid}`);
|
|
229
257
|
const result = await Array.fromAsync(cache.iterateNodes([...staleNodeUids, 'volume2~:root-otherVolume']));
|
|
230
258
|
const got = result.map((item) => ({ uid: item.uid, isStale: item.ok ? item.node.isStale : item.error }));
|
|
231
259
|
const expected = [
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import { EntityResult } from
|
|
2
|
-
import { ProtonDriveEntitiesCache, Logger, resultOk, Result } from
|
|
3
|
-
import { splitNodeUid } from
|
|
4
|
-
import { DecryptedNode, DecryptedRevision } from
|
|
1
|
+
import { EntityResult } from '../../cache';
|
|
2
|
+
import { ProtonDriveEntitiesCache, Logger, resultOk, Result } from '../../interface';
|
|
3
|
+
import { splitNodeUid } from '../uids';
|
|
4
|
+
import { DecryptedNode, DecryptedRevision } from './interface';
|
|
5
5
|
|
|
6
6
|
export enum CACHE_TAG_KEYS {
|
|
7
7
|
ParentUid = 'nodeParentUid',
|
|
8
8
|
Trashed = 'nodeTrashed',
|
|
9
|
+
Roots = 'nodeRoot',
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
type DecryptedNodeResult =
|
|
12
|
-
{uid: string, ok: true, node: DecryptedNode} |
|
|
13
|
-
{uid: string, ok: false, error: string}
|
|
14
|
-
);
|
|
12
|
+
type DecryptedNodeResult = { uid: string; ok: true; node: DecryptedNode } | { uid: string; ok: false; error: string };
|
|
15
13
|
|
|
16
14
|
/**
|
|
17
15
|
* Provides caching for nodes metadata.
|
|
18
|
-
*
|
|
16
|
+
*
|
|
19
17
|
* The cache is responsible for serialising and deserialising node metadata,
|
|
20
18
|
* recording parent-child relationships, and recursively removing nodes.
|
|
21
|
-
*
|
|
19
|
+
*
|
|
22
20
|
* The cache of node metadata should not contain any crypto material.
|
|
23
21
|
*/
|
|
24
22
|
export class NodesCache {
|
|
25
|
-
constructor(
|
|
23
|
+
constructor(
|
|
24
|
+
private logger: Logger,
|
|
25
|
+
private driveCache: ProtonDriveEntitiesCache,
|
|
26
|
+
) {
|
|
26
27
|
this.logger = logger;
|
|
27
28
|
this.driveCache = driveCache;
|
|
28
29
|
}
|
|
@@ -34,10 +35,12 @@ export class NodesCache {
|
|
|
34
35
|
|
|
35
36
|
const tags = [`volume:${volumeId}`];
|
|
36
37
|
if (node.parentUid) {
|
|
37
|
-
tags.push(`${CACHE_TAG_KEYS.ParentUid}:${node.parentUid}`)
|
|
38
|
+
tags.push(`${CACHE_TAG_KEYS.ParentUid}:${node.parentUid}`);
|
|
39
|
+
} else {
|
|
40
|
+
tags.push(`${CACHE_TAG_KEYS.Roots}:${volumeId}`);
|
|
38
41
|
}
|
|
39
42
|
if (node.trashTime) {
|
|
40
|
-
tags.push(`${CACHE_TAG_KEYS.Trashed}`)
|
|
43
|
+
tags.push(`${CACHE_TAG_KEYS.Trashed}`);
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
await this.driveCache.setEntity(key, nodeData, tags);
|
|
@@ -50,7 +53,7 @@ export class NodesCache {
|
|
|
50
53
|
return deserialiseNode(nodeData);
|
|
51
54
|
} catch (error: unknown) {
|
|
52
55
|
await this.removeCorruptedNode({ nodeUid }, error);
|
|
53
|
-
throw new Error(`Failed to deserialise node: ${error instanceof Error ? error.message : error}`)
|
|
56
|
+
throw new Error(`Failed to deserialise node: ${error instanceof Error ? error.message : error}`);
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
|
|
@@ -74,13 +77,27 @@ export class NodesCache {
|
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Remove all entries associated with a volume.
|
|
82
|
+
*
|
|
83
|
+
* This is needed when a user looses access to a volume.
|
|
84
|
+
*/
|
|
85
|
+
async removeVolume(volumeId: string): Promise<void> {
|
|
86
|
+
for await (const result of this.iterateRootNodeUids(volumeId)) {
|
|
87
|
+
await this.removeNodes([result.key]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
77
91
|
/**
|
|
78
92
|
* Remove corrupted node never throws, but it logs so we can know
|
|
79
93
|
* about issues and fix them. It is crucial to remove corrupted
|
|
80
94
|
* nodes and rather let SDK re-fetch them than to auotmatically
|
|
81
95
|
* fix issues and do not bother user with it.
|
|
82
96
|
*/
|
|
83
|
-
private async removeCorruptedNode(
|
|
97
|
+
private async removeCorruptedNode(
|
|
98
|
+
{ nodeUid, cacheUid }: { nodeUid?: string; cacheUid?: string },
|
|
99
|
+
corruptionError: unknown,
|
|
100
|
+
): Promise<void> {
|
|
84
101
|
this.logger.error(`Removing corrupted nodes from the cache`, corruptionError);
|
|
85
102
|
try {
|
|
86
103
|
if (nodeUid) {
|
|
@@ -92,7 +109,9 @@ export class NodesCache {
|
|
|
92
109
|
// The node will not be returned, thus SDK will re-fetch
|
|
93
110
|
// and re-cache it. Setting it again should then fix the
|
|
94
111
|
// problem.
|
|
95
|
-
this.logger.warn(
|
|
112
|
+
this.logger.warn(
|
|
113
|
+
`Failed to remove corrupted node from the cache: ${removingError instanceof Error ? removingError.message : removingError}`,
|
|
114
|
+
);
|
|
96
115
|
}
|
|
97
116
|
}
|
|
98
117
|
|
|
@@ -115,7 +134,9 @@ export class NodesCache {
|
|
|
115
134
|
|
|
116
135
|
private async getRecursiveChildrenCacheUids(parentNodeUid: string): Promise<string[]> {
|
|
117
136
|
const cacheUids = [];
|
|
118
|
-
for await (const result of this.driveCache.iterateEntitiesByTag(
|
|
137
|
+
for await (const result of this.driveCache.iterateEntitiesByTag(
|
|
138
|
+
`${CACHE_TAG_KEYS.ParentUid}:${parentNodeUid}`,
|
|
139
|
+
)) {
|
|
119
140
|
cacheUids.push(result.key);
|
|
120
141
|
const childrenCacheUids = await this.getRecursiveChildrenCacheUids(getNodeUid(result.key));
|
|
121
142
|
cacheUids.push(...childrenCacheUids);
|
|
@@ -134,7 +155,9 @@ export class NodesCache {
|
|
|
134
155
|
}
|
|
135
156
|
|
|
136
157
|
async *iterateChildren(parentNodeUid: string): AsyncGenerator<DecryptedNodeResult> {
|
|
137
|
-
for await (const result of this.driveCache.iterateEntitiesByTag(
|
|
158
|
+
for await (const result of this.driveCache.iterateEntitiesByTag(
|
|
159
|
+
`${CACHE_TAG_KEYS.ParentUid}:${parentNodeUid}`,
|
|
160
|
+
)) {
|
|
138
161
|
const node = await this.convertCacheResult(result);
|
|
139
162
|
if (node && (!node.ok || !node.node.trashTime)) {
|
|
140
163
|
yield node;
|
|
@@ -142,6 +165,10 @@ export class NodesCache {
|
|
|
142
165
|
}
|
|
143
166
|
}
|
|
144
167
|
|
|
168
|
+
async *iterateRootNodeUids(volumeId: string): AsyncGenerator<EntityResult<string>> {
|
|
169
|
+
yield* this.driveCache.iterateEntitiesByTag(`${CACHE_TAG_KEYS.Roots}:${volumeId}`);
|
|
170
|
+
}
|
|
171
|
+
|
|
145
172
|
async *iterateTrashedNodes(): AsyncGenerator<DecryptedNodeResult> {
|
|
146
173
|
for await (const result of this.driveCache.iterateEntitiesByTag(CACHE_TAG_KEYS.Trashed)) {
|
|
147
174
|
const node = await this.convertCacheResult(result);
|
|
@@ -160,13 +187,13 @@ export class NodesCache {
|
|
|
160
187
|
try {
|
|
161
188
|
nodeUid = getNodeUid(result.key);
|
|
162
189
|
} catch (error: unknown) {
|
|
163
|
-
await this.removeCorruptedNode({ cacheUid: result.key }, error)
|
|
190
|
+
await this.removeCorruptedNode({ cacheUid: result.key }, error);
|
|
164
191
|
return null;
|
|
165
192
|
}
|
|
166
193
|
if (result.ok) {
|
|
167
194
|
let node;
|
|
168
195
|
try {
|
|
169
|
-
node = deserialiseNode(result.value)
|
|
196
|
+
node = deserialiseNode(result.value);
|
|
170
197
|
} catch (error: unknown) {
|
|
171
198
|
await this.removeCorruptedNode({ nodeUid }, error);
|
|
172
199
|
return null;
|
|
@@ -175,7 +202,7 @@ export class NodesCache {
|
|
|
175
202
|
uid: nodeUid,
|
|
176
203
|
ok: true,
|
|
177
204
|
node,
|
|
178
|
-
}
|
|
205
|
+
};
|
|
179
206
|
} else {
|
|
180
207
|
return {
|
|
181
208
|
...result,
|
|
@@ -221,31 +248,38 @@ function serialiseNode(node: DecryptedNode) {
|
|
|
221
248
|
function deserialiseNode(nodeData: string): DecryptedNode {
|
|
222
249
|
const node = JSON.parse(nodeData);
|
|
223
250
|
if (
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
251
|
+
!node ||
|
|
252
|
+
typeof node !== 'object' ||
|
|
253
|
+
!node.uid ||
|
|
254
|
+
typeof node.uid !== 'string' ||
|
|
255
|
+
!node.directMemberRole ||
|
|
256
|
+
typeof node.directMemberRole !== 'string' ||
|
|
257
|
+
!node.type ||
|
|
258
|
+
typeof node.type !== 'string' ||
|
|
259
|
+
(typeof node.mediaType !== 'string' && node.mediaType !== undefined) ||
|
|
260
|
+
typeof node.isShared !== 'boolean' ||
|
|
261
|
+
!node.creationTime ||
|
|
262
|
+
typeof node.creationTime !== 'string' ||
|
|
263
|
+
(typeof node.trashTime !== 'string' && node.trashTime !== undefined) ||
|
|
264
|
+
(typeof node.folder !== 'object' && node.folder !== undefined) ||
|
|
265
|
+
(typeof node.folder?.claimedModificationTime !== 'string' && node.folder?.claimedModificationTime !== undefined)
|
|
266
|
+
) {
|
|
267
|
+
throw new Error(`Invalid node data: ${nodeData}`);
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
...node,
|
|
271
|
+
creationTime: new Date(node.creationTime),
|
|
272
|
+
trashTime: node.trashTime ? new Date(node.trashTime) : undefined,
|
|
273
|
+
activeRevision: node.activeRevision ? deserialiseRevision(node.activeRevision) : undefined,
|
|
274
|
+
folder: node.folder
|
|
243
275
|
? {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
276
|
+
...node.folder,
|
|
277
|
+
claimedModificationTime: node.folder.claimedModificationTime
|
|
278
|
+
? new Date(node.folder.claimedModificationTime)
|
|
279
|
+
: undefined,
|
|
280
|
+
}
|
|
247
281
|
: undefined,
|
|
248
|
-
|
|
282
|
+
};
|
|
249
283
|
}
|
|
250
284
|
|
|
251
285
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -261,7 +295,7 @@ function deserialiseRevision(revision: any): Result<DecryptedRevision, Error> {
|
|
|
261
295
|
return resultOk({
|
|
262
296
|
...revision.value,
|
|
263
297
|
creationTime: new Date(revision.value.creationTime),
|
|
264
|
-
claimedModificationTime: new Date(revision.value.claimedModificationTime)
|
|
298
|
+
claimedModificationTime: new Date(revision.value.claimedModificationTime),
|
|
265
299
|
});
|
|
266
300
|
}
|
|
267
301
|
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { PrivateKey, SessionKey } from
|
|
2
|
-
import { MemoryCache } from
|
|
3
|
-
import { CachedCryptoMaterial } from
|
|
4
|
-
import { getMockLogger } from
|
|
5
|
-
import { NodesCryptoCache } from
|
|
1
|
+
import { PrivateKey, SessionKey } from '../../crypto';
|
|
2
|
+
import { MemoryCache } from '../../cache';
|
|
3
|
+
import { CachedCryptoMaterial } from '../../interface';
|
|
4
|
+
import { getMockLogger } from '../../tests/logger';
|
|
5
|
+
import { NodesCryptoCache } from './cryptoCache';
|
|
6
6
|
|
|
7
7
|
describe('nodesCryptoCache', () => {
|
|
8
8
|
let memoryCache: MemoryCache<CachedCryptoMaterial>;
|
|
9
9
|
let cache: NodesCryptoCache;
|
|
10
10
|
|
|
11
11
|
const generatePrivateKey = (name: string) => {
|
|
12
|
-
return name as unknown as PrivateKey
|
|
13
|
-
}
|
|
12
|
+
return name as unknown as PrivateKey;
|
|
13
|
+
};
|
|
14
14
|
|
|
15
15
|
const generateSessionKey = (name: string) => {
|
|
16
|
-
return name as unknown as SessionKey
|
|
17
|
-
}
|
|
16
|
+
return name as unknown as SessionKey;
|
|
17
|
+
};
|
|
18
18
|
|
|
19
19
|
beforeEach(async () => {
|
|
20
20
|
memoryCache = new MemoryCache();
|
|
@@ -28,7 +28,12 @@ describe('nodesCryptoCache', () => {
|
|
|
28
28
|
|
|
29
29
|
it('should store and retrieve keys', async () => {
|
|
30
30
|
const nodeId = 'newNodeId';
|
|
31
|
-
const keys = {
|
|
31
|
+
const keys = {
|
|
32
|
+
passphrase: 'pass',
|
|
33
|
+
key: generatePrivateKey('privateKey'),
|
|
34
|
+
passphraseSessionKey: generateSessionKey('sessionKey'),
|
|
35
|
+
hashKey: undefined,
|
|
36
|
+
};
|
|
32
37
|
|
|
33
38
|
await cache.setNodeKeys(nodeId, keys);
|
|
34
39
|
const result = await cache.getNodeKeys(nodeId);
|
|
@@ -38,8 +43,18 @@ describe('nodesCryptoCache', () => {
|
|
|
38
43
|
|
|
39
44
|
it('should replace and retrieve new keys', async () => {
|
|
40
45
|
const nodeId = 'newNodeId';
|
|
41
|
-
const keys1 = {
|
|
42
|
-
|
|
46
|
+
const keys1 = {
|
|
47
|
+
passphrase: 'pass',
|
|
48
|
+
key: generatePrivateKey('privateKey1'),
|
|
49
|
+
passphraseSessionKey: generateSessionKey('sessionKey1'),
|
|
50
|
+
hashKey: undefined,
|
|
51
|
+
};
|
|
52
|
+
const keys2 = {
|
|
53
|
+
passphrase: 'pass',
|
|
54
|
+
key: generatePrivateKey('privateKey2'),
|
|
55
|
+
passphraseSessionKey: generateSessionKey('sessionKey2'),
|
|
56
|
+
hashKey: undefined,
|
|
57
|
+
};
|
|
43
58
|
|
|
44
59
|
await cache.setNodeKeys(nodeId, keys1);
|
|
45
60
|
await cache.setNodeKeys(nodeId, keys2);
|
|
@@ -50,7 +65,12 @@ describe('nodesCryptoCache', () => {
|
|
|
50
65
|
|
|
51
66
|
it('should remove keys', async () => {
|
|
52
67
|
const nodeId = 'newNodeId';
|
|
53
|
-
const keys = {
|
|
68
|
+
const keys = {
|
|
69
|
+
passphrase: 'pass',
|
|
70
|
+
key: generatePrivateKey('privateKey'),
|
|
71
|
+
passphraseSessionKey: generateSessionKey('sessionKey'),
|
|
72
|
+
hashKey: undefined,
|
|
73
|
+
};
|
|
54
74
|
|
|
55
75
|
await cache.setNodeKeys(nodeId, keys);
|
|
56
76
|
await cache.removeNodeKeys([nodeId]);
|
|
@@ -89,4 +109,4 @@ describe('nodesCryptoCache', () => {
|
|
|
89
109
|
expect(`${error}`).toBe('Error: Entity not found');
|
|
90
110
|
}
|
|
91
111
|
});
|
|
92
|
-
});
|
|
112
|
+
});
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import { ProtonDriveCryptoCache, Logger } from
|
|
2
|
-
import { DecryptedNodeKeys } from
|
|
1
|
+
import { ProtonDriveCryptoCache, Logger } from '../../interface';
|
|
2
|
+
import { DecryptedNodeKeys } from './interface';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Provides caching for node crypto material.
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
7
|
* The cache is responsible for serialising and deserialising node
|
|
8
8
|
* crypto material.
|
|
9
9
|
*/
|
|
10
10
|
export class NodesCryptoCache {
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
private logger: Logger,
|
|
13
|
+
private driveCache: ProtonDriveCryptoCache,
|
|
14
|
+
) {
|
|
12
15
|
this.logger = logger;
|
|
13
16
|
this.driveCache = driveCache;
|
|
14
17
|
}
|
|
@@ -26,7 +29,9 @@ export class NodesCryptoCache {
|
|
|
26
29
|
} catch (removingError: unknown) {
|
|
27
30
|
// The node keys will not be returned, thus SDK will re-fetch
|
|
28
31
|
// and re-cache it. Setting it again should then fix the problem.
|
|
29
|
-
this.logger.warn(
|
|
32
|
+
this.logger.warn(
|
|
33
|
+
`Failed to remove corrupted node keys from the cache: ${removingError instanceof Error ? removingError.message : removingError}`,
|
|
34
|
+
);
|
|
30
35
|
}
|
|
31
36
|
throw new Error(`Failed to deserialize node keys: missing passphrase`);
|
|
32
37
|
}
|