@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,13 +1,25 @@
|
|
|
1
1
|
import { c } from 'ttag';
|
|
2
2
|
|
|
3
|
-
import { SessionKey } from
|
|
4
|
-
import { ValidationError } from
|
|
5
|
-
import {
|
|
6
|
-
|
|
3
|
+
import { SessionKey } from '../../crypto';
|
|
4
|
+
import { ValidationError } from '../../errors';
|
|
5
|
+
import {
|
|
6
|
+
Logger,
|
|
7
|
+
MemberRole,
|
|
8
|
+
ShareNodeSettings,
|
|
9
|
+
UnshareNodeSettings,
|
|
10
|
+
ShareResult,
|
|
11
|
+
ProtonInvitation,
|
|
12
|
+
NonProtonInvitation,
|
|
13
|
+
Member,
|
|
14
|
+
resultOk,
|
|
15
|
+
ProtonDriveAccount,
|
|
16
|
+
SharePublicLinkSettingsObject,
|
|
17
|
+
} from '../../interface';
|
|
18
|
+
import { splitNodeUid } from '../uids';
|
|
7
19
|
import { getErrorMessage } from '../errors';
|
|
8
|
-
import { SharingAPIService } from
|
|
9
|
-
import { PUBLIC_LINK_GENERATED_PASSWORD_LENGTH, SharingCryptoService } from
|
|
10
|
-
import { SharesService, NodesService,
|
|
20
|
+
import { SharingAPIService } from './apiService';
|
|
21
|
+
import { PUBLIC_LINK_GENERATED_PASSWORD_LENGTH, SharingCryptoService } from './cryptoService';
|
|
22
|
+
import { SharesService, NodesService, ShareResultWithCreatorEmail, PublicLinkWithCreatorEmail } from './interface';
|
|
11
23
|
|
|
12
24
|
interface InternalShareResult extends ShareResultWithCreatorEmail {
|
|
13
25
|
share: Share;
|
|
@@ -40,7 +52,6 @@ export class SharingManagement {
|
|
|
40
52
|
private account: ProtonDriveAccount,
|
|
41
53
|
private sharesService: SharesService,
|
|
42
54
|
private nodesService: NodesService,
|
|
43
|
-
private nodesEvents: NodesEvents,
|
|
44
55
|
) {
|
|
45
56
|
this.logger = logger;
|
|
46
57
|
this.apiService = apiService;
|
|
@@ -48,7 +59,6 @@ export class SharingManagement {
|
|
|
48
59
|
this.account = account;
|
|
49
60
|
this.sharesService = sharesService;
|
|
50
61
|
this.nodesService = nodesService;
|
|
51
|
-
this.nodesEvents = nodesEvents;
|
|
52
62
|
}
|
|
53
63
|
|
|
54
64
|
async getSharingInfo(nodeUid: string): Promise<ShareResultWithCreatorEmail | undefined> {
|
|
@@ -69,24 +79,24 @@ export class SharingManagement {
|
|
|
69
79
|
nonProtonInvitations,
|
|
70
80
|
members,
|
|
71
81
|
publicLink,
|
|
72
|
-
}
|
|
82
|
+
};
|
|
73
83
|
}
|
|
74
84
|
|
|
75
|
-
private async*
|
|
85
|
+
private async *iterateShareInvitations(shareId: string): AsyncGenerator<ProtonInvitation> {
|
|
76
86
|
const invitations = await this.apiService.getShareInvitations(shareId);
|
|
77
87
|
for (const invitation of invitations) {
|
|
78
88
|
yield this.cryptoService.decryptInvitation(invitation);
|
|
79
89
|
}
|
|
80
90
|
}
|
|
81
91
|
|
|
82
|
-
private async*
|
|
92
|
+
private async *iterateShareExternalInvitations(shareId: string): AsyncGenerator<NonProtonInvitation> {
|
|
83
93
|
const invitations = await this.apiService.getShareExternalInvitations(shareId);
|
|
84
94
|
for (const invitation of invitations) {
|
|
85
95
|
yield this.cryptoService.decryptExternalInvitation(invitation);
|
|
86
96
|
}
|
|
87
97
|
}
|
|
88
98
|
|
|
89
|
-
private async*
|
|
99
|
+
private async *iterateShareMembers(shareId: string): AsyncGenerator<Member> {
|
|
90
100
|
const members = await this.apiService.getShareMembers(shareId);
|
|
91
101
|
for (const member of members) {
|
|
92
102
|
yield this.cryptoService.decryptMember(member);
|
|
@@ -108,9 +118,7 @@ export class SharingManagement {
|
|
|
108
118
|
const nonProtonUsers = [];
|
|
109
119
|
if (settings.users) {
|
|
110
120
|
for (const user of settings.users) {
|
|
111
|
-
const { email, role } = typeof user ===
|
|
112
|
-
? { email: user, role: MemberRole.Viewer }
|
|
113
|
-
: user;
|
|
121
|
+
const { email, role } = typeof user === 'string' ? { email: user, role: MemberRole.Viewer } : user;
|
|
114
122
|
const isProtonUser = await this.account.hasProtonAccount(email);
|
|
115
123
|
if (isProtonUser) {
|
|
116
124
|
protonUsers.push({ email, role });
|
|
@@ -122,7 +130,11 @@ export class SharingManagement {
|
|
|
122
130
|
|
|
123
131
|
// Check if expiration date is in the past before creating share
|
|
124
132
|
// so if this fails, we don't create empty share.
|
|
125
|
-
if (
|
|
133
|
+
if (
|
|
134
|
+
typeof settings.publicLink === 'object' &&
|
|
135
|
+
settings.publicLink.expiration &&
|
|
136
|
+
settings.publicLink.expiration < new Date()
|
|
137
|
+
) {
|
|
126
138
|
throw new ValidationError(c('Error').t`Expiration date cannot be in the past`);
|
|
127
139
|
}
|
|
128
140
|
|
|
@@ -143,12 +155,14 @@ export class SharingManagement {
|
|
|
143
155
|
const emailOptions: EmailOptions = {
|
|
144
156
|
message: settings.emailOptions?.message,
|
|
145
157
|
nodeName: settings.emailOptions?.includeNodeName ? currentSharing.nodeName : undefined,
|
|
146
|
-
}
|
|
158
|
+
};
|
|
147
159
|
|
|
148
160
|
for (const user of protonUsers) {
|
|
149
161
|
const { email, role } = user;
|
|
150
162
|
|
|
151
|
-
const existingInvitation = currentSharing.protonInvitations.find(
|
|
163
|
+
const existingInvitation = currentSharing.protonInvitations.find(
|
|
164
|
+
(invitation) => invitation.inviteeEmail === email,
|
|
165
|
+
);
|
|
152
166
|
if (existingInvitation) {
|
|
153
167
|
if (existingInvitation.role === role) {
|
|
154
168
|
this.logger.info(`Invitation for ${email} already exists with role ${role} to node ${nodeUid}`);
|
|
@@ -180,13 +194,19 @@ export class SharingManagement {
|
|
|
180
194
|
for (const user of nonProtonUsers) {
|
|
181
195
|
const { email, role } = user;
|
|
182
196
|
|
|
183
|
-
const existingExternalInvitation = currentSharing.nonProtonInvitations.find(
|
|
197
|
+
const existingExternalInvitation = currentSharing.nonProtonInvitations.find(
|
|
198
|
+
(invitation) => invitation.inviteeEmail === email,
|
|
199
|
+
);
|
|
184
200
|
if (existingExternalInvitation) {
|
|
185
201
|
if (existingExternalInvitation.role === role) {
|
|
186
|
-
this.logger.info(
|
|
202
|
+
this.logger.info(
|
|
203
|
+
`External invitation for ${email} already exists with role ${role} to node ${nodeUid}`,
|
|
204
|
+
);
|
|
187
205
|
continue;
|
|
188
206
|
}
|
|
189
|
-
this.logger.info(
|
|
207
|
+
this.logger.info(
|
|
208
|
+
`External invitation for ${email} already exists, updating role to ${role} to node ${nodeUid}`,
|
|
209
|
+
);
|
|
190
210
|
await this.updateExternalInvitation(existingExternalInvitation.uid, role);
|
|
191
211
|
existingExternalInvitation.role = role;
|
|
192
212
|
continue;
|
|
@@ -210,13 +230,15 @@ export class SharingManagement {
|
|
|
210
230
|
}
|
|
211
231
|
|
|
212
232
|
if (settings.publicLink) {
|
|
213
|
-
const options = settings.publicLink === true
|
|
214
|
-
? { role: MemberRole.Viewer }
|
|
215
|
-
: settings.publicLink;
|
|
233
|
+
const options = settings.publicLink === true ? { role: MemberRole.Viewer } : settings.publicLink;
|
|
216
234
|
|
|
217
235
|
if (currentSharing.publicLink) {
|
|
218
236
|
this.logger.info(`Updating public link with role ${options.role} to node ${nodeUid}`);
|
|
219
|
-
currentSharing.publicLink = await this.updateSharedLink(
|
|
237
|
+
currentSharing.publicLink = await this.updateSharedLink(
|
|
238
|
+
currentSharing.share,
|
|
239
|
+
currentSharing.publicLink,
|
|
240
|
+
options,
|
|
241
|
+
);
|
|
220
242
|
} else {
|
|
221
243
|
this.logger.info(`Sharing via public link with role ${options.role} to node ${nodeUid}`);
|
|
222
244
|
currentSharing.publicLink = await this.shareViaLink(currentSharing.share, options);
|
|
@@ -239,24 +261,32 @@ export class SharingManagement {
|
|
|
239
261
|
|
|
240
262
|
if (!settings) {
|
|
241
263
|
this.logger.info(`Unsharing node ${nodeUid}`);
|
|
242
|
-
await this.deleteShare(
|
|
264
|
+
await this.deleteShare(currentSharing.share.shareId, nodeUid);
|
|
243
265
|
return;
|
|
244
266
|
}
|
|
245
267
|
|
|
246
268
|
for (const userEmail of settings.users || []) {
|
|
247
|
-
const existingInvitation = currentSharing.protonInvitations.find(
|
|
269
|
+
const existingInvitation = currentSharing.protonInvitations.find(
|
|
270
|
+
(invitation) => invitation.inviteeEmail === userEmail,
|
|
271
|
+
);
|
|
248
272
|
if (existingInvitation) {
|
|
249
273
|
this.logger.info(`Deleting invitation for ${userEmail} to node ${nodeUid}`);
|
|
250
274
|
await this.deleteInvitation(existingInvitation.uid);
|
|
251
|
-
currentSharing.protonInvitations = currentSharing.protonInvitations.filter(
|
|
275
|
+
currentSharing.protonInvitations = currentSharing.protonInvitations.filter(
|
|
276
|
+
(invitation) => invitation.uid !== existingInvitation.uid,
|
|
277
|
+
);
|
|
252
278
|
continue;
|
|
253
279
|
}
|
|
254
280
|
|
|
255
|
-
const existingExternalInvitation = currentSharing.nonProtonInvitations.find(
|
|
281
|
+
const existingExternalInvitation = currentSharing.nonProtonInvitations.find(
|
|
282
|
+
(invitation) => invitation.inviteeEmail === userEmail,
|
|
283
|
+
);
|
|
256
284
|
if (existingExternalInvitation) {
|
|
257
285
|
this.logger.info(`Deleting external invitation for ${userEmail} to node ${nodeUid}`);
|
|
258
286
|
await this.deleteExternalInvitation(existingExternalInvitation.uid);
|
|
259
|
-
currentSharing.nonProtonInvitations = currentSharing.nonProtonInvitations.filter(
|
|
287
|
+
currentSharing.nonProtonInvitations = currentSharing.nonProtonInvitations.filter(
|
|
288
|
+
(invitation) => invitation.uid !== existingExternalInvitation.uid,
|
|
289
|
+
);
|
|
260
290
|
continue;
|
|
261
291
|
}
|
|
262
292
|
|
|
@@ -293,13 +323,15 @@ export class SharingManagement {
|
|
|
293
323
|
// update local state immediately.
|
|
294
324
|
this.logger.info(`Deleting share ${currentSharing.share.shareId} for node ${nodeUid}`);
|
|
295
325
|
try {
|
|
296
|
-
await this.deleteShare(
|
|
326
|
+
await this.deleteShare(currentSharing.share.shareId, nodeUid);
|
|
297
327
|
} catch (error: unknown) {
|
|
298
328
|
// If deleting the share fails, we don't want to throw an error
|
|
299
329
|
// as it might be a race condition that other client updated
|
|
300
330
|
// the share and it is not empty.
|
|
301
331
|
// If share is truly empty, backend will delete it eventually.
|
|
302
|
-
this.logger.warn(
|
|
332
|
+
this.logger.warn(
|
|
333
|
+
`Failed to delete share ${currentSharing.share.shareId} for node ${nodeUid}: ${getErrorMessage(error)}`,
|
|
334
|
+
);
|
|
303
335
|
}
|
|
304
336
|
return;
|
|
305
337
|
}
|
|
@@ -336,7 +368,7 @@ export class SharingManagement {
|
|
|
336
368
|
passphraseSessionKey: passphraseSessionKey,
|
|
337
369
|
},
|
|
338
370
|
nodeName: node.name.ok ? node.name.value : node.name.error.name,
|
|
339
|
-
}
|
|
371
|
+
};
|
|
340
372
|
}
|
|
341
373
|
|
|
342
374
|
private async createShare(nodeUid: string): Promise<Share> {
|
|
@@ -350,42 +382,47 @@ export class SharingManagement {
|
|
|
350
382
|
|
|
351
383
|
const nodeKeys = await this.nodesService.getNodePrivateAndSessionKeys(nodeUid);
|
|
352
384
|
const keys = await this.cryptoService.generateShareKeys(nodeKeys, addressKey);
|
|
353
|
-
const shareId = await this.apiService.createStandardShare(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
base64PassphraseKeyPacket: keys.base64PpassphraseKeyPacket,
|
|
359
|
-
base64NameKeyPacket: keys.base64NameKeyPacket,
|
|
360
|
-
},
|
|
361
|
-
);
|
|
362
|
-
|
|
363
|
-
await this.nodesEvents.nodeUpdated({ uid: nodeUid, shareId, isShared: true });
|
|
364
|
-
|
|
385
|
+
const shareId = await this.apiService.createStandardShare(nodeUid, addressId, keys.shareKey.encrypted, {
|
|
386
|
+
base64PassphraseKeyPacket: keys.base64PpassphraseKeyPacket,
|
|
387
|
+
base64NameKeyPacket: keys.base64NameKeyPacket,
|
|
388
|
+
});
|
|
389
|
+
await this.nodesService.notifyNodeChanged(nodeUid);
|
|
365
390
|
return {
|
|
366
391
|
volumeId,
|
|
367
392
|
shareId,
|
|
368
393
|
creatorEmail: email,
|
|
369
394
|
passphraseSessionKey: keys.shareKey.decrypted.passphraseSessionKey,
|
|
370
|
-
}
|
|
395
|
+
};
|
|
371
396
|
}
|
|
372
397
|
|
|
373
|
-
private async deleteShare(
|
|
398
|
+
private async deleteShare(shareId: string, nodeUid: string): Promise<void> {
|
|
374
399
|
await this.apiService.deleteShare(shareId);
|
|
375
|
-
|
|
376
|
-
await this.nodesEvents.nodeUpdated({ uid: nodeUid, shareId: undefined, isShared: false });
|
|
400
|
+
await this.nodesService.notifyNodeChanged(nodeUid);
|
|
377
401
|
}
|
|
378
402
|
|
|
379
|
-
private async inviteProtonUser(
|
|
403
|
+
private async inviteProtonUser(
|
|
404
|
+
share: Share,
|
|
405
|
+
inviteeEmail: string,
|
|
406
|
+
role: MemberRole,
|
|
407
|
+
emailOptions: EmailOptions,
|
|
408
|
+
): Promise<ProtonInvitation> {
|
|
380
409
|
const inviter = await this.sharesService.getContextShareMemberEmailKey(share.shareId);
|
|
381
|
-
const invitationCrypto = await this.cryptoService.encryptInvitation(
|
|
410
|
+
const invitationCrypto = await this.cryptoService.encryptInvitation(
|
|
411
|
+
share.passphraseSessionKey,
|
|
412
|
+
inviter.addressKey,
|
|
413
|
+
inviteeEmail,
|
|
414
|
+
);
|
|
382
415
|
|
|
383
|
-
const encryptedInvitation = await this.apiService.inviteProtonUser(
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
416
|
+
const encryptedInvitation = await this.apiService.inviteProtonUser(
|
|
417
|
+
share.shareId,
|
|
418
|
+
{
|
|
419
|
+
addedByEmail: inviter.email,
|
|
420
|
+
inviteeEmail: inviteeEmail,
|
|
421
|
+
role,
|
|
422
|
+
...invitationCrypto,
|
|
423
|
+
},
|
|
424
|
+
emailOptions,
|
|
425
|
+
);
|
|
389
426
|
|
|
390
427
|
return {
|
|
391
428
|
...encryptedInvitation,
|
|
@@ -409,7 +446,9 @@ export class SharingManagement {
|
|
|
409
446
|
return await this.apiService.resendInvitationEmail(protonInvite.uid);
|
|
410
447
|
}
|
|
411
448
|
|
|
412
|
-
const nonProtonInvite = currentSharing.nonProtonInvitations.find(
|
|
449
|
+
const nonProtonInvite = currentSharing.nonProtonInvitations.find(
|
|
450
|
+
(invitation) => invitation.uid === invitationUid,
|
|
451
|
+
);
|
|
413
452
|
if (nonProtonInvite) {
|
|
414
453
|
return await this.apiService.resendExternalInvitationEmail(nonProtonInvite.uid);
|
|
415
454
|
}
|
|
@@ -421,16 +460,29 @@ export class SharingManagement {
|
|
|
421
460
|
await this.apiService.deleteInvitation(invitationUid);
|
|
422
461
|
}
|
|
423
462
|
|
|
424
|
-
private async inviteExternalUser(
|
|
463
|
+
private async inviteExternalUser(
|
|
464
|
+
share: Share,
|
|
465
|
+
inviteeEmail: string,
|
|
466
|
+
role: MemberRole,
|
|
467
|
+
emailOptions: EmailOptions,
|
|
468
|
+
): Promise<NonProtonInvitation> {
|
|
425
469
|
const inviter = await this.sharesService.getContextShareMemberEmailKey(share.shareId);
|
|
426
|
-
const invitationCrypto = await this.cryptoService.encryptExternalInvitation(
|
|
470
|
+
const invitationCrypto = await this.cryptoService.encryptExternalInvitation(
|
|
471
|
+
share.passphraseSessionKey,
|
|
472
|
+
inviter.addressKey,
|
|
473
|
+
inviteeEmail,
|
|
474
|
+
);
|
|
427
475
|
|
|
428
|
-
const encryptedInvitation = await this.apiService.inviteExternalUser(
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
476
|
+
const encryptedInvitation = await this.apiService.inviteExternalUser(
|
|
477
|
+
share.shareId,
|
|
478
|
+
{
|
|
479
|
+
inviterAddressId: inviter.addressId,
|
|
480
|
+
inviteeEmail: inviteeEmail,
|
|
481
|
+
role,
|
|
482
|
+
base64Signature: invitationCrypto.base64ExternalInvitationSignature,
|
|
483
|
+
},
|
|
484
|
+
emailOptions,
|
|
485
|
+
);
|
|
434
486
|
|
|
435
487
|
return {
|
|
436
488
|
uid: encryptedInvitation.uid,
|
|
@@ -446,7 +498,6 @@ export class SharingManagement {
|
|
|
446
498
|
await this.apiService.updateExternalInvitation(invitationUid, { role });
|
|
447
499
|
}
|
|
448
500
|
|
|
449
|
-
|
|
450
501
|
private async deleteExternalInvitation(invitationUid: string): Promise<void> {
|
|
451
502
|
await this.apiService.deleteExternalInvitation(invitationUid);
|
|
452
503
|
}
|
|
@@ -463,13 +514,20 @@ export class SharingManagement {
|
|
|
463
514
|
await this.apiService.updateMember(memberUid, { role });
|
|
464
515
|
}
|
|
465
516
|
|
|
466
|
-
private async shareViaLink(
|
|
517
|
+
private async shareViaLink(
|
|
518
|
+
share: Share,
|
|
519
|
+
options: SharePublicLinkSettingsObject,
|
|
520
|
+
): Promise<PublicLinkWithCreatorEmail> {
|
|
467
521
|
const { email: creatorEmail } = await this.sharesService.getContextShareMemberEmailKey(share.shareId);
|
|
468
522
|
|
|
469
523
|
const generatedPassword = await this.cryptoService.generatePublicLinkPassword();
|
|
470
524
|
const password = options.customPassword ? `${generatedPassword}${options.customPassword}` : generatedPassword;
|
|
471
525
|
|
|
472
|
-
const { crypto, srp } = await this.cryptoService.encryptPublicLink(
|
|
526
|
+
const { crypto, srp } = await this.cryptoService.encryptPublicLink(
|
|
527
|
+
creatorEmail,
|
|
528
|
+
share.passphraseSessionKey,
|
|
529
|
+
password,
|
|
530
|
+
);
|
|
473
531
|
const publicLink = await this.apiService.createPublicLink(share.shareId, {
|
|
474
532
|
creatorEmail,
|
|
475
533
|
role: options.role,
|
|
@@ -486,19 +544,30 @@ export class SharingManagement {
|
|
|
486
544
|
url: `${publicLink.publicUrl}#${generatedPassword}`,
|
|
487
545
|
customPassword: options.customPassword,
|
|
488
546
|
expirationTime: options.expiration,
|
|
547
|
+
numberOfInitializedDownloads: 0,
|
|
489
548
|
creatorEmail,
|
|
490
|
-
}
|
|
549
|
+
};
|
|
491
550
|
}
|
|
492
551
|
|
|
493
|
-
private async updateSharedLink(
|
|
552
|
+
private async updateSharedLink(
|
|
553
|
+
share: Share,
|
|
554
|
+
publicLink: PublicLinkWithCreatorEmail,
|
|
555
|
+
options: SharePublicLinkSettingsObject,
|
|
556
|
+
): Promise<PublicLinkWithCreatorEmail> {
|
|
494
557
|
const generatedPassword = publicLink.url.split('#')[1];
|
|
495
558
|
// Legacy public links didn't have generated password or had various lengths.
|
|
496
559
|
if (!generatedPassword || generatedPassword.length !== PUBLIC_LINK_GENERATED_PASSWORD_LENGTH) {
|
|
497
|
-
throw new ValidationError(
|
|
560
|
+
throw new ValidationError(
|
|
561
|
+
c('Error').t`Legacy public link cannot be updated. Please re-create a new public link.`,
|
|
562
|
+
);
|
|
498
563
|
}
|
|
499
564
|
const password = options.customPassword ? `${generatedPassword}${options.customPassword}` : generatedPassword;
|
|
500
565
|
|
|
501
|
-
const { crypto, srp } = await this.cryptoService.encryptPublicLink(
|
|
566
|
+
const { crypto, srp } = await this.cryptoService.encryptPublicLink(
|
|
567
|
+
publicLink.creatorEmail,
|
|
568
|
+
share.passphraseSessionKey,
|
|
569
|
+
password,
|
|
570
|
+
);
|
|
502
571
|
await this.apiService.updatePublicLink(publicLink.uid, {
|
|
503
572
|
role: options.role,
|
|
504
573
|
includesCustomPassword: !!options.customPassword,
|
|
@@ -512,7 +581,7 @@ export class SharingManagement {
|
|
|
512
581
|
role: options.role,
|
|
513
582
|
customPassword: options.customPassword,
|
|
514
583
|
expirationTime: options.expiration,
|
|
515
|
-
}
|
|
584
|
+
};
|
|
516
585
|
}
|
|
517
586
|
|
|
518
587
|
private async removeSharedLink(publicLinkUid: string): Promise<void> {
|
package/src/internal/uids.ts
CHANGED
|
@@ -7,7 +7,7 @@ export function splitDeviceUid(deviceUid: string) {
|
|
|
7
7
|
if (parts.length !== 2) {
|
|
8
8
|
throw new Error(`"${deviceUid}" is not valid device UID`);
|
|
9
9
|
}
|
|
10
|
-
const [
|
|
10
|
+
const [volumeId, deviceId] = parts;
|
|
11
11
|
return { volumeId, deviceId };
|
|
12
12
|
}
|
|
13
13
|
|