@protontech/drive-sdk 0.1.0 → 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/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 +1 -1
- package/dist/internal/events/eventManager.js +0 -1
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +34 -25
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +6 -6
- 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.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 +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 +4 -4
- package/dist/internal/sharing/events.js +0 -1
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +39 -40
- 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 +3 -3
- package/dist/internal/upload/manager.d.ts +4 -4
- package/dist/internal/upload/manager.js +7 -5
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +137 -123
- 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 +8 -6
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/streamUploader.test.js +16 -11
- 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.js +4 -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 +51 -46
- package/src/internal/events/eventManager.ts +6 -5
- package/src/internal/events/index.ts +24 -14
- 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 +7 -5
- 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 +2 -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 +45 -49
- package/src/internal/sharing/events.ts +9 -6
- 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 +78 -78
- package/src/internal/upload/manager.test.ts +170 -153
- package/src/internal/upload/manager.ts +59 -35
- 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 +27 -21
- package/src/version.ts +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Logger, ProtonDriveTelemetry } from
|
|
2
|
-
import { DriveAPIService } from
|
|
3
|
-
import { DriveEvent, DriveListener, EventSubscription, LatestEventIdProvider } from
|
|
4
|
-
import { EventsAPIService } from
|
|
5
|
-
import { CoreEventManager } from
|
|
6
|
-
import { VolumeEventManager } from
|
|
7
|
-
import { EventManager } from
|
|
8
|
-
import { SharesManager } from
|
|
1
|
+
import { Logger, ProtonDriveTelemetry } from '../../interface';
|
|
2
|
+
import { DriveAPIService } from '../apiService';
|
|
3
|
+
import { DriveEvent, DriveListener, EventSubscription, LatestEventIdProvider } from './interface';
|
|
4
|
+
import { EventsAPIService } from './apiService';
|
|
5
|
+
import { CoreEventManager } from './coreEventManager';
|
|
6
|
+
import { VolumeEventManager } from './volumeEventManager';
|
|
7
|
+
import { EventManager } from './eventManager';
|
|
8
|
+
import { SharesManager } from '../shares/manager';
|
|
9
9
|
|
|
10
|
-
export type { DriveEvent, DriveListener } from
|
|
11
|
-
export { DriveEventType } from
|
|
10
|
+
export type { DriveEvent, DriveListener } from './interface';
|
|
11
|
+
export { DriveEventType } from './interface';
|
|
12
12
|
|
|
13
13
|
const OWN_VOLUME_POLLING_INTERVAL = 30;
|
|
14
14
|
const OTHER_VOLUME_POLLING_INTERVAL = 60;
|
|
@@ -25,7 +25,13 @@ export class DriveEventsService {
|
|
|
25
25
|
private volumeEventManagers: { [volumeId: string]: EventManager<DriveEvent> };
|
|
26
26
|
private logger: Logger;
|
|
27
27
|
|
|
28
|
-
constructor(
|
|
28
|
+
constructor(
|
|
29
|
+
private telemetry: ProtonDriveTelemetry,
|
|
30
|
+
apiService: DriveAPIService,
|
|
31
|
+
private shareManagement: SharesManager,
|
|
32
|
+
private cacheEventListeners: DriveListener[] = [],
|
|
33
|
+
private latestEventIdProvider?: LatestEventIdProvider,
|
|
34
|
+
) {
|
|
29
35
|
this.telemetry = telemetry;
|
|
30
36
|
this.logger = telemetry.getLogger('events');
|
|
31
37
|
this.apiService = new EventsAPIService(apiService);
|
|
@@ -56,7 +62,9 @@ export class DriveEventsService {
|
|
|
56
62
|
// FIXME: Allow to pass own core events manager from the public interface.
|
|
57
63
|
async subscribeToCoreEvents(callback: DriveListener): Promise<EventSubscription> {
|
|
58
64
|
if (this.latestEventIdProvider === null || this.latestEventIdProvider === undefined) {
|
|
59
|
-
throw new Error(
|
|
65
|
+
throw new Error(
|
|
66
|
+
'Cannot subscribe to events without passing a latestEventIdProvider in ProtonDriveClient initialization',
|
|
67
|
+
);
|
|
60
68
|
}
|
|
61
69
|
if (this.coreEvents === undefined) {
|
|
62
70
|
const coreEventManager = new CoreEventManager(this.logger, this.apiService);
|
|
@@ -80,7 +88,9 @@ export class DriveEventsService {
|
|
|
80
88
|
|
|
81
89
|
private async createVolumeEventManager(volumeId: string): Promise<EventManager<DriveEvent>> {
|
|
82
90
|
if (this.latestEventIdProvider === null || this.latestEventIdProvider === undefined) {
|
|
83
|
-
throw new Error(
|
|
91
|
+
throw new Error(
|
|
92
|
+
'Cannot subscribe to events without passing a latestEventIdProvider in ProtonDriveClient initialization',
|
|
93
|
+
);
|
|
84
94
|
}
|
|
85
95
|
const isOwnVolume = await this.shareManagement.isOwnVolume(volumeId);
|
|
86
96
|
const pollingInterval = this.getDefaultVolumePollingInterval(isOwnVolume);
|
|
@@ -96,6 +106,6 @@ export class DriveEventsService {
|
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
private getDefaultVolumePollingInterval(isOwnVolume: boolean): number {
|
|
99
|
-
return isOwnVolume ? OWN_VOLUME_POLLING_INTERVAL : OTHER_VOLUME_POLLING_INTERVAL
|
|
109
|
+
return isOwnVolume ? OWN_VOLUME_POLLING_INTERVAL : OTHER_VOLUME_POLLING_INTERVAL;
|
|
100
110
|
}
|
|
101
111
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger } from
|
|
1
|
+
import { Logger } from '../../interface';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Callback that accepts list of Drive events and flag whether no
|
|
@@ -27,11 +27,11 @@ export interface LatestEventIdProvider {
|
|
|
27
27
|
* events to fetch, or whether the listener should refresh its state.
|
|
28
28
|
*/
|
|
29
29
|
export type EventsListWithStatus<T> = {
|
|
30
|
-
latestEventId: string
|
|
31
|
-
more: boolean
|
|
32
|
-
refresh: boolean
|
|
33
|
-
events: T[]
|
|
34
|
-
}
|
|
30
|
+
latestEventId: string;
|
|
31
|
+
more: boolean;
|
|
32
|
+
refresh: boolean;
|
|
33
|
+
events: T[];
|
|
34
|
+
};
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* Internal event interface representing a list of specific Drive events.
|
|
@@ -41,47 +41,55 @@ export type DriveEventsListWithStatus = EventsListWithStatus<DriveEvent>;
|
|
|
41
41
|
type NodeCruEventType = DriveEventType.NodeCreated | DriveEventType.NodeUpdated;
|
|
42
42
|
export type NodeEventType = NodeCruEventType | DriveEventType.NodeDeleted;
|
|
43
43
|
|
|
44
|
-
export type NodeEvent =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
export type NodeEvent =
|
|
45
|
+
| {
|
|
46
|
+
type: NodeCruEventType;
|
|
47
|
+
nodeUid: string;
|
|
48
|
+
parentNodeUid?: string;
|
|
49
|
+
isTrashed: boolean;
|
|
50
|
+
isShared: boolean;
|
|
51
|
+
treeEventScopeId: string;
|
|
52
|
+
eventId: string;
|
|
53
|
+
}
|
|
54
|
+
| {
|
|
55
|
+
type: DriveEventType.NodeDeleted;
|
|
56
|
+
nodeUid: string;
|
|
57
|
+
parentNodeUid?: string;
|
|
58
|
+
treeEventScopeId: string;
|
|
59
|
+
eventId: string;
|
|
60
|
+
};
|
|
59
61
|
|
|
60
62
|
export type FastForwardEvent = {
|
|
61
|
-
type: DriveEventType.FastForward
|
|
62
|
-
treeEventScopeId: string
|
|
63
|
-
eventId: string
|
|
64
|
-
}
|
|
63
|
+
type: DriveEventType.FastForward;
|
|
64
|
+
treeEventScopeId: string;
|
|
65
|
+
eventId: string;
|
|
66
|
+
};
|
|
65
67
|
|
|
66
68
|
export type TreeRefreshEvent = {
|
|
67
|
-
type: DriveEventType.TreeRefresh
|
|
68
|
-
treeEventScopeId: string
|
|
69
|
-
eventId: string
|
|
70
|
-
}
|
|
69
|
+
type: DriveEventType.TreeRefresh;
|
|
70
|
+
treeEventScopeId: string;
|
|
71
|
+
eventId: string;
|
|
72
|
+
};
|
|
71
73
|
|
|
72
74
|
export type TreeRemovalEvent = {
|
|
73
|
-
type: DriveEventType.TreeRemove
|
|
74
|
-
treeEventScopeId: string
|
|
75
|
-
eventId: 'none'
|
|
76
|
-
}
|
|
75
|
+
type: DriveEventType.TreeRemove;
|
|
76
|
+
treeEventScopeId: string;
|
|
77
|
+
eventId: 'none';
|
|
78
|
+
};
|
|
77
79
|
|
|
78
80
|
export type SharedWithMeUpdated = {
|
|
79
|
-
type: DriveEventType.SharedWithMeUpdated
|
|
80
|
-
eventId: string
|
|
81
|
-
treeEventScopeId: 'core'
|
|
82
|
-
}
|
|
81
|
+
type: DriveEventType.SharedWithMeUpdated;
|
|
82
|
+
eventId: string;
|
|
83
|
+
treeEventScopeId: 'core';
|
|
84
|
+
};
|
|
83
85
|
|
|
84
|
-
export type DriveEvent =
|
|
86
|
+
export type DriveEvent =
|
|
87
|
+
| NodeEvent
|
|
88
|
+
| FastForwardEvent
|
|
89
|
+
| TreeRefreshEvent
|
|
90
|
+
| TreeRemovalEvent
|
|
91
|
+
| FastForwardEvent
|
|
92
|
+
| SharedWithMeUpdated;
|
|
85
93
|
|
|
86
94
|
export enum DriveEventType {
|
|
87
95
|
NodeCreated = 'node_created',
|
|
@@ -97,7 +105,7 @@ export enum DriveEventType {
|
|
|
97
105
|
* This can happen if all shared nodes in that volume where unshared or if the
|
|
98
106
|
* volume was deleted.
|
|
99
107
|
*/
|
|
100
|
-
export class UnsubscribeFromEventsSourceError extends Error {}
|
|
108
|
+
export class UnsubscribeFromEventsSourceError extends Error {}
|
|
101
109
|
|
|
102
110
|
export interface EventManagerInterface<T> {
|
|
103
111
|
getLatestEventId(): Promise<string>;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { getMockLogger } from
|
|
2
|
-
import { NotFoundAPIError } from
|
|
3
|
-
import { EventsAPIService } from
|
|
4
|
-
import { VolumeEventManager } from
|
|
5
|
-
import { DriveEventsListWithStatus, DriveEventType } from
|
|
1
|
+
import { getMockLogger } from '../../tests/logger';
|
|
2
|
+
import { NotFoundAPIError } from '../apiService';
|
|
3
|
+
import { EventsAPIService } from './apiService';
|
|
4
|
+
import { VolumeEventManager } from './volumeEventManager';
|
|
5
|
+
import { DriveEventsListWithStatus, DriveEventType } from './interface';
|
|
6
6
|
|
|
7
|
-
jest.mock(
|
|
7
|
+
jest.mock('./apiService');
|
|
8
8
|
|
|
9
|
-
describe(
|
|
9
|
+
describe('VolumeEventManager', () => {
|
|
10
10
|
let manager: VolumeEventManager;
|
|
11
11
|
let mockEventsAPIService: jest.Mocked<EventsAPIService>;
|
|
12
12
|
const mockLogger = getMockLogger();
|
|
13
|
-
const volumeId =
|
|
13
|
+
const volumeId = 'volumeId123';
|
|
14
14
|
|
|
15
15
|
beforeEach(() => {
|
|
16
16
|
jest.clearAllMocks();
|
|
@@ -22,16 +22,12 @@ describe("VolumeEventManager", () => {
|
|
|
22
22
|
getCoreEvents: jest.fn(),
|
|
23
23
|
} as any;
|
|
24
24
|
|
|
25
|
-
manager = new VolumeEventManager(
|
|
26
|
-
mockLogger,
|
|
27
|
-
mockEventsAPIService,
|
|
28
|
-
volumeId
|
|
29
|
-
);
|
|
25
|
+
manager = new VolumeEventManager(mockLogger, mockEventsAPIService, volumeId);
|
|
30
26
|
});
|
|
31
27
|
|
|
32
|
-
describe(
|
|
33
|
-
it(
|
|
34
|
-
const expectedEventId =
|
|
28
|
+
describe('getLatestEventId', () => {
|
|
29
|
+
it('should return the latest event ID from API', async () => {
|
|
30
|
+
const expectedEventId = 'eventId123';
|
|
35
31
|
mockEventsAPIService.getVolumeLatestEventId.mockResolvedValue(expectedEventId);
|
|
36
32
|
|
|
37
33
|
const result = await manager.getLatestEventId();
|
|
@@ -40,83 +36,83 @@ describe("VolumeEventManager", () => {
|
|
|
40
36
|
expect(mockEventsAPIService.getVolumeLatestEventId).toHaveBeenCalledWith(volumeId);
|
|
41
37
|
});
|
|
42
38
|
|
|
43
|
-
it(
|
|
44
|
-
const notFoundError = new NotFoundAPIError(
|
|
39
|
+
it('should throw UnsubscribeFromEventsSourceError when API returns NotFoundAPIError', async () => {
|
|
40
|
+
const notFoundError = new NotFoundAPIError('Event not found', 2501);
|
|
45
41
|
mockEventsAPIService.getVolumeLatestEventId.mockRejectedValue(notFoundError);
|
|
46
42
|
|
|
47
|
-
await expect(manager.getLatestEventId()).rejects.toThrow(
|
|
43
|
+
await expect(manager.getLatestEventId()).rejects.toThrow('Event not found');
|
|
48
44
|
});
|
|
49
45
|
|
|
50
|
-
it(
|
|
51
|
-
const networkError = new Error(
|
|
46
|
+
it('should rethrow other errors', async () => {
|
|
47
|
+
const networkError = new Error('Network error');
|
|
52
48
|
mockEventsAPIService.getVolumeLatestEventId.mockRejectedValue(networkError);
|
|
53
49
|
|
|
54
|
-
await expect(manager.getLatestEventId()).rejects.toThrow(
|
|
50
|
+
await expect(manager.getLatestEventId()).rejects.toThrow('Network error');
|
|
55
51
|
});
|
|
56
52
|
});
|
|
57
53
|
|
|
58
|
-
describe(
|
|
59
|
-
it(
|
|
54
|
+
describe('getEvents', () => {
|
|
55
|
+
it('should yield events from API response', async () => {
|
|
60
56
|
const mockEventsResponse: DriveEventsListWithStatus = {
|
|
61
|
-
latestEventId:
|
|
57
|
+
latestEventId: 'eventId456',
|
|
62
58
|
more: false,
|
|
63
59
|
refresh: false,
|
|
64
60
|
events: [
|
|
65
61
|
{
|
|
66
62
|
type: DriveEventType.NodeCreated,
|
|
67
|
-
nodeUid:
|
|
68
|
-
parentNodeUid:
|
|
63
|
+
nodeUid: 'node1',
|
|
64
|
+
parentNodeUid: 'parent1',
|
|
69
65
|
isTrashed: false,
|
|
70
66
|
isShared: false,
|
|
71
67
|
treeEventScopeId: volumeId,
|
|
72
|
-
eventId:
|
|
73
|
-
}
|
|
68
|
+
eventId: 'eventId456',
|
|
69
|
+
},
|
|
74
70
|
],
|
|
75
71
|
};
|
|
76
72
|
|
|
77
73
|
mockEventsAPIService.getVolumeEvents.mockResolvedValue(mockEventsResponse);
|
|
78
74
|
|
|
79
75
|
const events = [];
|
|
80
|
-
for await (const event of manager.getEvents(
|
|
76
|
+
for await (const event of manager.getEvents('startEventId')) {
|
|
81
77
|
events.push(event);
|
|
82
78
|
}
|
|
83
79
|
|
|
84
80
|
expect(events).toEqual(mockEventsResponse.events);
|
|
85
|
-
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenCalledWith(volumeId,
|
|
81
|
+
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenCalledWith(volumeId, 'startEventId');
|
|
86
82
|
});
|
|
87
83
|
|
|
88
|
-
it(
|
|
84
|
+
it('should continue fetching when more events are available', async () => {
|
|
89
85
|
const firstResponse: DriveEventsListWithStatus = {
|
|
90
|
-
latestEventId:
|
|
86
|
+
latestEventId: 'eventId2',
|
|
91
87
|
more: true,
|
|
92
88
|
refresh: false,
|
|
93
89
|
events: [
|
|
94
90
|
{
|
|
95
91
|
type: DriveEventType.NodeCreated,
|
|
96
|
-
nodeUid:
|
|
97
|
-
parentNodeUid:
|
|
92
|
+
nodeUid: 'node1',
|
|
93
|
+
parentNodeUid: 'parent1',
|
|
98
94
|
isTrashed: false,
|
|
99
95
|
isShared: false,
|
|
100
96
|
treeEventScopeId: volumeId,
|
|
101
|
-
eventId:
|
|
102
|
-
}
|
|
97
|
+
eventId: 'eventId2',
|
|
98
|
+
},
|
|
103
99
|
],
|
|
104
100
|
};
|
|
105
101
|
|
|
106
102
|
const secondResponse: DriveEventsListWithStatus = {
|
|
107
|
-
latestEventId:
|
|
103
|
+
latestEventId: 'eventId3',
|
|
108
104
|
more: false,
|
|
109
105
|
refresh: false,
|
|
110
106
|
events: [
|
|
111
107
|
{
|
|
112
108
|
type: DriveEventType.NodeUpdated,
|
|
113
|
-
nodeUid:
|
|
114
|
-
parentNodeUid:
|
|
109
|
+
nodeUid: 'node2',
|
|
110
|
+
parentNodeUid: 'parent1',
|
|
115
111
|
isTrashed: false,
|
|
116
112
|
isShared: false,
|
|
117
113
|
treeEventScopeId: volumeId,
|
|
118
|
-
eventId:
|
|
119
|
-
}
|
|
114
|
+
eventId: 'eventId3',
|
|
115
|
+
},
|
|
120
116
|
],
|
|
121
117
|
};
|
|
122
118
|
|
|
@@ -125,7 +121,7 @@ describe("VolumeEventManager", () => {
|
|
|
125
121
|
.mockResolvedValueOnce(secondResponse);
|
|
126
122
|
|
|
127
123
|
const events = [];
|
|
128
|
-
for await (const event of manager.getEvents(
|
|
124
|
+
for await (const event of manager.getEvents('startEventId')) {
|
|
129
125
|
events.push(event);
|
|
130
126
|
}
|
|
131
127
|
|
|
@@ -133,13 +129,13 @@ describe("VolumeEventManager", () => {
|
|
|
133
129
|
expect(events[0]).toEqual(firstResponse.events[0]);
|
|
134
130
|
expect(events[1]).toEqual(secondResponse.events[0]);
|
|
135
131
|
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenCalledTimes(2);
|
|
136
|
-
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenNthCalledWith(1, volumeId,
|
|
137
|
-
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenNthCalledWith(2, volumeId,
|
|
132
|
+
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenNthCalledWith(1, volumeId, 'startEventId');
|
|
133
|
+
expect(mockEventsAPIService.getVolumeEvents).toHaveBeenNthCalledWith(2, volumeId, 'eventId2');
|
|
138
134
|
});
|
|
139
135
|
|
|
140
|
-
it(
|
|
136
|
+
it('should yield TreeRefresh event when refresh is true', async () => {
|
|
141
137
|
const mockEventsResponse: DriveEventsListWithStatus = {
|
|
142
|
-
latestEventId:
|
|
138
|
+
latestEventId: 'eventId789',
|
|
143
139
|
more: false,
|
|
144
140
|
refresh: true,
|
|
145
141
|
events: [],
|
|
@@ -148,7 +144,7 @@ describe("VolumeEventManager", () => {
|
|
|
148
144
|
mockEventsAPIService.getVolumeEvents.mockResolvedValue(mockEventsResponse);
|
|
149
145
|
|
|
150
146
|
const events = [];
|
|
151
|
-
for await (const event of manager.getEvents(
|
|
147
|
+
for await (const event of manager.getEvents('startEventId')) {
|
|
152
148
|
events.push(event);
|
|
153
149
|
}
|
|
154
150
|
|
|
@@ -156,13 +152,13 @@ describe("VolumeEventManager", () => {
|
|
|
156
152
|
expect(events[0]).toEqual({
|
|
157
153
|
type: DriveEventType.TreeRefresh,
|
|
158
154
|
treeEventScopeId: volumeId,
|
|
159
|
-
eventId:
|
|
155
|
+
eventId: 'eventId789',
|
|
160
156
|
});
|
|
161
157
|
});
|
|
162
158
|
|
|
163
|
-
it(
|
|
159
|
+
it('should yield FastForward event when no events but eventId changed', async () => {
|
|
164
160
|
const mockEventsResponse: DriveEventsListWithStatus = {
|
|
165
|
-
latestEventId:
|
|
161
|
+
latestEventId: 'newEventId',
|
|
166
162
|
more: false,
|
|
167
163
|
refresh: false,
|
|
168
164
|
events: [],
|
|
@@ -171,7 +167,7 @@ describe("VolumeEventManager", () => {
|
|
|
171
167
|
mockEventsAPIService.getVolumeEvents.mockResolvedValue(mockEventsResponse);
|
|
172
168
|
|
|
173
169
|
const events = [];
|
|
174
|
-
for await (const event of manager.getEvents(
|
|
170
|
+
for await (const event of manager.getEvents('oldEventId')) {
|
|
175
171
|
events.push(event);
|
|
176
172
|
}
|
|
177
173
|
|
|
@@ -179,17 +175,17 @@ describe("VolumeEventManager", () => {
|
|
|
179
175
|
expect(events[0]).toEqual({
|
|
180
176
|
type: DriveEventType.FastForward,
|
|
181
177
|
treeEventScopeId: volumeId,
|
|
182
|
-
eventId:
|
|
178
|
+
eventId: 'newEventId',
|
|
183
179
|
});
|
|
184
180
|
});
|
|
185
181
|
|
|
186
|
-
it(
|
|
187
|
-
const notFoundError = new NotFoundAPIError(
|
|
182
|
+
it('should yield TreeRemove event when API returns NotFoundAPIError', async () => {
|
|
183
|
+
const notFoundError = new NotFoundAPIError('Volume not found', 2501);
|
|
188
184
|
mockEventsAPIService.getVolumeEvents.mockRejectedValue(notFoundError);
|
|
189
185
|
|
|
190
186
|
const events = [];
|
|
191
187
|
try {
|
|
192
|
-
for await (const event of manager.getEvents(
|
|
188
|
+
for await (const event of manager.getEvents('startEventId')) {
|
|
193
189
|
events.push(event);
|
|
194
190
|
}
|
|
195
191
|
} catch (error) {
|
|
@@ -205,18 +201,18 @@ describe("VolumeEventManager", () => {
|
|
|
205
201
|
});
|
|
206
202
|
});
|
|
207
203
|
|
|
208
|
-
it(
|
|
209
|
-
const networkError = new Error(
|
|
204
|
+
it('should rethrow non-NotFoundAPIError errors', async () => {
|
|
205
|
+
const networkError = new Error('Network error');
|
|
210
206
|
mockEventsAPIService.getVolumeEvents.mockRejectedValue(networkError);
|
|
211
207
|
|
|
212
|
-
const eventGenerator = manager.getEvents(
|
|
208
|
+
const eventGenerator = manager.getEvents('startEventId');
|
|
213
209
|
const eventIterator = eventGenerator[Symbol.asyncIterator]();
|
|
214
|
-
await expect(eventIterator.next()).rejects.toThrow(
|
|
210
|
+
await expect(eventIterator.next()).rejects.toThrow('Network error');
|
|
215
211
|
});
|
|
216
212
|
|
|
217
|
-
it(
|
|
213
|
+
it('should not yield events when events array is empty and eventId unchanged', async () => {
|
|
218
214
|
const mockEventsResponse: DriveEventsListWithStatus = {
|
|
219
|
-
latestEventId:
|
|
215
|
+
latestEventId: 'sameEventId',
|
|
220
216
|
more: false,
|
|
221
217
|
refresh: false,
|
|
222
218
|
events: [],
|
|
@@ -225,7 +221,7 @@ describe("VolumeEventManager", () => {
|
|
|
225
221
|
mockEventsAPIService.getVolumeEvents.mockResolvedValue(mockEventsResponse);
|
|
226
222
|
|
|
227
223
|
const events = [];
|
|
228
|
-
for await (const event of manager.getEvents(
|
|
224
|
+
for await (const event of manager.getEvents('sameEventId')) {
|
|
229
225
|
events.push(event);
|
|
230
226
|
}
|
|
231
227
|
|
|
@@ -233,8 +229,8 @@ describe("VolumeEventManager", () => {
|
|
|
233
229
|
});
|
|
234
230
|
});
|
|
235
231
|
|
|
236
|
-
describe(
|
|
237
|
-
it(
|
|
232
|
+
describe('getLogger', () => {
|
|
233
|
+
it('should return logger with prefix', () => {
|
|
238
234
|
const logger = manager.getLogger();
|
|
239
235
|
expect(logger).toBeDefined();
|
|
240
236
|
// The logger should be wrapped with LoggerWithPrefix, but we can't easily test the prefix
|
|
@@ -1,17 +1,26 @@
|
|
|
1
|
-
import { Logger } from
|
|
2
|
-
import { LoggerWithPrefix } from
|
|
3
|
-
import { EventsAPIService } from
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import { Logger } from '../../interface';
|
|
2
|
+
import { LoggerWithPrefix } from '../../telemetry';
|
|
3
|
+
import { EventsAPIService } from './apiService';
|
|
4
|
+
import {
|
|
5
|
+
DriveEvent,
|
|
6
|
+
DriveEventsListWithStatus,
|
|
7
|
+
DriveEventType,
|
|
8
|
+
EventManagerInterface,
|
|
9
|
+
UnsubscribeFromEventsSourceError,
|
|
10
|
+
} from './interface';
|
|
11
|
+
import { NotFoundAPIError } from '../apiService';
|
|
6
12
|
|
|
7
13
|
/**
|
|
8
14
|
* Combines API and event manager to provide a service for listening to
|
|
9
15
|
* volume events. Volume events are all about nodes updates. Whenever
|
|
10
16
|
* there is update to the node metadata or content, the event is emitted.
|
|
11
17
|
*/
|
|
12
|
-
export class VolumeEventManager implements EventManagerInterface<DriveEvent>{
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
export class VolumeEventManager implements EventManagerInterface<DriveEvent> {
|
|
19
|
+
constructor(
|
|
20
|
+
private logger: Logger,
|
|
21
|
+
private apiService: EventsAPIService,
|
|
22
|
+
private volumeId: string,
|
|
23
|
+
) {
|
|
15
24
|
this.apiService = apiService;
|
|
16
25
|
this.volumeId = volumeId;
|
|
17
26
|
this.logger = new LoggerWithPrefix(logger, `volume ${volumeId}`);
|
|
@@ -21,7 +30,7 @@ export class VolumeEventManager implements EventManagerInterface<DriveEvent>{
|
|
|
21
30
|
return this.logger;
|
|
22
31
|
}
|
|
23
32
|
|
|
24
|
-
async *
|
|
33
|
+
async *getEvents(eventId: string): AsyncIterable<DriveEvent> {
|
|
25
34
|
try {
|
|
26
35
|
let events: DriveEventsListWithStatus;
|
|
27
36
|
let more = true;
|