@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,5 +1,5 @@
|
|
|
1
1
|
import { DriveAPIService } from './internal/apiService';
|
|
2
|
-
import { ProtonDriveClientContructorParameters } from './interface';
|
|
2
|
+
import { DriveListener, ProtonDriveClientContructorParameters } from './interface';
|
|
3
3
|
import { DriveCrypto } from './crypto';
|
|
4
4
|
import { initSharesModule } from './internal/shares';
|
|
5
5
|
import { initNodesModule } from './internal/nodes';
|
|
@@ -31,26 +31,33 @@ export class ProtonDrivePhotosClient {
|
|
|
31
31
|
const fullConfig = getConfig(config);
|
|
32
32
|
const sdkEvents = new SDKEvents(telemetry);
|
|
33
33
|
const cryptoModule = new DriveCrypto(openPGPCryptoModule, srpModule);
|
|
34
|
-
const apiService = new DriveAPIService(
|
|
35
|
-
|
|
34
|
+
const apiService = new DriveAPIService(
|
|
35
|
+
telemetry,
|
|
36
|
+
sdkEvents,
|
|
37
|
+
httpClient,
|
|
38
|
+
fullConfig.baseUrl,
|
|
39
|
+
fullConfig.language,
|
|
40
|
+
);
|
|
36
41
|
const shares = initSharesModule(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule);
|
|
37
|
-
this.nodes = initNodesModule(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule,
|
|
42
|
+
this.nodes = initNodesModule(telemetry, apiService, entitiesCache, cryptoCache, account, cryptoModule, shares);
|
|
43
|
+
const cacheEventListeners: DriveListener[] = [this.nodes.eventHandler.updateNodesCacheOnEvent];
|
|
44
|
+
new DriveEventsService(telemetry, apiService, shares, cacheEventListeners);
|
|
38
45
|
this.photos = initPhotosModule(apiService, entitiesCache, this.nodes.access);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
// Timeline or album view
|
|
42
|
-
iterateTimelinePhotos() {
|
|
43
|
-
iterateAlbumPhotos() {
|
|
44
|
-
iterateThumbnails() {
|
|
45
|
-
getPhoto() {
|
|
49
|
+
iterateTimelinePhotos() {} // returns only UIDs and dates - used to show grid and scrolling
|
|
50
|
+
iterateAlbumPhotos() {} // same as above but for album
|
|
51
|
+
iterateThumbnails() {} // returns thumbnails for passed photos that are visible in the UI
|
|
52
|
+
getPhoto() {} // returns full photo details
|
|
46
53
|
|
|
47
54
|
// Album management
|
|
48
55
|
createAlbum(albumName: string) {
|
|
49
56
|
return this.photos.albums.createAlbum(albumName);
|
|
50
57
|
}
|
|
51
|
-
renameAlbum() {
|
|
52
|
-
shareAlbum() {
|
|
53
|
-
deleteAlbum() {
|
|
54
|
-
iterateAlbums() {
|
|
55
|
-
addPhotosToAlbum() {
|
|
58
|
+
renameAlbum() {}
|
|
59
|
+
shareAlbum() {}
|
|
60
|
+
deleteAlbum() {}
|
|
61
|
+
iterateAlbums() {}
|
|
62
|
+
addPhotosToAlbum() {}
|
|
56
63
|
}
|
package/src/telemetry.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger as LoggerInterface } from './interface';
|
|
2
2
|
|
|
3
3
|
export interface LogRecord {
|
|
4
|
-
time: Date
|
|
4
|
+
time: Date;
|
|
5
5
|
level: LogLevel;
|
|
6
6
|
loggerName: string;
|
|
7
7
|
message: string;
|
|
@@ -24,13 +24,13 @@ export interface LogHandler {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export interface MetricRecord<T extends MetricEvent> {
|
|
27
|
-
time: Date
|
|
27
|
+
time: Date;
|
|
28
28
|
event: T;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export type MetricEvent = {
|
|
32
32
|
eventName: string;
|
|
33
|
-
}
|
|
33
|
+
};
|
|
34
34
|
|
|
35
35
|
export interface MetricHandler<T extends MetricEvent> {
|
|
36
36
|
onEvent(metric: MetricRecord<T>): void;
|
|
@@ -38,12 +38,12 @@ export interface MetricHandler<T extends MetricEvent> {
|
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Telemetry class that logs messages and metrics.
|
|
41
|
-
*
|
|
41
|
+
*
|
|
42
42
|
* Example:
|
|
43
|
-
*
|
|
43
|
+
*
|
|
44
44
|
* ```typescript
|
|
45
45
|
* const memoryLogHandler = new MemoryLogHandler();
|
|
46
|
-
*
|
|
46
|
+
*
|
|
47
47
|
* interface MetricEvents = {
|
|
48
48
|
* name: string,
|
|
49
49
|
* value: number,
|
|
@@ -53,7 +53,7 @@ export interface MetricHandler<T extends MetricEvent> {
|
|
|
53
53
|
* // Process metric event
|
|
54
54
|
* }
|
|
55
55
|
* }
|
|
56
|
-
*
|
|
56
|
+
*
|
|
57
57
|
* const telemetry = new Telemetry<MetricEvents>({
|
|
58
58
|
* // Enable debug logging
|
|
59
59
|
* logFilter: new LogFilter({ level: LogLevel.DEBUG }),
|
|
@@ -62,16 +62,16 @@ export interface MetricHandler<T extends MetricEvent> {
|
|
|
62
62
|
* // Log to console and own handler to process further
|
|
63
63
|
* metricHandlers: [new ConsoleMetricHandler(), ownMetricHandler],
|
|
64
64
|
* });
|
|
65
|
-
*
|
|
65
|
+
*
|
|
66
66
|
* const logger = telemetry.getLogger('myLogger');
|
|
67
67
|
* logger.debug('Debug message');
|
|
68
|
-
*
|
|
68
|
+
*
|
|
69
69
|
* telemetry.logEvent({ name: 'somethingHappened', value: 42 });
|
|
70
|
-
*
|
|
70
|
+
*
|
|
71
71
|
* const logs = memoryLogHandler.getLogs();
|
|
72
72
|
* // Process logs
|
|
73
73
|
* ```
|
|
74
|
-
*
|
|
74
|
+
*
|
|
75
75
|
* @param logFilter - Log filter to filter logs based on log level, default INFO
|
|
76
76
|
* @param logHandlers - Log handlers to use for logging, see LogHandler implementations
|
|
77
77
|
* @param metricHandlers - Metric handlers to use for logging, see MetricHandler implementations
|
|
@@ -81,13 +81,7 @@ export class Telemetry<T extends MetricEvent> {
|
|
|
81
81
|
private logHandlers: LogHandler[];
|
|
82
82
|
private metricHandlers: MetricHandler<T>[];
|
|
83
83
|
|
|
84
|
-
constructor(
|
|
85
|
-
options?: {
|
|
86
|
-
logFilter?: LogFilter,
|
|
87
|
-
logHandlers?: LogHandler[],
|
|
88
|
-
metricHandlers?: MetricHandler<T>[],
|
|
89
|
-
}
|
|
90
|
-
) {
|
|
84
|
+
constructor(options?: { logFilter?: LogFilter; logHandlers?: LogHandler[]; metricHandlers?: MetricHandler<T>[] }) {
|
|
91
85
|
this.logFilter = options?.logFilter || new LogFilter();
|
|
92
86
|
this.logHandlers = options?.logHandlers || [new ConsoleLogHandler()];
|
|
93
87
|
this.metricHandlers = options?.metricHandlers || [new ConsoleMetricHandler()];
|
|
@@ -102,18 +96,22 @@ export class Telemetry<T extends MetricEvent> {
|
|
|
102
96
|
time: new Date(),
|
|
103
97
|
event,
|
|
104
98
|
};
|
|
105
|
-
this.metricHandlers.forEach(handler => handler.onEvent(metric));
|
|
99
|
+
this.metricHandlers.forEach((handler) => handler.onEvent(metric));
|
|
106
100
|
}
|
|
107
101
|
}
|
|
108
102
|
|
|
109
103
|
/**
|
|
110
104
|
* Logger class that logs messages with different levels.
|
|
111
|
-
*
|
|
105
|
+
*
|
|
112
106
|
* @param name - Name of the logger
|
|
113
107
|
* @param handlers - Log handlers to use for logging, see LogHandler implementations
|
|
114
108
|
*/
|
|
115
109
|
class Logger {
|
|
116
|
-
constructor(
|
|
110
|
+
constructor(
|
|
111
|
+
private name: string,
|
|
112
|
+
private filter: LogFilter,
|
|
113
|
+
private handlers: LogHandler[],
|
|
114
|
+
) {
|
|
117
115
|
this.name = name;
|
|
118
116
|
this.filter = filter;
|
|
119
117
|
this.handlers = handlers;
|
|
@@ -160,15 +158,15 @@ class Logger {
|
|
|
160
158
|
if (!this.filter.filter(log)) {
|
|
161
159
|
return;
|
|
162
160
|
}
|
|
163
|
-
this.handlers.forEach(handler => handler.log(log));
|
|
161
|
+
this.handlers.forEach((handler) => handler.log(log));
|
|
164
162
|
}
|
|
165
163
|
}
|
|
166
164
|
|
|
167
165
|
/**
|
|
168
166
|
* Logger class that logs messages with a prefix.
|
|
169
|
-
*
|
|
167
|
+
*
|
|
170
168
|
* Example:
|
|
171
|
-
*
|
|
169
|
+
*
|
|
172
170
|
* ```typescript
|
|
173
171
|
* const logger = new Logger('myLogger', new LogFilter(), [new ConsoleLogHandler()]);
|
|
174
172
|
* const loggerWithPrefix = new LoggerWithPrefix(logger, 'prefix');
|
|
@@ -176,7 +174,10 @@ class Logger {
|
|
|
176
174
|
* ```
|
|
177
175
|
*/
|
|
178
176
|
export class LoggerWithPrefix {
|
|
179
|
-
constructor(
|
|
177
|
+
constructor(
|
|
178
|
+
private logger: LoggerInterface,
|
|
179
|
+
private prefix: string,
|
|
180
|
+
) {
|
|
180
181
|
this.logger = logger;
|
|
181
182
|
this.prefix = prefix;
|
|
182
183
|
}
|
|
@@ -201,28 +202,29 @@ export class LoggerWithPrefix {
|
|
|
201
202
|
/**
|
|
202
203
|
* Filter logs based on log level. It can be configured by global level or
|
|
203
204
|
* per logger level.
|
|
204
|
-
*
|
|
205
|
+
*
|
|
205
206
|
* @param globalLevel - Global log level, default INFO
|
|
206
207
|
* @param loggerLevels - Log levels for specific loggers, default empty
|
|
207
208
|
*/
|
|
208
209
|
export class LogFilter {
|
|
209
210
|
private logLevelMap = {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
211
|
+
DEBUG: 0,
|
|
212
|
+
INFO: 1,
|
|
213
|
+
WARNING: 2,
|
|
214
|
+
ERROR: 3,
|
|
215
|
+
};
|
|
215
216
|
|
|
216
217
|
private globalLevel: number;
|
|
217
218
|
private loggerLevels: { [loggerName: string]: number };
|
|
218
219
|
|
|
219
|
-
constructor(options?: {
|
|
220
|
-
globalLevel?: LogLevel,
|
|
221
|
-
loggerLevels?: { [loggerName: string]: LogLevel },
|
|
222
|
-
}) {
|
|
220
|
+
constructor(options?: { globalLevel?: LogLevel; loggerLevels?: { [loggerName: string]: LogLevel } }) {
|
|
223
221
|
this.globalLevel = this.logLevelMap[options?.globalLevel || LogLevel.INFO];
|
|
224
|
-
this.loggerLevels = Object.fromEntries(
|
|
225
|
-
.map(([loggerName, level]) => [
|
|
222
|
+
this.loggerLevels = Object.fromEntries(
|
|
223
|
+
Object.entries(options?.loggerLevels || {}).map(([loggerName, level]) => [
|
|
224
|
+
loggerName,
|
|
225
|
+
this.logLevelMap[level],
|
|
226
|
+
]),
|
|
227
|
+
);
|
|
226
228
|
}
|
|
227
229
|
|
|
228
230
|
/**
|
|
@@ -243,16 +245,16 @@ export class LogFilter {
|
|
|
243
245
|
|
|
244
246
|
/**
|
|
245
247
|
* Log handler that logs to console.
|
|
246
|
-
*
|
|
248
|
+
*
|
|
247
249
|
* @param formatter - Formatter to use for log messages, default BasicLogFormatter
|
|
248
250
|
*/
|
|
249
251
|
export class ConsoleLogHandler implements LogHandler {
|
|
250
252
|
private logLevelMap = {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
253
|
+
DEBUG: console.debug, // eslint-disable-line no-console
|
|
254
|
+
INFO: console.info, // eslint-disable-line no-console
|
|
255
|
+
WARNING: console.warn, // eslint-disable-line no-console
|
|
256
|
+
ERROR: console.error, // eslint-disable-line no-console
|
|
257
|
+
};
|
|
256
258
|
|
|
257
259
|
private formatter: LogFormatter;
|
|
258
260
|
|
|
@@ -268,10 +270,10 @@ export class ConsoleLogHandler implements LogHandler {
|
|
|
268
270
|
|
|
269
271
|
/**
|
|
270
272
|
* Log handler that stores logs in memory with option to retrieve later.
|
|
271
|
-
*
|
|
273
|
+
*
|
|
272
274
|
* Useful for keeping logs around and retrieve them on demand when an error
|
|
273
275
|
* occures.
|
|
274
|
-
*
|
|
276
|
+
*
|
|
275
277
|
* @param formatter - Formatter to use for log messages, default JSONLogFormatter
|
|
276
278
|
* @param maxLogs - Maximum number of logs to store, default 10000
|
|
277
279
|
*/
|
|
@@ -280,7 +282,10 @@ export class MemoryLogHandler implements LogHandler {
|
|
|
280
282
|
|
|
281
283
|
private formatter: LogFormatter;
|
|
282
284
|
|
|
283
|
-
constructor(
|
|
285
|
+
constructor(
|
|
286
|
+
formatter?: LogFormatter,
|
|
287
|
+
private maxLogs = 10000,
|
|
288
|
+
) {
|
|
284
289
|
this.formatter = formatter || new JSONLogFormatter();
|
|
285
290
|
this.maxLogs = maxLogs;
|
|
286
291
|
}
|
|
@@ -305,7 +310,7 @@ export class MemoryLogHandler implements LogHandler {
|
|
|
305
310
|
|
|
306
311
|
/**
|
|
307
312
|
* Formatter that formats logs as JSON.
|
|
308
|
-
*
|
|
313
|
+
*
|
|
309
314
|
* Useful for machine processing.
|
|
310
315
|
*/
|
|
311
316
|
export class JSONLogFormatter implements LogFormatter {
|
|
@@ -323,16 +328,17 @@ export class JSONLogFormatter implements LogFormatter {
|
|
|
323
328
|
|
|
324
329
|
/**
|
|
325
330
|
* Formatter that formats logs as plain text.
|
|
326
|
-
*
|
|
331
|
+
*
|
|
327
332
|
* Useful for human reading.
|
|
328
333
|
*/
|
|
329
334
|
export class BasicLogFormatter implements LogFormatter {
|
|
330
335
|
format(log: LogRecord) {
|
|
331
336
|
let errorDetails = '';
|
|
332
337
|
if (log.error) {
|
|
333
|
-
errorDetails =
|
|
334
|
-
|
|
335
|
-
|
|
338
|
+
errorDetails =
|
|
339
|
+
log.error instanceof Error
|
|
340
|
+
? `\nError: ${log.error.message}\nStack:\n${log.error.stack}`
|
|
341
|
+
: `\nError: ${log.error}`;
|
|
336
342
|
}
|
|
337
343
|
return `${log.time.toISOString()} ${log.level} [${log.loggerName}] ${log.message}${errorDetails}`;
|
|
338
344
|
}
|
|
@@ -341,6 +347,8 @@ export class BasicLogFormatter implements LogFormatter {
|
|
|
341
347
|
class ConsoleMetricHandler<T extends MetricEvent> implements MetricHandler<T> {
|
|
342
348
|
onEvent(metric: MetricRecord<T>) {
|
|
343
349
|
// eslint-disable-next-line no-console
|
|
344
|
-
console.info(
|
|
350
|
+
console.info(
|
|
351
|
+
`${metric.time.toISOString()} INFO [metric] ${metric.event.eventName} ${JSON.stringify({ ...metric.event, name: undefined })}`,
|
|
352
|
+
);
|
|
345
353
|
}
|
|
346
354
|
}
|
package/src/tests/logger.ts
CHANGED
package/src/tests/telemetry.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ProtonDriveTelemetry } from
|
|
2
|
-
import { getMockLogger } from
|
|
1
|
+
import { ProtonDriveTelemetry } from '../interface';
|
|
2
|
+
import { getMockLogger } from './logger';
|
|
3
3
|
|
|
4
4
|
export function getMockTelemetry(): ProtonDriveTelemetry {
|
|
5
5
|
return {
|
package/src/transformers.ts
CHANGED
|
@@ -13,28 +13,28 @@ import { DecryptedNode as InternalNode, DecryptedRevision as InternalRevision }
|
|
|
13
13
|
|
|
14
14
|
type InternalPartialNode = Pick<
|
|
15
15
|
InternalNode,
|
|
16
|
-
'uid'
|
|
17
|
-
'parentUid'
|
|
18
|
-
'name'
|
|
19
|
-
'keyAuthor'
|
|
20
|
-
'nameAuthor'
|
|
21
|
-
'directMemberRole'
|
|
22
|
-
'type'
|
|
23
|
-
'mediaType'
|
|
24
|
-
'isShared'
|
|
25
|
-
'creationTime'
|
|
26
|
-
'trashTime'
|
|
27
|
-
'activeRevision'
|
|
28
|
-
'folder'
|
|
29
|
-
'totalStorageSize'
|
|
30
|
-
'errors'
|
|
31
|
-
'shareId'
|
|
16
|
+
| 'uid'
|
|
17
|
+
| 'parentUid'
|
|
18
|
+
| 'name'
|
|
19
|
+
| 'keyAuthor'
|
|
20
|
+
| 'nameAuthor'
|
|
21
|
+
| 'directMemberRole'
|
|
22
|
+
| 'type'
|
|
23
|
+
| 'mediaType'
|
|
24
|
+
| 'isShared'
|
|
25
|
+
| 'creationTime'
|
|
26
|
+
| 'trashTime'
|
|
27
|
+
| 'activeRevision'
|
|
28
|
+
| 'folder'
|
|
29
|
+
| 'totalStorageSize'
|
|
30
|
+
| 'errors'
|
|
31
|
+
| 'shareId'
|
|
32
32
|
>;
|
|
33
33
|
|
|
34
34
|
type NodeUid = string | { uid: string } | Result<{ uid: string }, { uid: string }>;
|
|
35
35
|
|
|
36
36
|
export function getUid(nodeUid: NodeUid): string {
|
|
37
|
-
if (typeof nodeUid ===
|
|
37
|
+
if (typeof nodeUid === 'string') {
|
|
38
38
|
return nodeUid;
|
|
39
39
|
}
|
|
40
40
|
// Directly passed NodeEntity or DegradedNode that has UID directly.
|
|
@@ -52,13 +52,17 @@ export function getUids(nodeUids: NodeUid[]): string[] {
|
|
|
52
52
|
return nodeUids.map(getUid);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
export async function
|
|
55
|
+
export async function* convertInternalNodeIterator(
|
|
56
|
+
nodeIterator: AsyncGenerator<InternalPartialNode>,
|
|
57
|
+
): AsyncGenerator<PublicMaybeNode> {
|
|
56
58
|
for await (const node of nodeIterator) {
|
|
57
59
|
yield convertInternalNode(node);
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
export async function
|
|
63
|
+
export async function* convertInternalMissingNodeIterator(
|
|
64
|
+
nodeIterator: AsyncGenerator<InternalPartialNode | MissingNode>,
|
|
65
|
+
): AsyncGenerator<PublicMaybeMissingNode> {
|
|
62
66
|
for await (const node of nodeIterator) {
|
|
63
67
|
if ('missingUid' in node) {
|
|
64
68
|
yield resultError(node);
|
|
@@ -97,7 +101,9 @@ export function convertInternalNode(node: InternalPartialNode): PublicMaybeNode
|
|
|
97
101
|
return resultError({
|
|
98
102
|
...baseNodeMetadata,
|
|
99
103
|
name,
|
|
100
|
-
activeRevision: activeRevision?.ok
|
|
104
|
+
activeRevision: activeRevision?.ok
|
|
105
|
+
? resultOk(convertInternalRevision(activeRevision.value))
|
|
106
|
+
: activeRevision,
|
|
101
107
|
errors: node.errors,
|
|
102
108
|
} as PublicDegradedNode);
|
|
103
109
|
}
|
|
@@ -120,5 +126,5 @@ function convertInternalRevision(revision: InternalRevision): PublicRevision {
|
|
|
120
126
|
claimedModificationTime: revision.claimedModificationTime,
|
|
121
127
|
claimedDigests: revision.claimedDigests,
|
|
122
128
|
claimedAdditionalMetadata: revision.claimedAdditionalMetadata,
|
|
123
|
-
}
|
|
129
|
+
};
|
|
124
130
|
}
|
package/src/version.ts
CHANGED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ProtonDriveEntitiesCache } from "../../interface";
|
|
2
|
-
interface EventsData {
|
|
3
|
-
lastEventId: string;
|
|
4
|
-
pollingIntervalInSeconds: number;
|
|
5
|
-
isOwnVolume: boolean;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Provides caching for events IDs.
|
|
9
|
-
*/
|
|
10
|
-
export declare class EventsCache {
|
|
11
|
-
private driveCache;
|
|
12
|
-
/**
|
|
13
|
-
* Locally cached events data to avoid unnecessary reads from the cache.
|
|
14
|
-
* Data about last event ID or interval might be accessed often by events
|
|
15
|
-
* managers.
|
|
16
|
-
*/
|
|
17
|
-
private events?;
|
|
18
|
-
constructor(driveCache: ProtonDriveEntitiesCache);
|
|
19
|
-
setLastEventId(volumeIdOrCore: string, eventsData: EventsData): Promise<void>;
|
|
20
|
-
getLastEventId(volumeIdOrCore: string): Promise<string | undefined>;
|
|
21
|
-
getPollingIntervalInSeconds(volumeIdOrCore: string): Promise<number | undefined>;
|
|
22
|
-
isOwnVolume(volumeIdOrCore: string): Promise<boolean | undefined>;
|
|
23
|
-
getSubscribedVolumeIds(): Promise<string[]>;
|
|
24
|
-
private getEvents;
|
|
25
|
-
private getCachedEvents;
|
|
26
|
-
private cacheEvents;
|
|
27
|
-
}
|
|
28
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EventsCache = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Provides caching for events IDs.
|
|
6
|
-
*/
|
|
7
|
-
class EventsCache {
|
|
8
|
-
driveCache;
|
|
9
|
-
/**
|
|
10
|
-
* Locally cached events data to avoid unnecessary reads from the cache.
|
|
11
|
-
* Data about last event ID or interval might be accessed often by events
|
|
12
|
-
* managers.
|
|
13
|
-
*/
|
|
14
|
-
events;
|
|
15
|
-
constructor(driveCache) {
|
|
16
|
-
this.driveCache = driveCache;
|
|
17
|
-
this.driveCache = driveCache;
|
|
18
|
-
}
|
|
19
|
-
async setLastEventId(volumeIdOrCore, eventsData) {
|
|
20
|
-
const events = await this.getEvents();
|
|
21
|
-
events[volumeIdOrCore] = eventsData;
|
|
22
|
-
await this.cacheEvents(events);
|
|
23
|
-
}
|
|
24
|
-
async getLastEventId(volumeIdOrCore) {
|
|
25
|
-
const events = await this.getEvents();
|
|
26
|
-
if (events[volumeIdOrCore]) {
|
|
27
|
-
return events[volumeIdOrCore].lastEventId;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async getPollingIntervalInSeconds(volumeIdOrCore) {
|
|
31
|
-
const events = await this.getEvents();
|
|
32
|
-
if (events[volumeIdOrCore]) {
|
|
33
|
-
return events[volumeIdOrCore].pollingIntervalInSeconds;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
async isOwnVolume(volumeIdOrCore) {
|
|
37
|
-
const events = await this.getEvents();
|
|
38
|
-
if (events[volumeIdOrCore]) {
|
|
39
|
-
return events[volumeIdOrCore].isOwnVolume;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async getSubscribedVolumeIds() {
|
|
43
|
-
const events = await this.getEvents();
|
|
44
|
-
return Object.keys(events).filter((volumeIdOrCore) => volumeIdOrCore !== 'core');
|
|
45
|
-
}
|
|
46
|
-
async getEvents() {
|
|
47
|
-
if (!this.events) {
|
|
48
|
-
this.events = await this.getCachedEvents();
|
|
49
|
-
}
|
|
50
|
-
return this.events;
|
|
51
|
-
}
|
|
52
|
-
async getCachedEvents() {
|
|
53
|
-
try {
|
|
54
|
-
const events = await this.driveCache.getEntity('events');
|
|
55
|
-
return JSON.parse(events);
|
|
56
|
-
}
|
|
57
|
-
catch { }
|
|
58
|
-
;
|
|
59
|
-
return {};
|
|
60
|
-
}
|
|
61
|
-
async cacheEvents(events) {
|
|
62
|
-
this.events = events;
|
|
63
|
-
await this.driveCache.setEntity('events', JSON.stringify(events));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
exports.EventsCache = EventsCache;
|
|
67
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/internal/events/cache.ts"],"names":[],"mappings":";;;AAaA;;GAEG;AACH,MAAa,WAAW;IAQA;IAPpB;;;;OAIG;IACK,MAAM,CAAoB;IAElC,YAAoB,UAAoC;QAApC,eAAU,GAAV,UAAU,CAA0B;QACpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,cAAsB,EAAE,UAAsB;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;QACpC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,cAAsB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,cAAsB;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC;QAC3D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;IACrF,CAAC;IAEO,KAAK,CAAC,SAAS;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,eAAe;QACzB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAAA,CAAC;QACX,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAwB;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC;CACJ;AA/DD,kCA+DC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const cache_1 = require("../../cache");
|
|
4
|
-
const cache_2 = require("./cache");
|
|
5
|
-
describe("EventsCache", () => {
|
|
6
|
-
let memoryCache;
|
|
7
|
-
let cache;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
memoryCache = new cache_1.MemoryCache();
|
|
10
|
-
cache = new cache_2.EventsCache(memoryCache);
|
|
11
|
-
});
|
|
12
|
-
it("should store and retrieve last event ID", async () => {
|
|
13
|
-
const key = "volume1";
|
|
14
|
-
await cache.setLastEventId(key, { lastEventId: "eventId1", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
15
|
-
await cache.setLastEventId(key, { lastEventId: "eventId2", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
16
|
-
const result = await cache.getLastEventId(key);
|
|
17
|
-
expect(result).toBe("eventId2");
|
|
18
|
-
});
|
|
19
|
-
it("should store and retrieve polling interval", async () => {
|
|
20
|
-
const key = "volume1";
|
|
21
|
-
await cache.setLastEventId(key, { lastEventId: "lastEventId", pollingIntervalInSeconds: 10, isOwnVolume: true });
|
|
22
|
-
await cache.setLastEventId(key, { lastEventId: "lastEventId", pollingIntervalInSeconds: 20, isOwnVolume: true });
|
|
23
|
-
const result = await cache.getPollingIntervalInSeconds(key);
|
|
24
|
-
expect(result).toBe(20);
|
|
25
|
-
});
|
|
26
|
-
it("should store and retrieve subscribed volume IDs", async () => {
|
|
27
|
-
await cache.setLastEventId("volume1", { lastEventId: "lastEventId", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
28
|
-
await cache.setLastEventId("volume2", { lastEventId: "lastEventId", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
29
|
-
const result = await cache.getSubscribedVolumeIds();
|
|
30
|
-
expect(result).toStrictEqual(["volume1", "volume2"]);
|
|
31
|
-
});
|
|
32
|
-
it("should not fail if cache is empty", async () => {
|
|
33
|
-
const result = await cache.getLastEventId("volume1");
|
|
34
|
-
expect(result).toBe(undefined);
|
|
35
|
-
});
|
|
36
|
-
it("should call cache only once", async () => {
|
|
37
|
-
const spy = jest.spyOn(memoryCache, "getEntity");
|
|
38
|
-
await cache.getLastEventId("volume1");
|
|
39
|
-
await cache.getLastEventId("volume1");
|
|
40
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=cache.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../../../src/internal/events/cache.test.ts"],"names":[],"mappings":";;AAAA,uCAA0C;AAC1C,mCAAsC;AAEtC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,WAAgC,CAAC;IACrC,IAAI,KAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACZ,WAAW,GAAG,IAAI,mBAAW,EAAE,CAAC;QAChC,KAAK,GAAG,IAAI,mBAAW,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7G,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACjH,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACjH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { MemoryCache } from "../../cache";
|
|
2
|
-
import { EventsCache } from "./cache";
|
|
3
|
-
|
|
4
|
-
describe("EventsCache", () => {
|
|
5
|
-
let memoryCache: MemoryCache<string>;
|
|
6
|
-
let cache: EventsCache;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
memoryCache = new MemoryCache();
|
|
10
|
-
cache = new EventsCache(memoryCache);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it("should store and retrieve last event ID", async () => {
|
|
14
|
-
const key = "volume1";
|
|
15
|
-
await cache.setLastEventId(key, { lastEventId: "eventId1", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
16
|
-
await cache.setLastEventId(key, { lastEventId: "eventId2", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
17
|
-
const result = await cache.getLastEventId(key);
|
|
18
|
-
expect(result).toBe("eventId2");
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it("should store and retrieve polling interval", async () => {
|
|
22
|
-
const key = "volume1";
|
|
23
|
-
await cache.setLastEventId(key, { lastEventId: "lastEventId", pollingIntervalInSeconds: 10, isOwnVolume: true });
|
|
24
|
-
await cache.setLastEventId(key, { lastEventId: "lastEventId", pollingIntervalInSeconds: 20, isOwnVolume: true });
|
|
25
|
-
const result = await cache.getPollingIntervalInSeconds(key);
|
|
26
|
-
expect(result).toBe(20);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("should store and retrieve subscribed volume IDs", async () => {
|
|
30
|
-
await cache.setLastEventId("volume1", { lastEventId: "lastEventId", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
31
|
-
await cache.setLastEventId("volume2", { lastEventId: "lastEventId", pollingIntervalInSeconds: 0, isOwnVolume: true });
|
|
32
|
-
const result = await cache.getSubscribedVolumeIds();
|
|
33
|
-
expect(result).toStrictEqual(["volume1", "volume2"]);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("should not fail if cache is empty", async () => {
|
|
37
|
-
const result = await cache.getLastEventId("volume1");
|
|
38
|
-
expect(result).toBe(undefined);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("should call cache only once", async () => {
|
|
42
|
-
const spy = jest.spyOn(memoryCache, "getEntity");
|
|
43
|
-
await cache.getLastEventId("volume1");
|
|
44
|
-
await cache.getLastEventId("volume1");
|
|
45
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
46
|
-
});
|
|
47
|
-
});
|