@protontech/drive-sdk 0.0.10
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/README.md +17 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/interface.d.ts +105 -0
- package/dist/cache/interface.js +3 -0
- package/dist/cache/interface.js.map +1 -0
- package/dist/cache/memoryCache.d.ts +18 -0
- package/dist/cache/memoryCache.js +78 -0
- package/dist/cache/memoryCache.js.map +1 -0
- package/dist/cache/memoryCache.test.d.ts +1 -0
- package/dist/cache/memoryCache.test.js +121 -0
- package/dist/cache/memoryCache.test.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/driveCrypto.d.ts +209 -0
- package/dist/crypto/driveCrypto.js +364 -0
- package/dist/crypto/driveCrypto.js.map +1 -0
- package/dist/crypto/driveCrypto.test.d.ts +1 -0
- package/dist/crypto/driveCrypto.test.js +42 -0
- package/dist/crypto/driveCrypto.test.js.map +1 -0
- package/dist/crypto/hmac.d.ts +22 -0
- package/dist/crypto/hmac.js +44 -0
- package/dist/crypto/hmac.js.map +1 -0
- package/dist/crypto/index.d.ts +6 -0
- package/dist/crypto/index.js +13 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/interface.d.ts +125 -0
- package/dist/crypto/interface.js +10 -0
- package/dist/crypto/interface.js.map +1 -0
- package/dist/crypto/openPGPCrypto.d.ts +145 -0
- package/dist/crypto/openPGPCrypto.js +250 -0
- package/dist/crypto/openPGPCrypto.js.map +1 -0
- package/dist/crypto/utils.d.ts +2 -0
- package/dist/crypto/utils.js +35 -0
- package/dist/crypto/utils.js.map +1 -0
- package/dist/errors.d.ts +138 -0
- package/dist/errors.js +163 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/account.d.ts +36 -0
- package/dist/interface/account.js +3 -0
- package/dist/interface/account.js.map +1 -0
- package/dist/interface/author.d.ts +26 -0
- package/dist/interface/author.js +3 -0
- package/dist/interface/author.js.map +1 -0
- package/dist/interface/devices.d.ts +18 -0
- package/dist/interface/devices.js +10 -0
- package/dist/interface/devices.js.map +1 -0
- package/dist/interface/download.d.ts +29 -0
- package/dist/interface/download.js +3 -0
- package/dist/interface/download.js.map +1 -0
- package/dist/interface/events.d.ts +26 -0
- package/dist/interface/events.js +11 -0
- package/dist/interface/events.js.map +1 -0
- package/dist/interface/httpClient.d.ts +38 -0
- package/dist/interface/httpClient.js +3 -0
- package/dist/interface/httpClient.js.map +1 -0
- package/dist/interface/index.d.ts +43 -0
- package/dist/interface/index.js +22 -0
- package/dist/interface/index.js.map +1 -0
- package/dist/interface/nodes.d.ts +161 -0
- package/dist/interface/nodes.js +21 -0
- package/dist/interface/nodes.js.map +1 -0
- package/dist/interface/result.d.ts +9 -0
- package/dist/interface/result.js +11 -0
- package/dist/interface/result.js.map +1 -0
- package/dist/interface/sharing.d.ts +73 -0
- package/dist/interface/sharing.js +9 -0
- package/dist/interface/sharing.js.map +1 -0
- package/dist/interface/telemetry.d.ts +61 -0
- package/dist/interface/telemetry.js +18 -0
- package/dist/interface/telemetry.js.map +1 -0
- package/dist/interface/thumbnail.d.ts +17 -0
- package/dist/interface/thumbnail.js +9 -0
- package/dist/interface/thumbnail.js.map +1 -0
- package/dist/interface/upload.d.ts +16 -0
- package/dist/interface/upload.js +3 -0
- package/dist/interface/upload.js.map +1 -0
- package/dist/internal/apiService/apiService.d.ts +51 -0
- package/dist/internal/apiService/apiService.js +305 -0
- package/dist/internal/apiService/apiService.js.map +1 -0
- package/dist/internal/apiService/apiService.test.d.ts +1 -0
- package/dist/internal/apiService/apiService.test.js +237 -0
- package/dist/internal/apiService/apiService.test.js.map +1 -0
- package/dist/internal/apiService/coreTypes.d.ts +24438 -0
- package/dist/internal/apiService/coreTypes.js +7 -0
- package/dist/internal/apiService/coreTypes.js.map +1 -0
- package/dist/internal/apiService/driveTypes.d.ts +11840 -0
- package/dist/internal/apiService/driveTypes.js +7 -0
- package/dist/internal/apiService/driveTypes.js.map +1 -0
- package/dist/internal/apiService/errorCodes.d.ts +30 -0
- package/dist/internal/apiService/errorCodes.js +11 -0
- package/dist/internal/apiService/errorCodes.js.map +1 -0
- package/dist/internal/apiService/errors.d.ts +19 -0
- package/dist/internal/apiService/errors.js +76 -0
- package/dist/internal/apiService/errors.js.map +1 -0
- package/dist/internal/apiService/errors.test.d.ts +1 -0
- package/dist/internal/apiService/errors.test.js +69 -0
- package/dist/internal/apiService/errors.test.js.map +1 -0
- package/dist/internal/apiService/index.d.ts +7 -0
- package/dist/internal/apiService/index.js +30 -0
- package/dist/internal/apiService/index.js.map +1 -0
- package/dist/internal/apiService/observerStream.d.ts +3 -0
- package/dist/internal/apiService/observerStream.js +15 -0
- package/dist/internal/apiService/observerStream.js.map +1 -0
- package/dist/internal/apiService/transformers.d.ts +4 -0
- package/dist/internal/apiService/transformers.js +48 -0
- package/dist/internal/apiService/transformers.js.map +1 -0
- package/dist/internal/batchLoading.d.ts +34 -0
- package/dist/internal/batchLoading.js +68 -0
- package/dist/internal/batchLoading.js.map +1 -0
- package/dist/internal/batchLoading.test.d.ts +1 -0
- package/dist/internal/batchLoading.test.js +50 -0
- package/dist/internal/batchLoading.test.js.map +1 -0
- package/dist/internal/devices/apiService.d.ts +38 -0
- package/dist/internal/devices/apiService.js +105 -0
- package/dist/internal/devices/apiService.js.map +1 -0
- package/dist/internal/devices/cryptoService.d.ts +30 -0
- package/dist/internal/devices/cryptoService.js +47 -0
- package/dist/internal/devices/cryptoService.js.map +1 -0
- package/dist/internal/devices/index.d.ts +15 -0
- package/dist/internal/devices/index.js +22 -0
- package/dist/internal/devices/index.js.map +1 -0
- package/dist/internal/devices/interface.d.ts +31 -0
- package/dist/internal/devices/interface.js +3 -0
- package/dist/internal/devices/interface.js.map +1 -0
- package/dist/internal/devices/manager.d.ts +18 -0
- package/dist/internal/devices/manager.js +103 -0
- package/dist/internal/devices/manager.js.map +1 -0
- package/dist/internal/devices/manager.test.d.ts +1 -0
- package/dist/internal/devices/manager.test.js +100 -0
- package/dist/internal/devices/manager.test.js.map +1 -0
- package/dist/internal/download/apiService.d.ts +27 -0
- package/dist/internal/download/apiService.js +110 -0
- package/dist/internal/download/apiService.js.map +1 -0
- package/dist/internal/download/controller.d.ts +8 -0
- package/dist/internal/download/controller.js +22 -0
- package/dist/internal/download/controller.js.map +1 -0
- package/dist/internal/download/cryptoService.d.ts +17 -0
- package/dist/internal/download/cryptoService.js +82 -0
- package/dist/internal/download/cryptoService.js.map +1 -0
- package/dist/internal/download/fileDownloader.d.ts +33 -0
- package/dist/internal/download/fileDownloader.js +226 -0
- package/dist/internal/download/fileDownloader.js.map +1 -0
- package/dist/internal/download/fileDownloader.test.d.ts +1 -0
- package/dist/internal/download/fileDownloader.test.js +324 -0
- package/dist/internal/download/fileDownloader.test.js.map +1 -0
- package/dist/internal/download/index.d.ts +10 -0
- package/dist/internal/download/index.js +82 -0
- package/dist/internal/download/index.js.map +1 -0
- package/dist/internal/download/interface.d.ts +35 -0
- package/dist/internal/download/interface.js +3 -0
- package/dist/internal/download/interface.js.map +1 -0
- package/dist/internal/download/queue.d.ts +5 -0
- package/dist/internal/download/queue.js +31 -0
- package/dist/internal/download/queue.js.map +1 -0
- package/dist/internal/download/telemetry.d.ts +14 -0
- package/dist/internal/download/telemetry.js +106 -0
- package/dist/internal/download/telemetry.js.map +1 -0
- package/dist/internal/download/telemetry.test.d.ts +1 -0
- package/dist/internal/download/telemetry.test.js +111 -0
- package/dist/internal/download/telemetry.test.js.map +1 -0
- package/dist/internal/download/thumbnailDownloader.d.ts +19 -0
- package/dist/internal/download/thumbnailDownloader.js +198 -0
- package/dist/internal/download/thumbnailDownloader.js.map +1 -0
- package/dist/internal/download/thumbnailDownloader.test.d.ts +1 -0
- package/dist/internal/download/thumbnailDownloader.test.js +179 -0
- package/dist/internal/download/thumbnailDownloader.test.js.map +1 -0
- package/dist/internal/errors.d.ts +6 -0
- package/dist/internal/errors.js +28 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/errors.test.d.ts +1 -0
- package/dist/internal/errors.test.js +22 -0
- package/dist/internal/errors.test.js.map +1 -0
- package/dist/internal/events/apiService.d.ts +18 -0
- package/dist/internal/events/apiService.js +81 -0
- package/dist/internal/events/apiService.js.map +1 -0
- package/dist/internal/events/cache.d.ts +28 -0
- package/dist/internal/events/cache.js +67 -0
- package/dist/internal/events/cache.js.map +1 -0
- package/dist/internal/events/cache.test.d.ts +1 -0
- package/dist/internal/events/cache.test.js +43 -0
- package/dist/internal/events/cache.test.js.map +1 -0
- package/dist/internal/events/coreEventManager.d.ts +25 -0
- package/dist/internal/events/coreEventManager.js +63 -0
- package/dist/internal/events/coreEventManager.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +62 -0
- package/dist/internal/events/eventManager.js +159 -0
- package/dist/internal/events/eventManager.js.map +1 -0
- package/dist/internal/events/eventManager.test.d.ts +1 -0
- package/dist/internal/events/eventManager.test.js +120 -0
- package/dist/internal/events/eventManager.test.js.map +1 -0
- package/dist/internal/events/index.d.ts +50 -0
- package/dist/internal/events/index.js +117 -0
- package/dist/internal/events/index.js.map +1 -0
- package/dist/internal/events/interface.d.ts +47 -0
- package/dist/internal/events/interface.js +12 -0
- package/dist/internal/events/interface.js.map +1 -0
- package/dist/internal/events/volumeEventManager.d.ts +27 -0
- package/dist/internal/events/volumeEventManager.js +69 -0
- package/dist/internal/events/volumeEventManager.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +54 -0
- package/dist/internal/nodes/apiService.js +308 -0
- package/dist/internal/nodes/apiService.js.map +1 -0
- package/dist/internal/nodes/apiService.test.d.ts +1 -0
- package/dist/internal/nodes/apiService.test.js +344 -0
- package/dist/internal/nodes/apiService.test.js.map +1 -0
- package/dist/internal/nodes/cache.d.ts +57 -0
- package/dist/internal/nodes/cache.js +226 -0
- package/dist/internal/nodes/cache.js.map +1 -0
- package/dist/internal/nodes/cache.test.d.ts +1 -0
- package/dist/internal/nodes/cache.test.js +160 -0
- package/dist/internal/nodes/cache.test.js.map +1 -0
- package/dist/internal/nodes/cryptoCache.d.ts +16 -0
- package/dist/internal/nodes/cryptoCache.js +50 -0
- package/dist/internal/nodes/cryptoCache.js.map +1 -0
- package/dist/internal/nodes/cryptoCache.test.d.ts +1 -0
- package/dist/internal/nodes/cryptoCache.test.js +79 -0
- package/dist/internal/nodes/cryptoCache.test.js.map +1 -0
- package/dist/internal/nodes/cryptoService.d.ts +75 -0
- package/dist/internal/nodes/cryptoService.js +409 -0
- package/dist/internal/nodes/cryptoService.js.map +1 -0
- package/dist/internal/nodes/cryptoService.test.d.ts +1 -0
- package/dist/internal/nodes/cryptoService.test.js +698 -0
- package/dist/internal/nodes/cryptoService.test.js.map +1 -0
- package/dist/internal/nodes/events.d.ts +91 -0
- package/dist/internal/nodes/events.js +243 -0
- package/dist/internal/nodes/events.js.map +1 -0
- package/dist/internal/nodes/events.test.d.ts +1 -0
- package/dist/internal/nodes/events.test.js +318 -0
- package/dist/internal/nodes/events.test.js.map +1 -0
- package/dist/internal/nodes/extendedAttributes.d.ts +23 -0
- package/dist/internal/nodes/extendedAttributes.js +117 -0
- package/dist/internal/nodes/extendedAttributes.js.map +1 -0
- package/dist/internal/nodes/extendedAttributes.test.d.ts +1 -0
- package/dist/internal/nodes/extendedAttributes.test.js +176 -0
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -0
- package/dist/internal/nodes/index.d.ts +26 -0
- package/dist/internal/nodes/index.js +40 -0
- package/dist/internal/nodes/index.js.map +1 -0
- package/dist/internal/nodes/index.test.d.ts +1 -0
- package/dist/internal/nodes/index.test.js +112 -0
- package/dist/internal/nodes/index.test.js.map +1 -0
- package/dist/internal/nodes/interface.d.ts +135 -0
- package/dist/internal/nodes/interface.js +3 -0
- package/dist/internal/nodes/interface.js.map +1 -0
- package/dist/internal/nodes/mediaTypes.d.ts +2 -0
- package/dist/internal/nodes/mediaTypes.js +13 -0
- package/dist/internal/nodes/mediaTypes.js.map +1 -0
- package/dist/internal/nodes/nodesAccess.d.ts +49 -0
- package/dist/internal/nodes/nodesAccess.js +332 -0
- package/dist/internal/nodes/nodesAccess.js.map +1 -0
- package/dist/internal/nodes/nodesAccess.test.d.ts +1 -0
- package/dist/internal/nodes/nodesAccess.test.js +487 -0
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -0
- package/dist/internal/nodes/nodesManagement.d.ts +33 -0
- package/dist/internal/nodes/nodesManagement.js +222 -0
- package/dist/internal/nodes/nodesManagement.js.map +1 -0
- package/dist/internal/nodes/nodesManagement.test.d.ts +1 -0
- package/dist/internal/nodes/nodesManagement.test.js +178 -0
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -0
- package/dist/internal/nodes/nodesRevisions.d.ts +18 -0
- package/dist/internal/nodes/nodesRevisions.js +55 -0
- package/dist/internal/nodes/nodesRevisions.js.map +1 -0
- package/dist/internal/nodes/validations.d.ts +4 -0
- package/dist/internal/nodes/validations.js +21 -0
- package/dist/internal/nodes/validations.js.map +1 -0
- package/dist/internal/photos/albums.d.ts +13 -0
- package/dist/internal/photos/albums.js +30 -0
- package/dist/internal/photos/albums.js.map +1 -0
- package/dist/internal/photos/apiService.d.ts +8 -0
- package/dist/internal/photos/apiService.js +18 -0
- package/dist/internal/photos/apiService.js.map +1 -0
- package/dist/internal/photos/cache.d.ts +6 -0
- package/dist/internal/photos/cache.js +15 -0
- package/dist/internal/photos/cache.js.map +1 -0
- package/dist/internal/photos/index.d.ts +9 -0
- package/dist/internal/photos/index.js +18 -0
- package/dist/internal/photos/index.js.map +1 -0
- package/dist/internal/photos/interface.d.ts +6 -0
- package/dist/internal/photos/interface.js +3 -0
- package/dist/internal/photos/interface.js.map +1 -0
- package/dist/internal/photos/photosTimeline.d.ts +10 -0
- package/dist/internal/photos/photosTimeline.js +20 -0
- package/dist/internal/photos/photosTimeline.js.map +1 -0
- package/dist/internal/sdkEvents.d.ts +12 -0
- package/dist/internal/sdkEvents.js +44 -0
- package/dist/internal/sdkEvents.js.map +1 -0
- package/dist/internal/sdkEvents.test.d.ts +1 -0
- package/dist/internal/sdkEvents.test.js +45 -0
- package/dist/internal/sdkEvents.test.js.map +1 -0
- package/dist/internal/shares/apiService.d.ts +51 -0
- package/dist/internal/shares/apiService.js +128 -0
- package/dist/internal/shares/apiService.js.map +1 -0
- package/dist/internal/shares/cache.d.ts +15 -0
- package/dist/internal/shares/cache.js +63 -0
- package/dist/internal/shares/cache.js.map +1 -0
- package/dist/internal/shares/cache.test.d.ts +1 -0
- package/dist/internal/shares/cache.test.js +54 -0
- package/dist/internal/shares/cache.test.js.map +1 -0
- package/dist/internal/shares/cryptoCache.d.ts +20 -0
- package/dist/internal/shares/cryptoCache.js +35 -0
- package/dist/internal/shares/cryptoCache.js.map +1 -0
- package/dist/internal/shares/cryptoCache.test.d.ts +1 -0
- package/dist/internal/shares/cryptoCache.test.js +58 -0
- package/dist/internal/shares/cryptoCache.test.js.map +1 -0
- package/dist/internal/shares/cryptoService.d.ts +42 -0
- package/dist/internal/shares/cryptoService.js +126 -0
- package/dist/internal/shares/cryptoService.js.map +1 -0
- package/dist/internal/shares/cryptoService.test.d.ts +1 -0
- package/dist/internal/shares/cryptoService.test.js +120 -0
- package/dist/internal/shares/cryptoService.test.js.map +1 -0
- package/dist/internal/shares/index.d.ts +15 -0
- package/dist/internal/shares/index.js +26 -0
- package/dist/internal/shares/index.js.map +1 -0
- package/dist/internal/shares/interface.d.ts +94 -0
- package/dist/internal/shares/interface.js +11 -0
- package/dist/internal/shares/interface.js.map +1 -0
- package/dist/internal/shares/manager.d.ts +68 -0
- package/dist/internal/shares/manager.js +186 -0
- package/dist/internal/shares/manager.js.map +1 -0
- package/dist/internal/shares/manager.test.d.ts +1 -0
- package/dist/internal/shares/manager.test.js +176 -0
- package/dist/internal/shares/manager.test.js.map +1 -0
- package/dist/internal/sharing/apiService.d.ts +80 -0
- package/dist/internal/sharing/apiService.js +325 -0
- package/dist/internal/sharing/apiService.js.map +1 -0
- package/dist/internal/sharing/cache.d.ts +37 -0
- package/dist/internal/sharing/cache.js +105 -0
- package/dist/internal/sharing/cache.js.map +1 -0
- package/dist/internal/sharing/cache.test.d.ts +1 -0
- package/dist/internal/sharing/cache.test.js +82 -0
- package/dist/internal/sharing/cache.test.js.map +1 -0
- package/dist/internal/sharing/cryptoService.d.ts +112 -0
- package/dist/internal/sharing/cryptoService.js +269 -0
- package/dist/internal/sharing/cryptoService.js.map +1 -0
- package/dist/internal/sharing/events.d.ts +57 -0
- package/dist/internal/sharing/events.js +153 -0
- package/dist/internal/sharing/events.js.map +1 -0
- package/dist/internal/sharing/events.test.d.ts +1 -0
- package/dist/internal/sharing/events.test.js +246 -0
- package/dist/internal/sharing/events.test.js.map +1 -0
- package/dist/internal/sharing/index.d.ts +20 -0
- package/dist/internal/sharing/index.js +30 -0
- package/dist/internal/sharing/index.js.map +1 -0
- package/dist/internal/sharing/interface.d.ts +169 -0
- package/dist/internal/sharing/interface.js +9 -0
- package/dist/internal/sharing/interface.js.map +1 -0
- package/dist/internal/sharing/sharingAccess.d.ts +32 -0
- package/dist/internal/sharing/sharingAccess.js +119 -0
- package/dist/internal/sharing/sharingAccess.js.map +1 -0
- package/dist/internal/sharing/sharingAccess.test.d.ts +1 -0
- package/dist/internal/sharing/sharingAccess.test.js +84 -0
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -0
- package/dist/internal/sharing/sharingManagement.d.ts +43 -0
- package/dist/internal/sharing/sharingManagement.js +439 -0
- package/dist/internal/sharing/sharingManagement.js.map +1 -0
- package/dist/internal/sharing/sharingManagement.test.d.ts +1 -0
- package/dist/internal/sharing/sharingManagement.test.js +788 -0
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -0
- package/dist/internal/uids.d.ts +38 -0
- package/dist/internal/uids.js +85 -0
- package/dist/internal/uids.js.map +1 -0
- package/dist/internal/upload/apiService.d.ts +65 -0
- package/dist/internal/upload/apiService.js +137 -0
- package/dist/internal/upload/apiService.js.map +1 -0
- package/dist/internal/upload/blockVerifier.d.ts +16 -0
- package/dist/internal/upload/blockVerifier.js +33 -0
- package/dist/internal/upload/blockVerifier.js.map +1 -0
- package/dist/internal/upload/chunkStreamReader.d.ts +13 -0
- package/dist/internal/upload/chunkStreamReader.js +46 -0
- package/dist/internal/upload/chunkStreamReader.js.map +1 -0
- package/dist/internal/upload/chunkStreamReader.test.d.ts +1 -0
- package/dist/internal/upload/chunkStreamReader.test.js +75 -0
- package/dist/internal/upload/chunkStreamReader.test.js.map +1 -0
- package/dist/internal/upload/controller.d.ts +8 -0
- package/dist/internal/upload/controller.js +25 -0
- package/dist/internal/upload/controller.js.map +1 -0
- package/dist/internal/upload/cryptoService.d.ts +29 -0
- package/dist/internal/upload/cryptoService.js +104 -0
- package/dist/internal/upload/cryptoService.js.map +1 -0
- package/dist/internal/upload/digests.d.ts +8 -0
- package/dist/internal/upload/digests.js +22 -0
- package/dist/internal/upload/digests.js.map +1 -0
- package/dist/internal/upload/fileUploader.d.ts +65 -0
- package/dist/internal/upload/fileUploader.js +463 -0
- package/dist/internal/upload/fileUploader.js.map +1 -0
- package/dist/internal/upload/fileUploader.test.d.ts +1 -0
- package/dist/internal/upload/fileUploader.test.js +393 -0
- package/dist/internal/upload/fileUploader.test.js.map +1 -0
- package/dist/internal/upload/index.d.ts +16 -0
- package/dist/internal/upload/index.js +77 -0
- package/dist/internal/upload/index.js.map +1 -0
- package/dist/internal/upload/interface.d.ts +117 -0
- package/dist/internal/upload/interface.js +3 -0
- package/dist/internal/upload/interface.js.map +1 -0
- package/dist/internal/upload/manager.d.ts +31 -0
- package/dist/internal/upload/manager.js +250 -0
- package/dist/internal/upload/manager.js.map +1 -0
- package/dist/internal/upload/manager.test.d.ts +1 -0
- package/dist/internal/upload/manager.test.js +349 -0
- package/dist/internal/upload/manager.test.js.map +1 -0
- package/dist/internal/upload/queue.d.ts +5 -0
- package/dist/internal/upload/queue.js +32 -0
- package/dist/internal/upload/queue.js.map +1 -0
- package/dist/internal/upload/telemetry.d.ts +15 -0
- package/dist/internal/upload/telemetry.js +111 -0
- package/dist/internal/upload/telemetry.js.map +1 -0
- package/dist/internal/upload/telemetry.test.d.ts +1 -0
- package/dist/internal/upload/telemetry.test.js +107 -0
- package/dist/internal/upload/telemetry.test.js.map +1 -0
- package/dist/internal/utils.d.ts +1 -0
- package/dist/internal/utils.js +13 -0
- package/dist/internal/utils.js.map +1 -0
- package/dist/internal/wait.d.ts +3 -0
- package/dist/internal/wait.js +28 -0
- package/dist/internal/wait.js.map +1 -0
- package/dist/internal/wait.test.d.ts +1 -0
- package/dist/internal/wait.test.js +21 -0
- package/dist/internal/wait.test.js.map +1 -0
- package/dist/protonDriveClient.d.ts +593 -0
- package/dist/protonDriveClient.js +768 -0
- package/dist/protonDriveClient.js.map +1 -0
- package/dist/protonDrivePhotosClient.d.ts +16 -0
- package/dist/protonDrivePhotosClient.js +46 -0
- package/dist/protonDrivePhotosClient.js.map +1 -0
- package/dist/telemetry.d.ts +187 -0
- package/dist/telemetry.js +297 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tests/logger.d.ts +2 -0
- package/dist/tests/logger.js +12 -0
- package/dist/tests/logger.js.map +1 -0
- package/dist/tests/telemetry.d.ts +2 -0
- package/dist/tests/telemetry.js +11 -0
- package/dist/tests/telemetry.js.map +1 -0
- package/dist/transformers.d.ts +17 -0
- package/dist/transformers.js +77 -0
- package/dist/transformers.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
- package/src/cache/index.ts +2 -0
- package/src/cache/interface.ts +104 -0
- package/src/cache/memoryCache.test.ts +150 -0
- package/src/cache/memoryCache.ts +85 -0
- package/src/config.ts +9 -0
- package/src/crypto/driveCrypto.test.ts +45 -0
- package/src/crypto/driveCrypto.ts +696 -0
- package/src/crypto/hmac.ts +46 -0
- package/src/crypto/index.ts +6 -0
- package/src/crypto/interface.ts +230 -0
- package/src/crypto/openPGPCrypto.ts +398 -0
- package/src/crypto/utils.ts +40 -0
- package/src/errors.ts +168 -0
- package/src/index.ts +30 -0
- package/src/interface/account.ts +38 -0
- package/src/interface/author.ts +29 -0
- package/src/interface/devices.ts +21 -0
- package/src/interface/download.ts +32 -0
- package/src/interface/events.ts +30 -0
- package/src/interface/httpClient.ts +42 -0
- package/src/interface/index.ts +46 -0
- package/src/interface/nodes.ts +168 -0
- package/src/interface/result.ts +11 -0
- package/src/interface/sharing.ts +87 -0
- package/src/interface/telemetry.ts +107 -0
- package/src/interface/thumbnail.ts +14 -0
- package/src/interface/upload.ts +19 -0
- package/src/internal/apiService/apiService.test.ts +285 -0
- package/src/internal/apiService/apiService.ts +353 -0
- package/src/internal/apiService/coreTypes.ts +24439 -0
- package/src/internal/apiService/driveTypes.ts +11841 -0
- package/src/internal/apiService/errorCodes.ts +38 -0
- package/src/internal/apiService/errors.test.ts +63 -0
- package/src/internal/apiService/errors.ts +91 -0
- package/src/internal/apiService/index.ts +7 -0
- package/src/internal/apiService/observerStream.ts +10 -0
- package/src/internal/apiService/transformers.ts +45 -0
- package/src/internal/batchLoading.test.ts +58 -0
- package/src/internal/batchLoading.ts +74 -0
- package/src/internal/devices/apiService.ts +142 -0
- package/src/internal/devices/cryptoService.ts +65 -0
- package/src/internal/devices/index.ts +31 -0
- package/src/internal/devices/interface.ts +28 -0
- package/src/internal/devices/manager.test.ts +129 -0
- package/src/internal/devices/manager.ts +113 -0
- package/src/internal/download/apiService.ts +145 -0
- package/src/internal/download/controller.ts +22 -0
- package/src/internal/download/cryptoService.ts +96 -0
- package/src/internal/download/fileDownloader.test.ts +381 -0
- package/src/internal/download/fileDownloader.ts +266 -0
- package/src/internal/download/index.ts +122 -0
- package/src/internal/download/interface.ts +38 -0
- package/src/internal/download/queue.ts +30 -0
- package/src/internal/download/telemetry.test.ts +134 -0
- package/src/internal/download/telemetry.ts +115 -0
- package/src/internal/download/thumbnailDownloader.test.ts +226 -0
- package/src/internal/download/thumbnailDownloader.ts +250 -0
- package/src/internal/errors.test.ts +21 -0
- package/src/internal/errors.ts +28 -0
- package/src/internal/events/apiService.ts +87 -0
- package/src/internal/events/cache.test.ts +47 -0
- package/src/internal/events/cache.ts +80 -0
- package/src/internal/events/coreEventManager.ts +69 -0
- package/src/internal/events/eventManager.test.ts +139 -0
- package/src/internal/events/eventManager.ts +168 -0
- package/src/internal/events/index.ts +131 -0
- package/src/internal/events/interface.ts +51 -0
- package/src/internal/events/volumeEventManager.ts +74 -0
- package/src/internal/nodes/apiService.test.ts +394 -0
- package/src/internal/nodes/apiService.ts +455 -0
- package/src/internal/nodes/cache.test.ts +197 -0
- package/src/internal/nodes/cache.ts +240 -0
- package/src/internal/nodes/cryptoCache.test.ts +92 -0
- package/src/internal/nodes/cryptoCache.ts +47 -0
- package/src/internal/nodes/cryptoService.test.ts +814 -0
- package/src/internal/nodes/cryptoService.ts +550 -0
- package/src/internal/nodes/events.test.ts +383 -0
- package/src/internal/nodes/events.ts +271 -0
- package/src/internal/nodes/extendedAttributes.test.ts +177 -0
- package/src/internal/nodes/extendedAttributes.ts +180 -0
- package/src/internal/nodes/index.test.ts +135 -0
- package/src/internal/nodes/index.ts +52 -0
- package/src/internal/nodes/interface.ts +152 -0
- package/src/internal/nodes/mediaTypes.ts +10 -0
- package/src/internal/nodes/nodesAccess.test.ts +555 -0
- package/src/internal/nodes/nodesAccess.ts +360 -0
- package/src/internal/nodes/nodesManagement.test.ts +221 -0
- package/src/internal/nodes/nodesManagement.ts +272 -0
- package/src/internal/nodes/nodesRevisions.ts +58 -0
- package/src/internal/nodes/validations.ts +26 -0
- package/src/internal/photos/albums.ts +29 -0
- package/src/internal/photos/apiService.ts +16 -0
- package/src/internal/photos/cache.ts +11 -0
- package/src/internal/photos/index.ts +23 -0
- package/src/internal/photos/interface.ts +7 -0
- package/src/internal/photos/photosTimeline.ts +18 -0
- package/src/internal/sdkEvents.test.ts +55 -0
- package/src/internal/sdkEvents.ts +52 -0
- package/src/internal/shares/apiService.ts +176 -0
- package/src/internal/shares/cache.test.ts +58 -0
- package/src/internal/shares/cache.ts +64 -0
- package/src/internal/shares/cryptoCache.test.ts +70 -0
- package/src/internal/shares/cryptoCache.ts +35 -0
- package/src/internal/shares/cryptoService.test.ts +137 -0
- package/src/internal/shares/cryptoService.ts +143 -0
- package/src/internal/shares/index.ts +35 -0
- package/src/internal/shares/interface.ts +104 -0
- package/src/internal/shares/manager.test.ts +210 -0
- package/src/internal/shares/manager.ts +213 -0
- package/src/internal/sharing/apiService.ts +483 -0
- package/src/internal/sharing/cache.test.ts +99 -0
- package/src/internal/sharing/cache.ts +109 -0
- package/src/internal/sharing/cryptoService.ts +378 -0
- package/src/internal/sharing/events.test.ts +268 -0
- package/src/internal/sharing/events.ts +166 -0
- package/src/internal/sharing/index.ts +43 -0
- package/src/internal/sharing/interface.ts +177 -0
- package/src/internal/sharing/sharingAccess.test.ts +102 -0
- package/src/internal/sharing/sharingAccess.ts +133 -0
- package/src/internal/sharing/sharingManagement.test.ts +895 -0
- package/src/internal/sharing/sharingManagement.ts +521 -0
- package/src/internal/uids.ts +83 -0
- package/src/internal/upload/apiService.ts +243 -0
- package/src/internal/upload/blockVerifier.ts +40 -0
- package/src/internal/upload/chunkStreamReader.test.ts +89 -0
- package/src/internal/upload/chunkStreamReader.ts +49 -0
- package/src/internal/upload/controller.ts +25 -0
- package/src/internal/upload/cryptoService.ts +162 -0
- package/src/internal/upload/digests.ts +18 -0
- package/src/internal/upload/fileUploader.test.ts +513 -0
- package/src/internal/upload/fileUploader.ts +576 -0
- package/src/internal/upload/index.ts +126 -0
- package/src/internal/upload/interface.ts +128 -0
- package/src/internal/upload/manager.test.ts +390 -0
- package/src/internal/upload/manager.ts +320 -0
- package/src/internal/upload/queue.ts +31 -0
- package/src/internal/upload/telemetry.test.ts +129 -0
- package/src/internal/upload/telemetry.ts +121 -0
- package/src/internal/utils.ts +9 -0
- package/src/internal/wait.test.ts +21 -0
- package/src/internal/wait.ts +26 -0
- package/src/protonDriveClient.ts +861 -0
- package/src/protonDrivePhotosClient.ts +56 -0
- package/src/telemetry.ts +346 -0
- package/src/tests/logger.ts +10 -0
- package/src/tests/telemetry.ts +9 -0
- package/src/transformers.ts +98 -0
- package/src/version.ts +4 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cache_1 = require("../../cache");
|
|
4
|
+
const cryptoCache_1 = require("./cryptoCache");
|
|
5
|
+
describe('sharesCryptoCache', () => {
|
|
6
|
+
let memoryCache;
|
|
7
|
+
let cache;
|
|
8
|
+
const generatePrivateKey = (name) => {
|
|
9
|
+
return name;
|
|
10
|
+
};
|
|
11
|
+
const generateSessionKey = (name) => {
|
|
12
|
+
return name;
|
|
13
|
+
};
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
memoryCache = new cache_1.MemoryCache();
|
|
16
|
+
cache = new cryptoCache_1.SharesCryptoCache(memoryCache);
|
|
17
|
+
});
|
|
18
|
+
it('should store and retrieve keys', async () => {
|
|
19
|
+
const shareId = 'newShareId';
|
|
20
|
+
const keys = { key: generatePrivateKey('privateKey'), passphraseSessionKey: generateSessionKey('sessionKey') };
|
|
21
|
+
await cache.setShareKey(shareId, keys);
|
|
22
|
+
const result = await cache.getShareKey(shareId);
|
|
23
|
+
expect(result).toStrictEqual(keys);
|
|
24
|
+
});
|
|
25
|
+
it('should replace and retrieve new keys', async () => {
|
|
26
|
+
const shareId = 'newShareId';
|
|
27
|
+
const keys1 = { key: generatePrivateKey('privateKey1'), passphraseSessionKey: generateSessionKey('sessionKey1') };
|
|
28
|
+
const keys2 = { key: generatePrivateKey('privateKey2'), passphraseSessionKey: generateSessionKey('sessionKey2') };
|
|
29
|
+
await cache.setShareKey(shareId, keys1);
|
|
30
|
+
await cache.setShareKey(shareId, keys2);
|
|
31
|
+
const result = await cache.getShareKey(shareId);
|
|
32
|
+
expect(result).toStrictEqual(keys2);
|
|
33
|
+
});
|
|
34
|
+
it('should remove keys', async () => {
|
|
35
|
+
const shareId = 'newShareId';
|
|
36
|
+
const keys = { key: generatePrivateKey('privateKey'), passphraseSessionKey: generateSessionKey('sessionKey') };
|
|
37
|
+
await cache.setShareKey(shareId, keys);
|
|
38
|
+
await cache.removeShareKey([shareId]);
|
|
39
|
+
try {
|
|
40
|
+
await cache.getShareKey(shareId);
|
|
41
|
+
throw new Error('Should have thrown an error');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
expect(`${error}`).toBe('Error: Entity not found');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('should throw an error when retrieving a non-existing entity', async () => {
|
|
48
|
+
const shareId = 'newShareId';
|
|
49
|
+
try {
|
|
50
|
+
await cache.getShareKey(shareId);
|
|
51
|
+
throw new Error('Should have thrown an error');
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
expect(`${error}`).toBe('Error: Entity not found');
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=cryptoCache.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoCache.test.js","sourceRoot":"","sources":["../../../src/internal/shares/cryptoCache.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ProtonDriveAccount, ProtonDriveTelemetry } from "../../interface";
|
|
2
|
+
import { DriveCrypto, PrivateKey } from "../../crypto";
|
|
3
|
+
import { EncryptedRootShare, DecryptedRootShare, EncryptedShareCrypto, DecryptedShareKey } from "./interface";
|
|
4
|
+
/**
|
|
5
|
+
* Provides crypto operations for share keys.
|
|
6
|
+
*
|
|
7
|
+
* The share crypto service is responsible for encrypting and decrypting share
|
|
8
|
+
* keys. It should export high-level actions only, such as "decrypt share"
|
|
9
|
+
* instead of low-level operations like "decrypt share passphrase". Low-level
|
|
10
|
+
* operations should be kept private to the module.
|
|
11
|
+
*
|
|
12
|
+
* The service owns the logic to switch between old and new crypto model.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SharesCryptoService {
|
|
15
|
+
private telemetry;
|
|
16
|
+
private driveCrypto;
|
|
17
|
+
private account;
|
|
18
|
+
private logger;
|
|
19
|
+
private reportedDecryptionErrors;
|
|
20
|
+
private reportedVerificationErrors;
|
|
21
|
+
constructor(telemetry: ProtonDriveTelemetry, driveCrypto: DriveCrypto, account: ProtonDriveAccount);
|
|
22
|
+
generateVolumeBootstrap(addressKey: PrivateKey): Promise<{
|
|
23
|
+
shareKey: {
|
|
24
|
+
encrypted: EncryptedShareCrypto;
|
|
25
|
+
decrypted: DecryptedShareKey;
|
|
26
|
+
};
|
|
27
|
+
rootNode: {
|
|
28
|
+
key: {
|
|
29
|
+
encrypted: EncryptedShareCrypto;
|
|
30
|
+
decrypted: DecryptedShareKey;
|
|
31
|
+
};
|
|
32
|
+
encryptedName: string;
|
|
33
|
+
armoredHashKey: string;
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
decryptRootShare(share: EncryptedRootShare): Promise<{
|
|
37
|
+
share: DecryptedRootShare;
|
|
38
|
+
key: DecryptedShareKey;
|
|
39
|
+
}>;
|
|
40
|
+
private reportDecryptionError;
|
|
41
|
+
private reportVerificationError;
|
|
42
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SharesCryptoService = void 0;
|
|
4
|
+
const interface_1 = require("../../interface");
|
|
5
|
+
const crypto_1 = require("../../crypto");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
const interface_2 = require("./interface");
|
|
8
|
+
/**
|
|
9
|
+
* Provides crypto operations for share keys.
|
|
10
|
+
*
|
|
11
|
+
* The share crypto service is responsible for encrypting and decrypting share
|
|
12
|
+
* keys. It should export high-level actions only, such as "decrypt share"
|
|
13
|
+
* instead of low-level operations like "decrypt share passphrase". Low-level
|
|
14
|
+
* operations should be kept private to the module.
|
|
15
|
+
*
|
|
16
|
+
* The service owns the logic to switch between old and new crypto model.
|
|
17
|
+
*/
|
|
18
|
+
class SharesCryptoService {
|
|
19
|
+
telemetry;
|
|
20
|
+
driveCrypto;
|
|
21
|
+
account;
|
|
22
|
+
logger;
|
|
23
|
+
reportedDecryptionErrors = new Set();
|
|
24
|
+
reportedVerificationErrors = new Set();
|
|
25
|
+
constructor(telemetry, driveCrypto, account) {
|
|
26
|
+
this.telemetry = telemetry;
|
|
27
|
+
this.driveCrypto = driveCrypto;
|
|
28
|
+
this.account = account;
|
|
29
|
+
this.telemetry = telemetry;
|
|
30
|
+
this.logger = telemetry.getLogger('shares-crypto');
|
|
31
|
+
this.driveCrypto = driveCrypto;
|
|
32
|
+
this.account = account;
|
|
33
|
+
}
|
|
34
|
+
async generateVolumeBootstrap(addressKey) {
|
|
35
|
+
const shareKey = await this.driveCrypto.generateKey([addressKey], addressKey);
|
|
36
|
+
const rootNodeKey = await this.driveCrypto.generateKey([shareKey.decrypted.key], addressKey);
|
|
37
|
+
const { armoredNodeName } = await this.driveCrypto.encryptNodeName('root', undefined, shareKey.decrypted.key, addressKey);
|
|
38
|
+
const { armoredHashKey } = await this.driveCrypto.generateHashKey(rootNodeKey.decrypted.key);
|
|
39
|
+
return {
|
|
40
|
+
shareKey,
|
|
41
|
+
rootNode: {
|
|
42
|
+
key: rootNodeKey,
|
|
43
|
+
encryptedName: armoredNodeName,
|
|
44
|
+
armoredHashKey,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async decryptRootShare(share) {
|
|
49
|
+
const { keys: addressKeys } = await this.account.getOwnAddress(share.addressId);
|
|
50
|
+
const addressPublicKeys = await this.account.getPublicKeys(share.creatorEmail);
|
|
51
|
+
let key, passphraseSessionKey, verified;
|
|
52
|
+
try {
|
|
53
|
+
const result = await this.driveCrypto.decryptKey(share.encryptedCrypto.armoredKey, share.encryptedCrypto.armoredPassphrase, share.encryptedCrypto.armoredPassphraseSignature, addressKeys.map(({ key }) => key), addressPublicKeys);
|
|
54
|
+
key = result.key;
|
|
55
|
+
passphraseSessionKey = result.passphraseSessionKey;
|
|
56
|
+
verified = result.verified;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
this.reportDecryptionError(share, error);
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
const author = verified === crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID
|
|
63
|
+
? (0, interface_1.resultOk)(share.creatorEmail)
|
|
64
|
+
: (0, interface_1.resultError)({
|
|
65
|
+
claimedAuthor: share.creatorEmail,
|
|
66
|
+
error: (0, errors_1.getVerificationMessage)(verified),
|
|
67
|
+
});
|
|
68
|
+
if (!author.ok) {
|
|
69
|
+
await this.reportVerificationError(share);
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
share: {
|
|
73
|
+
...share,
|
|
74
|
+
author,
|
|
75
|
+
},
|
|
76
|
+
key: {
|
|
77
|
+
key,
|
|
78
|
+
passphraseSessionKey,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
reportDecryptionError(share, error) {
|
|
83
|
+
if (this.reportedDecryptionErrors.has(share.shareId)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const fromBefore2024 = share.creationTime ? share.creationTime < new Date('2024-01-01') : undefined;
|
|
87
|
+
this.logger.error(`Failed to decrypt share ${share.shareId} (from before 2024: ${fromBefore2024})`, error);
|
|
88
|
+
this.telemetry.logEvent({
|
|
89
|
+
eventName: 'decryptionError',
|
|
90
|
+
context: shareTypeToMetricContext(share.type),
|
|
91
|
+
field: 'shareKey',
|
|
92
|
+
fromBefore2024,
|
|
93
|
+
error,
|
|
94
|
+
});
|
|
95
|
+
this.reportedDecryptionErrors.add(share.shareId);
|
|
96
|
+
}
|
|
97
|
+
async reportVerificationError(share) {
|
|
98
|
+
if (this.reportedVerificationErrors.has(share.shareId)) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const fromBefore2024 = share.creationTime ? share.creationTime < new Date('2024-01-01') : undefined;
|
|
102
|
+
this.logger.error(`Failed to verify share ${share.shareId} (from before 2024: ${fromBefore2024})`);
|
|
103
|
+
this.telemetry.logEvent({
|
|
104
|
+
eventName: 'verificationError',
|
|
105
|
+
context: shareTypeToMetricContext(share.type),
|
|
106
|
+
field: 'shareKey',
|
|
107
|
+
fromBefore2024,
|
|
108
|
+
});
|
|
109
|
+
this.reportedVerificationErrors.add(share.shareId);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.SharesCryptoService = SharesCryptoService;
|
|
113
|
+
function shareTypeToMetricContext(shareType) {
|
|
114
|
+
// SDK doesn't support public sharing yet, also public sharing
|
|
115
|
+
// doesn't use a share but shareURL, thus we can simplify and
|
|
116
|
+
// ignore this case for now.
|
|
117
|
+
switch (shareType) {
|
|
118
|
+
case interface_2.ShareType.Main:
|
|
119
|
+
case interface_2.ShareType.Device:
|
|
120
|
+
case interface_2.ShareType.Photo:
|
|
121
|
+
return interface_1.MetricContext.OwnVolume;
|
|
122
|
+
case interface_2.ShareType.Standard:
|
|
123
|
+
return interface_1.MetricContext.Shared;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=cryptoService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoService.js","sourceRoot":"","sources":["../../../src/internal/shares/cryptoService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const crypto_1 = require("../../crypto");
|
|
4
|
+
const telemetry_1 = require("../../tests/telemetry");
|
|
5
|
+
const interface_1 = require("./interface");
|
|
6
|
+
const cryptoService_1 = require("./cryptoService");
|
|
7
|
+
describe("SharesCryptoService", () => {
|
|
8
|
+
let telemetry;
|
|
9
|
+
let driveCrypto;
|
|
10
|
+
let account;
|
|
11
|
+
let cryptoService;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
telemetry = (0, telemetry_1.getMockTelemetry)();
|
|
14
|
+
// @ts-expect-error No need to implement all methods for mocking
|
|
15
|
+
driveCrypto = {
|
|
16
|
+
decryptKey: jest.fn(async () => Promise.resolve({
|
|
17
|
+
passphrase: "pass",
|
|
18
|
+
key: "decryptedKey",
|
|
19
|
+
passphraseSessionKey: "sessionKey",
|
|
20
|
+
verified: crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID,
|
|
21
|
+
})),
|
|
22
|
+
};
|
|
23
|
+
account = {
|
|
24
|
+
// @ts-expect-error No need to implement full response for mocking
|
|
25
|
+
getOwnAddress: jest.fn(async () => ({
|
|
26
|
+
keys: [{ key: "addressKey" }],
|
|
27
|
+
})),
|
|
28
|
+
getPublicKeys: jest.fn(async () => []),
|
|
29
|
+
};
|
|
30
|
+
cryptoService = new cryptoService_1.SharesCryptoService(telemetry, driveCrypto, account);
|
|
31
|
+
});
|
|
32
|
+
it("should decrypt root share", async () => {
|
|
33
|
+
const result = await cryptoService.decryptRootShare({
|
|
34
|
+
shareId: "shareId",
|
|
35
|
+
addressId: "addressId",
|
|
36
|
+
creatorEmail: "signatureEmail",
|
|
37
|
+
encryptedCrypto: {
|
|
38
|
+
armoredKey: "armoredKey",
|
|
39
|
+
armoredPassphrase: "armoredPassphrase",
|
|
40
|
+
armoredPassphraseSignature: "armoredPassphraseSignature",
|
|
41
|
+
},
|
|
42
|
+
type: interface_1.ShareType.Main,
|
|
43
|
+
});
|
|
44
|
+
expect(result).toMatchObject({
|
|
45
|
+
share: {
|
|
46
|
+
shareId: "shareId",
|
|
47
|
+
author: { ok: true, value: "signatureEmail" },
|
|
48
|
+
},
|
|
49
|
+
key: {
|
|
50
|
+
key: "decryptedKey",
|
|
51
|
+
passphraseSessionKey: "sessionKey",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
expect(account.getOwnAddress).toHaveBeenCalledWith("addressId");
|
|
55
|
+
expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
|
|
56
|
+
expect(telemetry.logEvent).not.toHaveBeenCalled();
|
|
57
|
+
});
|
|
58
|
+
it("should decrypt root share with signiture verification error", async () => {
|
|
59
|
+
driveCrypto.decryptKey = jest.fn(async () => Promise.resolve({
|
|
60
|
+
passphrase: "pass",
|
|
61
|
+
key: "decryptedKey",
|
|
62
|
+
passphraseSessionKey: "sessionKey",
|
|
63
|
+
verified: crypto_1.VERIFICATION_STATUS.NOT_SIGNED,
|
|
64
|
+
}));
|
|
65
|
+
const result = await cryptoService.decryptRootShare({
|
|
66
|
+
shareId: "shareId",
|
|
67
|
+
addressId: "addressId",
|
|
68
|
+
creatorEmail: "signatureEmail",
|
|
69
|
+
encryptedCrypto: {
|
|
70
|
+
armoredKey: "armoredKey",
|
|
71
|
+
armoredPassphrase: "armoredPassphrase",
|
|
72
|
+
armoredPassphraseSignature: "armoredPassphraseSignature",
|
|
73
|
+
},
|
|
74
|
+
type: interface_1.ShareType.Main,
|
|
75
|
+
});
|
|
76
|
+
expect(result).toMatchObject({
|
|
77
|
+
share: {
|
|
78
|
+
shareId: "shareId",
|
|
79
|
+
author: { ok: false, error: { claimedAuthor: "signatureEmail", error: "Missing signature" } },
|
|
80
|
+
},
|
|
81
|
+
key: {
|
|
82
|
+
key: "decryptedKey",
|
|
83
|
+
passphraseSessionKey: "sessionKey",
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
expect(account.getOwnAddress).toHaveBeenCalledWith("addressId");
|
|
87
|
+
expect(account.getPublicKeys).toHaveBeenCalledWith("signatureEmail");
|
|
88
|
+
expect(telemetry.logEvent).toHaveBeenCalledWith({
|
|
89
|
+
eventName: 'verificationError',
|
|
90
|
+
context: 'own_volume',
|
|
91
|
+
field: 'shareKey',
|
|
92
|
+
addressMatchingDefaultShare: undefined,
|
|
93
|
+
fromBefore2024: undefined,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
it("should handle decrypt issue of root share", async () => {
|
|
97
|
+
const error = new Error("Decryption error");
|
|
98
|
+
driveCrypto.decryptKey = jest.fn(async () => Promise.reject(error));
|
|
99
|
+
const result = cryptoService.decryptRootShare({
|
|
100
|
+
shareId: "shareId",
|
|
101
|
+
addressId: "addressId",
|
|
102
|
+
creatorEmail: "signatureEmail",
|
|
103
|
+
encryptedCrypto: {
|
|
104
|
+
armoredKey: "armoredKey",
|
|
105
|
+
armoredPassphrase: "armoredPassphrase",
|
|
106
|
+
armoredPassphraseSignature: "armoredPassphraseSignature",
|
|
107
|
+
},
|
|
108
|
+
type: interface_1.ShareType.Main,
|
|
109
|
+
});
|
|
110
|
+
await expect(result).rejects.toThrow(error);
|
|
111
|
+
expect(telemetry.logEvent).toHaveBeenCalledWith({
|
|
112
|
+
eventName: 'decryptionError',
|
|
113
|
+
context: 'own_volume',
|
|
114
|
+
field: 'shareKey',
|
|
115
|
+
fromBefore2024: undefined,
|
|
116
|
+
error,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=cryptoService.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoService.test.js","sourceRoot":"","sources":["../../../src/internal/shares/cryptoService.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProtonDriveEntitiesCache, ProtonDriveCryptoCache, ProtonDriveAccount, ProtonDriveTelemetry } from "../../interface";
|
|
2
|
+
import { DriveCrypto } from '../../crypto';
|
|
3
|
+
import { DriveAPIService } from "../apiService";
|
|
4
|
+
import { SharesManager } from "./manager";
|
|
5
|
+
export type { EncryptedShare } from "./interface";
|
|
6
|
+
/**
|
|
7
|
+
* Provides facade for the whole shares module.
|
|
8
|
+
*
|
|
9
|
+
* The shares module is responsible for handling shares metadata, including
|
|
10
|
+
* API communication, encryption, decryption, caching, and event handling.
|
|
11
|
+
*
|
|
12
|
+
* This facade provides internal interface that other modules can use to
|
|
13
|
+
* interact with the shares.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initSharesModule(telemetry: ProtonDriveTelemetry, apiService: DriveAPIService, driveEntitiesCache: ProtonDriveEntitiesCache, driveCryptoCache: ProtonDriveCryptoCache, account: ProtonDriveAccount, crypto: DriveCrypto): SharesManager;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initSharesModule = initSharesModule;
|
|
4
|
+
const apiService_1 = require("./apiService");
|
|
5
|
+
const cryptoCache_1 = require("./cryptoCache");
|
|
6
|
+
const cache_1 = require("./cache");
|
|
7
|
+
const cryptoService_1 = require("./cryptoService");
|
|
8
|
+
const manager_1 = require("./manager");
|
|
9
|
+
/**
|
|
10
|
+
* Provides facade for the whole shares module.
|
|
11
|
+
*
|
|
12
|
+
* The shares module is responsible for handling shares metadata, including
|
|
13
|
+
* API communication, encryption, decryption, caching, and event handling.
|
|
14
|
+
*
|
|
15
|
+
* This facade provides internal interface that other modules can use to
|
|
16
|
+
* interact with the shares.
|
|
17
|
+
*/
|
|
18
|
+
function initSharesModule(telemetry, apiService, driveEntitiesCache, driveCryptoCache, account, crypto) {
|
|
19
|
+
const api = new apiService_1.SharesAPIService(apiService);
|
|
20
|
+
const cache = new cache_1.SharesCache(telemetry.getLogger('shares-cache'), driveEntitiesCache);
|
|
21
|
+
const cryptoCache = new cryptoCache_1.SharesCryptoCache(driveCryptoCache);
|
|
22
|
+
const cryptoService = new cryptoService_1.SharesCryptoService(telemetry, crypto, account);
|
|
23
|
+
const sharesManager = new manager_1.SharesManager(telemetry.getLogger('shares'), api, cache, cryptoCache, cryptoService, account);
|
|
24
|
+
return sharesManager;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/shares/index.ts"],"names":[],"mappings":";;AAoBA,4CAcC;AA/BD,6CAAgD;AAChD,+CAAkD;AAClD,mCAAsC;AACtC,mDAAsD;AACtD,uCAA0C;AAI1C;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAC5B,SAA+B,EAC/B,UAA2B,EAC3B,kBAA4C,EAC5C,gBAAwC,EACxC,OAA2B,EAC3B,MAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,6BAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,mBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,IAAI,+BAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,mCAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAI,uBAAa,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACxH,OAAO,aAAa,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { PrivateKey, SessionKey } from "../../crypto";
|
|
2
|
+
import { Result, UnverifiedAuthorError } from "../../interface";
|
|
3
|
+
/**
|
|
4
|
+
* Internal interface providing basic identification of volume and its root
|
|
5
|
+
* share and node.
|
|
6
|
+
*
|
|
7
|
+
* No interface should inherit from this, this is only for composition to
|
|
8
|
+
* create basic volume or share interfaces.
|
|
9
|
+
*
|
|
10
|
+
* Volumes do not have necessarily share or node, but we want to always
|
|
11
|
+
* know what is the root share or node, thus we want to keep this for both
|
|
12
|
+
* volumes or any type of share.
|
|
13
|
+
*/
|
|
14
|
+
export interface VolumeShareNodeIDs {
|
|
15
|
+
volumeId: string;
|
|
16
|
+
shareId: string;
|
|
17
|
+
rootNodeId: string;
|
|
18
|
+
}
|
|
19
|
+
export type Volume = {
|
|
20
|
+
/**
|
|
21
|
+
* Creator email and address ID come from the default share.
|
|
22
|
+
*
|
|
23
|
+
* The idea is to keep this information synced, so whenever we check
|
|
24
|
+
* cached volume information, we have creator details at hand for any
|
|
25
|
+
* verification checks or creation needs.
|
|
26
|
+
*/
|
|
27
|
+
creatorEmail: string;
|
|
28
|
+
addressId: string;
|
|
29
|
+
} & VolumeShareNodeIDs;
|
|
30
|
+
/**
|
|
31
|
+
* Internal share interface.
|
|
32
|
+
*/
|
|
33
|
+
type BaseShare = {
|
|
34
|
+
/**
|
|
35
|
+
* Address ID is set only when user is member of the share.
|
|
36
|
+
* Owner or invitee of share with higher access in the tree
|
|
37
|
+
* might not have this field set.
|
|
38
|
+
*/
|
|
39
|
+
addressId?: string;
|
|
40
|
+
creationTime?: Date;
|
|
41
|
+
type: ShareType;
|
|
42
|
+
} & VolumeShareNodeIDs;
|
|
43
|
+
export declare enum ShareType {
|
|
44
|
+
Main = "main",
|
|
45
|
+
Standard = "standard",
|
|
46
|
+
Device = "device",
|
|
47
|
+
Photo = "photo"
|
|
48
|
+
}
|
|
49
|
+
interface BaseRootShare extends BaseShare {
|
|
50
|
+
/**
|
|
51
|
+
* Address ID is always available for root shares, in contrast
|
|
52
|
+
* to other standard shares that might not have it. See the comment
|
|
53
|
+
* for BaseShare.
|
|
54
|
+
*/
|
|
55
|
+
addressId: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Interface used only internaly in the shares module.
|
|
59
|
+
*
|
|
60
|
+
* Outside of the module, the decrypted share interface should be used.
|
|
61
|
+
*/
|
|
62
|
+
export interface EncryptedShare extends BaseShare {
|
|
63
|
+
creatorEmail: string;
|
|
64
|
+
encryptedCrypto: EncryptedShareCrypto;
|
|
65
|
+
membership?: ShareMembership;
|
|
66
|
+
}
|
|
67
|
+
interface ShareMembership {
|
|
68
|
+
memberUid: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Interface used only internaly in the shares module.
|
|
72
|
+
*
|
|
73
|
+
* Outside of the module, the decrypted share interface should be used.
|
|
74
|
+
*/
|
|
75
|
+
export interface EncryptedRootShare extends BaseRootShare {
|
|
76
|
+
creatorEmail: string;
|
|
77
|
+
encryptedCrypto: EncryptedShareCrypto;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Interface holding decrypted share metadata.
|
|
81
|
+
*/
|
|
82
|
+
export interface DecryptedRootShare extends BaseRootShare {
|
|
83
|
+
author: Result<string, UnverifiedAuthorError>;
|
|
84
|
+
}
|
|
85
|
+
export interface EncryptedShareCrypto {
|
|
86
|
+
armoredKey: string;
|
|
87
|
+
armoredPassphrase: string;
|
|
88
|
+
armoredPassphraseSignature: string;
|
|
89
|
+
}
|
|
90
|
+
export interface DecryptedShareKey {
|
|
91
|
+
key: PrivateKey;
|
|
92
|
+
passphraseSessionKey: SessionKey;
|
|
93
|
+
}
|
|
94
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShareType = void 0;
|
|
4
|
+
var ShareType;
|
|
5
|
+
(function (ShareType) {
|
|
6
|
+
ShareType["Main"] = "main";
|
|
7
|
+
ShareType["Standard"] = "standard";
|
|
8
|
+
ShareType["Device"] = "device";
|
|
9
|
+
ShareType["Photo"] = "photo";
|
|
10
|
+
})(ShareType || (exports.ShareType = ShareType = {}));
|
|
11
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/internal/shares/interface.ts"],"names":[],"mappings":";;;AA8CA,IAAY,SAKX;AALD,WAAY,SAAS;IACjB,0BAAa,CAAA;IACb,kCAAqB,CAAA;IACrB,8BAAiB,CAAA;IACjB,4BAAe,CAAA;AACnB,CAAC,EALW,SAAS,yBAAT,SAAS,QAKpB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Logger, MetricContext, ProtonDriveAccount } from "../../interface";
|
|
2
|
+
import { PrivateKey } from "../../crypto";
|
|
3
|
+
import { SharesAPIService } from "./apiService";
|
|
4
|
+
import { SharesCache } from "./cache";
|
|
5
|
+
import { SharesCryptoCache } from "./cryptoCache";
|
|
6
|
+
import { SharesCryptoService } from "./cryptoService";
|
|
7
|
+
import { VolumeShareNodeIDs, EncryptedShare } from "./interface";
|
|
8
|
+
/**
|
|
9
|
+
* Provides high-level actions for managing shares.
|
|
10
|
+
*
|
|
11
|
+
* The manager is responsible for handling shares metadata, including
|
|
12
|
+
* API communication, encryption, decryption, and caching.
|
|
13
|
+
*
|
|
14
|
+
* This module uses other modules providing low-level operations, such
|
|
15
|
+
* as API service, cache, crypto service, etc.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SharesManager {
|
|
18
|
+
private logger;
|
|
19
|
+
private apiService;
|
|
20
|
+
private cache;
|
|
21
|
+
private cryptoCache;
|
|
22
|
+
private cryptoService;
|
|
23
|
+
private account;
|
|
24
|
+
private myFilesIds?;
|
|
25
|
+
private rootShares;
|
|
26
|
+
constructor(logger: Logger, apiService: SharesAPIService, cache: SharesCache, cryptoCache: SharesCryptoCache, cryptoService: SharesCryptoService, account: ProtonDriveAccount);
|
|
27
|
+
/**
|
|
28
|
+
* It returns the IDs of the My files section.
|
|
29
|
+
*
|
|
30
|
+
* If the default volume or My files section doesn't exist, it creates it.
|
|
31
|
+
*/
|
|
32
|
+
getMyFilesIDs(): Promise<VolumeShareNodeIDs>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates new default volume for the user.
|
|
35
|
+
*
|
|
36
|
+
* It generates the volume bootstrap, creates the volume on the server,
|
|
37
|
+
* and caches the volume metadata.
|
|
38
|
+
*
|
|
39
|
+
* User can have only one default volume.
|
|
40
|
+
*
|
|
41
|
+
* @throws If the volume cannot be created (e.g., one already exists).
|
|
42
|
+
*/
|
|
43
|
+
private createVolume;
|
|
44
|
+
/**
|
|
45
|
+
* It is a high-level action that retrieves the private key for a share.
|
|
46
|
+
* If prefers to use the cache, but if the key is not there, it fetches
|
|
47
|
+
* the share from the API, decrypts it, and caches it.
|
|
48
|
+
*
|
|
49
|
+
* @param shareId - The ID of the share.
|
|
50
|
+
* @returns The private key for the share.
|
|
51
|
+
* @throws If the share is not found or cannot be decrypted, or cached.
|
|
52
|
+
*/
|
|
53
|
+
getSharePrivateKey(shareId: string): Promise<PrivateKey>;
|
|
54
|
+
getMyFilesShareMemberEmailKey(): Promise<{
|
|
55
|
+
email: string;
|
|
56
|
+
addressId: string;
|
|
57
|
+
addressKey: PrivateKey;
|
|
58
|
+
addressKeyId: string;
|
|
59
|
+
}>;
|
|
60
|
+
getContextShareMemberEmailKey(shareId: string): Promise<{
|
|
61
|
+
email: string;
|
|
62
|
+
addressId: string;
|
|
63
|
+
addressKey: PrivateKey;
|
|
64
|
+
addressKeyId: string;
|
|
65
|
+
}>;
|
|
66
|
+
getVolumeMetricContext(volumeId: string): Promise<MetricContext>;
|
|
67
|
+
loadEncryptedShare(shareId: string): Promise<EncryptedShare>;
|
|
68
|
+
}
|