@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,112 @@
|
|
|
1
|
+
import { DriveCrypto, PrivateKey, SessionKey, SRPVerifier } from '../../crypto';
|
|
2
|
+
import { ProtonDriveAccount, ProtonInvitation, ProtonInvitationWithNode, NonProtonInvitation, Author, Member } from "../../interface";
|
|
3
|
+
import { EncryptedShare } from "../shares";
|
|
4
|
+
import { EncryptedInvitation, EncryptedInvitationWithNode, EncryptedExternalInvitation, EncryptedMember, EncryptedPublicLink, PublicLinkWithCreatorEmail } from "./interface";
|
|
5
|
+
export declare const PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = 12;
|
|
6
|
+
/**
|
|
7
|
+
* Provides crypto operations for sharing.
|
|
8
|
+
*
|
|
9
|
+
* The sharing crypto service is responsible for encrypting and decrypting
|
|
10
|
+
* shares, invitations, etc.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SharingCryptoService {
|
|
13
|
+
private driveCrypto;
|
|
14
|
+
private account;
|
|
15
|
+
constructor(driveCrypto: DriveCrypto, account: ProtonDriveAccount);
|
|
16
|
+
/**
|
|
17
|
+
* Generates a share key for a standard share used for sharing with other users.
|
|
18
|
+
*
|
|
19
|
+
* Standard share, in contrast to a root share, is encrypted with node key and
|
|
20
|
+
* can be managed by any admin.
|
|
21
|
+
*/
|
|
22
|
+
generateShareKeys(nodeKeys: {
|
|
23
|
+
key: PrivateKey;
|
|
24
|
+
passphraseSessionKey: SessionKey;
|
|
25
|
+
nameSessionKey: SessionKey;
|
|
26
|
+
}, addressKey: PrivateKey): Promise<{
|
|
27
|
+
shareKey: {
|
|
28
|
+
encrypted: {
|
|
29
|
+
armoredKey: string;
|
|
30
|
+
armoredPassphrase: string;
|
|
31
|
+
armoredPassphraseSignature: string;
|
|
32
|
+
};
|
|
33
|
+
decrypted: {
|
|
34
|
+
key: PrivateKey;
|
|
35
|
+
passphraseSessionKey: SessionKey;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
base64PpassphraseKeyPacket: string;
|
|
39
|
+
base64NameKeyPacket: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Decrypts a share using the node key.
|
|
43
|
+
*
|
|
44
|
+
* The share is encrypted with the node key and can be managed by any admin.
|
|
45
|
+
*
|
|
46
|
+
* Old shares are encrypted with address key only and thus available only
|
|
47
|
+
* to owners. `decryptShare` automatically tries to decrypt the share with
|
|
48
|
+
* address keys as fallback if available.
|
|
49
|
+
*/
|
|
50
|
+
decryptShare(share: EncryptedShare, nodeKey: PrivateKey): Promise<{
|
|
51
|
+
author: Author;
|
|
52
|
+
key: PrivateKey;
|
|
53
|
+
passphraseSessionKey: SessionKey;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Encrypts an invitation for sharing a node with another user.
|
|
57
|
+
*
|
|
58
|
+
* `inviteeEmail` is used to load public key of the invitee and used to
|
|
59
|
+
* encrypt share's session key. `inviterKey` is used to sign the invitation.
|
|
60
|
+
*/
|
|
61
|
+
encryptInvitation(shareSessionKey: SessionKey, inviterKey: PrivateKey, inviteeEmail: string): Promise<{
|
|
62
|
+
base64KeyPacket: string;
|
|
63
|
+
base64KeyPacketSignature: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Decrypts and verifies an invitation and node's name.
|
|
67
|
+
*/
|
|
68
|
+
decryptInvitationWithNode(encryptedInvitation: EncryptedInvitationWithNode): Promise<ProtonInvitationWithNode>;
|
|
69
|
+
/**
|
|
70
|
+
* Verifies an invitation.
|
|
71
|
+
*/
|
|
72
|
+
decryptInvitation(encryptedInvitation: EncryptedInvitation): Promise<ProtonInvitation>;
|
|
73
|
+
/**
|
|
74
|
+
* Accepts an invitation by signing the session key by invitee.
|
|
75
|
+
*/
|
|
76
|
+
acceptInvitation(encryptedInvitation: EncryptedInvitationWithNode): Promise<{
|
|
77
|
+
base64SessionKeySignature: string;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Encrypts an external invitation for sharing a node with another user.
|
|
81
|
+
*
|
|
82
|
+
* `inviteeEmail` is used to sign the invitation with `inviterKey`.
|
|
83
|
+
*
|
|
84
|
+
* External invitations are used to share nodes with users who are not
|
|
85
|
+
* registered with Proton Drive. The external invitation then requires
|
|
86
|
+
* the invitee to sign up to create key. Then it can be followed by
|
|
87
|
+
* regular invitation flow.
|
|
88
|
+
*/
|
|
89
|
+
encryptExternalInvitation(shareSessionKey: SessionKey, inviterKey: PrivateKey, inviteeEmail: string): Promise<{
|
|
90
|
+
base64ExternalInvitationSignature: string;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Verifies an external invitation.
|
|
94
|
+
*/
|
|
95
|
+
decryptExternalInvitation(encryptedInvitation: EncryptedExternalInvitation): Promise<NonProtonInvitation>;
|
|
96
|
+
/**
|
|
97
|
+
* Verifies a member.
|
|
98
|
+
*/
|
|
99
|
+
decryptMember(encryptedMember: EncryptedMember): Promise<Member>;
|
|
100
|
+
encryptPublicLink(creatorEmail: string, shareSessionKey: SessionKey, password: string): Promise<{
|
|
101
|
+
crypto: {
|
|
102
|
+
base64SharePasswordSalt: string;
|
|
103
|
+
base64SharePassphraseKeyPacket: string;
|
|
104
|
+
armoredPassword: string;
|
|
105
|
+
};
|
|
106
|
+
srp: SRPVerifier;
|
|
107
|
+
}>;
|
|
108
|
+
generatePublicLinkPassword(): Promise<string>;
|
|
109
|
+
private computeKeySaltAndPassphrase;
|
|
110
|
+
decryptPublicLink(encryptedPublicLink: EncryptedPublicLink): Promise<PublicLinkWithCreatorEmail>;
|
|
111
|
+
private decryptShareUrlPassword;
|
|
112
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SharingCryptoService = exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = void 0;
|
|
7
|
+
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
8
|
+
const ttag_1 = require("ttag");
|
|
9
|
+
const crypto_1 = require("../../crypto");
|
|
10
|
+
const interface_1 = require("../../interface");
|
|
11
|
+
const errors_1 = require("../errors");
|
|
12
|
+
// Version 2 of bcrypt with 2**10 rounds.
|
|
13
|
+
// https://en.wikipedia.org/wiki/Bcrypt#Description
|
|
14
|
+
const BCRYPT_PREFIX = '$2y$10$';
|
|
15
|
+
exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH = 12;
|
|
16
|
+
// We do not support management of legacy public links anymore (that is no
|
|
17
|
+
// flag or bit 1). But we still need to support to read the legacy public
|
|
18
|
+
// link.
|
|
19
|
+
var PublicLinkFlags;
|
|
20
|
+
(function (PublicLinkFlags) {
|
|
21
|
+
PublicLinkFlags[PublicLinkFlags["Legacy"] = 0] = "Legacy";
|
|
22
|
+
PublicLinkFlags[PublicLinkFlags["CustomPassword"] = 1] = "CustomPassword";
|
|
23
|
+
PublicLinkFlags[PublicLinkFlags["GeneratedPasswordIncluded"] = 2] = "GeneratedPasswordIncluded";
|
|
24
|
+
PublicLinkFlags[PublicLinkFlags["GeneratedPasswordWithCustomPassword"] = 3] = "GeneratedPasswordWithCustomPassword";
|
|
25
|
+
})(PublicLinkFlags || (PublicLinkFlags = {}));
|
|
26
|
+
/**
|
|
27
|
+
* Provides crypto operations for sharing.
|
|
28
|
+
*
|
|
29
|
+
* The sharing crypto service is responsible for encrypting and decrypting
|
|
30
|
+
* shares, invitations, etc.
|
|
31
|
+
*/
|
|
32
|
+
class SharingCryptoService {
|
|
33
|
+
driveCrypto;
|
|
34
|
+
account;
|
|
35
|
+
constructor(driveCrypto, account) {
|
|
36
|
+
this.driveCrypto = driveCrypto;
|
|
37
|
+
this.account = account;
|
|
38
|
+
this.driveCrypto = driveCrypto;
|
|
39
|
+
this.account = account;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Generates a share key for a standard share used for sharing with other users.
|
|
43
|
+
*
|
|
44
|
+
* Standard share, in contrast to a root share, is encrypted with node key and
|
|
45
|
+
* can be managed by any admin.
|
|
46
|
+
*/
|
|
47
|
+
async generateShareKeys(nodeKeys, addressKey) {
|
|
48
|
+
const shareKey = await this.driveCrypto.generateKey([nodeKeys.key, addressKey], addressKey);
|
|
49
|
+
const { base64KeyPacket: base64PpassphraseKeyPacket } = await this.driveCrypto.encryptSessionKey(nodeKeys.passphraseSessionKey, shareKey.decrypted.key);
|
|
50
|
+
const { base64KeyPacket: base64NameKeyPacket } = await this.driveCrypto.encryptSessionKey(nodeKeys.nameSessionKey, shareKey.decrypted.key);
|
|
51
|
+
return {
|
|
52
|
+
shareKey,
|
|
53
|
+
base64PpassphraseKeyPacket,
|
|
54
|
+
base64NameKeyPacket,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
;
|
|
58
|
+
/**
|
|
59
|
+
* Decrypts a share using the node key.
|
|
60
|
+
*
|
|
61
|
+
* The share is encrypted with the node key and can be managed by any admin.
|
|
62
|
+
*
|
|
63
|
+
* Old shares are encrypted with address key only and thus available only
|
|
64
|
+
* to owners. `decryptShare` automatically tries to decrypt the share with
|
|
65
|
+
* address keys as fallback if available.
|
|
66
|
+
*/
|
|
67
|
+
async decryptShare(share, nodeKey) {
|
|
68
|
+
// All standard shares should be encrypted with node key.
|
|
69
|
+
// Using node key is essential so any admin can manage the share.
|
|
70
|
+
// Old shares are encrypted with address key only and thus available
|
|
71
|
+
// only to owners. Adding address keys (if available) is a fallback
|
|
72
|
+
// solution until all shares are migrated.
|
|
73
|
+
const decryptionKeys = [nodeKey];
|
|
74
|
+
if (share.addressId) {
|
|
75
|
+
const address = await this.account.getOwnAddress(share.addressId);
|
|
76
|
+
decryptionKeys.push(...address.keys.map(({ key }) => key));
|
|
77
|
+
}
|
|
78
|
+
const addressPublicKeys = await this.account.getPublicKeys(share.creatorEmail);
|
|
79
|
+
const { key, passphraseSessionKey, verified } = await this.driveCrypto.decryptKey(share.encryptedCrypto.armoredKey, share.encryptedCrypto.armoredPassphrase, share.encryptedCrypto.armoredPassphraseSignature, decryptionKeys, addressPublicKeys);
|
|
80
|
+
const author = verified === crypto_1.VERIFICATION_STATUS.SIGNED_AND_VALID
|
|
81
|
+
? (0, interface_1.resultOk)(share.creatorEmail)
|
|
82
|
+
: (0, interface_1.resultError)({
|
|
83
|
+
claimedAuthor: share.creatorEmail,
|
|
84
|
+
error: (0, errors_1.getVerificationMessage)(verified),
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
author,
|
|
88
|
+
key,
|
|
89
|
+
passphraseSessionKey,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Encrypts an invitation for sharing a node with another user.
|
|
94
|
+
*
|
|
95
|
+
* `inviteeEmail` is used to load public key of the invitee and used to
|
|
96
|
+
* encrypt share's session key. `inviterKey` is used to sign the invitation.
|
|
97
|
+
*/
|
|
98
|
+
async encryptInvitation(shareSessionKey, inviterKey, inviteeEmail) {
|
|
99
|
+
const inviteePublicKeys = await this.account.getPublicKeys(inviteeEmail);
|
|
100
|
+
const result = await this.driveCrypto.encryptInvitation(shareSessionKey, inviteePublicKeys[0], inviterKey);
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
;
|
|
104
|
+
/**
|
|
105
|
+
* Decrypts and verifies an invitation and node's name.
|
|
106
|
+
*/
|
|
107
|
+
async decryptInvitationWithNode(encryptedInvitation) {
|
|
108
|
+
const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
|
|
109
|
+
const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
|
|
110
|
+
const shareKey = await this.driveCrypto.decryptUnsignedKey(encryptedInvitation.share.armoredKey, encryptedInvitation.share.armoredPassphrase, inviteeKey);
|
|
111
|
+
let nodeName;
|
|
112
|
+
try {
|
|
113
|
+
const result = await this.driveCrypto.decryptNodeName(encryptedInvitation.node.encryptedName, shareKey, []);
|
|
114
|
+
nodeName = (0, interface_1.resultOk)(result.name);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const message = (0, errors_1.getErrorMessage)(error);
|
|
118
|
+
const errorMessage = (0, ttag_1.c)('Error').t `Failed to decrypt item name: ${message}`;
|
|
119
|
+
nodeName = (0, interface_1.resultError)(new Error(errorMessage));
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
...await this.decryptInvitation(encryptedInvitation),
|
|
123
|
+
node: {
|
|
124
|
+
name: nodeName,
|
|
125
|
+
type: encryptedInvitation.node.type,
|
|
126
|
+
mediaType: encryptedInvitation.node.mediaType,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Verifies an invitation.
|
|
132
|
+
*/
|
|
133
|
+
async decryptInvitation(encryptedInvitation) {
|
|
134
|
+
// TODO: verify addedByEmail (current client doesnt do this)
|
|
135
|
+
const addedByEmail = (0, interface_1.resultOk)(encryptedInvitation.addedByEmail);
|
|
136
|
+
return {
|
|
137
|
+
uid: encryptedInvitation.uid,
|
|
138
|
+
invitationTime: encryptedInvitation.invitationTime,
|
|
139
|
+
addedByEmail: addedByEmail,
|
|
140
|
+
inviteeEmail: encryptedInvitation.inviteeEmail,
|
|
141
|
+
role: encryptedInvitation.role,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Accepts an invitation by signing the session key by invitee.
|
|
146
|
+
*/
|
|
147
|
+
async acceptInvitation(encryptedInvitation) {
|
|
148
|
+
const inviteeAddress = await this.account.getOwnAddress(encryptedInvitation.inviteeEmail);
|
|
149
|
+
const inviteeKey = inviteeAddress.keys[inviteeAddress.primaryKeyIndex].key;
|
|
150
|
+
const result = await this.driveCrypto.acceptInvitation(encryptedInvitation.base64KeyPacket, inviteeKey);
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Encrypts an external invitation for sharing a node with another user.
|
|
155
|
+
*
|
|
156
|
+
* `inviteeEmail` is used to sign the invitation with `inviterKey`.
|
|
157
|
+
*
|
|
158
|
+
* External invitations are used to share nodes with users who are not
|
|
159
|
+
* registered with Proton Drive. The external invitation then requires
|
|
160
|
+
* the invitee to sign up to create key. Then it can be followed by
|
|
161
|
+
* regular invitation flow.
|
|
162
|
+
*/
|
|
163
|
+
async encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail) {
|
|
164
|
+
const result = await this.driveCrypto.encryptExternalInvitation(shareSessionKey, inviterKey, inviteeEmail);
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Verifies an external invitation.
|
|
169
|
+
*/
|
|
170
|
+
async decryptExternalInvitation(encryptedInvitation) {
|
|
171
|
+
// TODO: verify addedByEmail (current client doesnt do this)
|
|
172
|
+
const addedByEmail = (0, interface_1.resultOk)(encryptedInvitation.addedByEmail);
|
|
173
|
+
return {
|
|
174
|
+
uid: encryptedInvitation.uid,
|
|
175
|
+
invitationTime: encryptedInvitation.invitationTime,
|
|
176
|
+
addedByEmail: addedByEmail,
|
|
177
|
+
inviteeEmail: encryptedInvitation.inviteeEmail,
|
|
178
|
+
role: encryptedInvitation.role,
|
|
179
|
+
state: encryptedInvitation.state,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Verifies a member.
|
|
184
|
+
*/
|
|
185
|
+
async decryptMember(encryptedMember) {
|
|
186
|
+
// TODO: verify addedByEmail (current client doesnt do this)
|
|
187
|
+
const addedByEmail = (0, interface_1.resultOk)(encryptedMember.addedByEmail);
|
|
188
|
+
return {
|
|
189
|
+
uid: encryptedMember.uid,
|
|
190
|
+
invitationTime: encryptedMember.invitationTime,
|
|
191
|
+
addedByEmail: addedByEmail,
|
|
192
|
+
inviteeEmail: encryptedMember.inviteeEmail,
|
|
193
|
+
role: encryptedMember.role,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
async encryptPublicLink(creatorEmail, shareSessionKey, password) {
|
|
197
|
+
const address = await this.account.getOwnAddress(creatorEmail);
|
|
198
|
+
const addressKey = address.keys[address.primaryKeyIndex].key;
|
|
199
|
+
const { base64Salt: base64SharePasswordSalt, bcryptPassphrase } = await this.computeKeySaltAndPassphrase(password);
|
|
200
|
+
const { base64SharePassphraseKeyPacket, armoredPassword, srp } = await this.driveCrypto.encryptPublicLinkPasswordAndSessionKey(password, addressKey, bcryptPassphrase, shareSessionKey);
|
|
201
|
+
return {
|
|
202
|
+
crypto: {
|
|
203
|
+
base64SharePasswordSalt,
|
|
204
|
+
base64SharePassphraseKeyPacket,
|
|
205
|
+
armoredPassword,
|
|
206
|
+
},
|
|
207
|
+
srp,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
async generatePublicLinkPassword() {
|
|
211
|
+
const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
212
|
+
const values = crypto.getRandomValues(new Uint32Array(exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH));
|
|
213
|
+
let result = '';
|
|
214
|
+
for (let i = 0; i < exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH; i++) {
|
|
215
|
+
result += charset[values[i] % charset.length];
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
async computeKeySaltAndPassphrase(password) {
|
|
220
|
+
if (!password) {
|
|
221
|
+
throw new Error('Password required.');
|
|
222
|
+
}
|
|
223
|
+
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
224
|
+
const hash = await bcryptjs_1.default.hash(password, BCRYPT_PREFIX + bcryptjs_1.default.encodeBase64(salt, 16));
|
|
225
|
+
// Remove bcrypt prefix and salt (first 29 characters)
|
|
226
|
+
const bcryptPassphrase = hash.slice(29);
|
|
227
|
+
return {
|
|
228
|
+
base64Salt: (0, crypto_1.uint8ArrayToBase64String)(salt),
|
|
229
|
+
bcryptPassphrase,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
;
|
|
233
|
+
async decryptPublicLink(encryptedPublicLink) {
|
|
234
|
+
const address = await this.account.getOwnAddress(encryptedPublicLink.creatorEmail);
|
|
235
|
+
const addressKeys = address.keys.map(({ key }) => key);
|
|
236
|
+
const { password, customPassword } = await this.decryptShareUrlPassword(encryptedPublicLink, addressKeys);
|
|
237
|
+
return {
|
|
238
|
+
uid: encryptedPublicLink.uid,
|
|
239
|
+
creationTime: encryptedPublicLink.creationTime,
|
|
240
|
+
expirationTime: encryptedPublicLink.expirationTime,
|
|
241
|
+
role: encryptedPublicLink.role,
|
|
242
|
+
url: `${encryptedPublicLink.publicUrl}#${password}`,
|
|
243
|
+
customPassword,
|
|
244
|
+
creatorEmail: encryptedPublicLink.creatorEmail,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
async decryptShareUrlPassword(encryptedPublicLink, addressKeys) {
|
|
248
|
+
const password = await this.driveCrypto.decryptShareUrlPassword(encryptedPublicLink.armoredUrlPassword, addressKeys);
|
|
249
|
+
switch (encryptedPublicLink.flags) {
|
|
250
|
+
// This is legacy that is not supported anymore.
|
|
251
|
+
// Availalbe only for reading.
|
|
252
|
+
case PublicLinkFlags.Legacy:
|
|
253
|
+
case PublicLinkFlags.CustomPassword:
|
|
254
|
+
return {
|
|
255
|
+
password,
|
|
256
|
+
};
|
|
257
|
+
case PublicLinkFlags.GeneratedPasswordIncluded:
|
|
258
|
+
case PublicLinkFlags.GeneratedPasswordWithCustomPassword:
|
|
259
|
+
return {
|
|
260
|
+
password: password.substring(0, exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH),
|
|
261
|
+
customPassword: password.substring(exports.PUBLIC_LINK_GENERATED_PASSWORD_LENGTH) || undefined,
|
|
262
|
+
};
|
|
263
|
+
default:
|
|
264
|
+
throw new Error(`Unsupported public link with flags: ${encryptedPublicLink.flags}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
exports.SharingCryptoService = SharingCryptoService;
|
|
269
|
+
//# sourceMappingURL=cryptoService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoService.js","sourceRoot":"","sources":["../../../src/internal/sharing/cryptoService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { NodeEventCallback, Logger } from "../../interface";
|
|
2
|
+
import { DriveEventsService, DriveEvent } from "../events";
|
|
3
|
+
import { SharingCache } from "./cache";
|
|
4
|
+
import { SharingType, NodesService } from "./interface";
|
|
5
|
+
import { SharingAccess } from "./sharingAccess";
|
|
6
|
+
type Listeners = {
|
|
7
|
+
type: SharingType;
|
|
8
|
+
callback: NodeEventCallback;
|
|
9
|
+
}[];
|
|
10
|
+
/**
|
|
11
|
+
* Provides both event handling and subscription mechanism for user.
|
|
12
|
+
*
|
|
13
|
+
* The service is responsible for handling events regarding sharing listing
|
|
14
|
+
* from the DriveEventsService, and for providing a subscription mechanism
|
|
15
|
+
* for the user to listen to updates of specific group of nodes, such as
|
|
16
|
+
* any update to list of shared with me nodes.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SharingEvents {
|
|
19
|
+
private listeners;
|
|
20
|
+
constructor(logger: Logger, events: DriveEventsService, cache: SharingCache, nodesService: NodesService, sharingAccess: SharingAccess);
|
|
21
|
+
subscribeToSharedNodesByMe(callback: NodeEventCallback): () => void;
|
|
22
|
+
subscribeToSharedNodesWithMe(callback: NodeEventCallback): () => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Update cache and notify listeners accordingly for any updates
|
|
26
|
+
* to nodes that are shared by me.
|
|
27
|
+
*
|
|
28
|
+
* Any node create or update that is being shared, is automatically
|
|
29
|
+
* added to the cache and the listeners are notified about the
|
|
30
|
+
* update of the node.
|
|
31
|
+
*
|
|
32
|
+
* Any node delete or update that is not being shared, and the cache
|
|
33
|
+
* includes the node, is removed from the cache and the listeners are
|
|
34
|
+
* notified about the removal of the node.
|
|
35
|
+
*
|
|
36
|
+
* @throws Only if the client's callback throws.
|
|
37
|
+
*/
|
|
38
|
+
export declare function handleSharedByMeNodes(logger: Logger, event: DriveEvent, cache: SharingCache, listeners: Listeners, nodesService: NodesService): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Update cache and notify listeners accordingly for any updates
|
|
41
|
+
* to nodes that are shared with me.
|
|
42
|
+
*
|
|
43
|
+
* There is only one event type that is relevant for shared with me
|
|
44
|
+
* nodes, which is the ShareWithMeUpdated event. The event is triggered
|
|
45
|
+
* when the list of shared with me nodes is updated.
|
|
46
|
+
*
|
|
47
|
+
* The cache is cleared and re-populated fully when the client
|
|
48
|
+
* requests the list of shared with me, or is actively listening.
|
|
49
|
+
*
|
|
50
|
+
* If the client listenes to shared with me updates, the client receives
|
|
51
|
+
* update to the full list of shared with me nodes, including remove
|
|
52
|
+
* updates for nodes that are no longer shared with me, but was before.
|
|
53
|
+
*
|
|
54
|
+
* @throws Only if the client's callback throws.
|
|
55
|
+
*/
|
|
56
|
+
export declare function handleSharedWithMeNodes(event: DriveEvent, cache: SharingCache, listeners: Listeners, sharingAccess: SharingAccess): Promise<void>;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SharingEvents = void 0;
|
|
4
|
+
exports.handleSharedByMeNodes = handleSharedByMeNodes;
|
|
5
|
+
exports.handleSharedWithMeNodes = handleSharedWithMeNodes;
|
|
6
|
+
const transformers_1 = require("../../transformers");
|
|
7
|
+
const events_1 = require("../events");
|
|
8
|
+
const interface_1 = require("./interface");
|
|
9
|
+
/**
|
|
10
|
+
* Provides both event handling and subscription mechanism for user.
|
|
11
|
+
*
|
|
12
|
+
* The service is responsible for handling events regarding sharing listing
|
|
13
|
+
* from the DriveEventsService, and for providing a subscription mechanism
|
|
14
|
+
* for the user to listen to updates of specific group of nodes, such as
|
|
15
|
+
* any update to list of shared with me nodes.
|
|
16
|
+
*/
|
|
17
|
+
class SharingEvents {
|
|
18
|
+
listeners = [];
|
|
19
|
+
constructor(logger, events, cache, nodesService, sharingAccess) {
|
|
20
|
+
events.addListener(async (events, fullRefreshVolumeId) => {
|
|
21
|
+
// Technically we need to refresh only the shared by me nodes for
|
|
22
|
+
// own volume, and shared with me nodes only when the event comes
|
|
23
|
+
// as core refresh event is converted to it.
|
|
24
|
+
// We can optimise later, for now we refresh everything to make
|
|
25
|
+
// it simpler. The cache is smart enough to not do unnecessary
|
|
26
|
+
// requests to the API and refresh on web is rare without
|
|
27
|
+
// persistant cache for now.
|
|
28
|
+
if (fullRefreshVolumeId) {
|
|
29
|
+
await cache.setSharedByMeNodeUids(undefined);
|
|
30
|
+
await cache.setSharedWithMeNodeUids(undefined);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const event of events) {
|
|
34
|
+
await handleSharedByMeNodes(logger, event, cache, this.listeners, nodesService);
|
|
35
|
+
await handleSharedWithMeNodes(event, cache, this.listeners, sharingAccess);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
subscribeToSharedNodesByMe(callback) {
|
|
40
|
+
this.listeners.push({ type: interface_1.SharingType.SharedByMe, callback });
|
|
41
|
+
return () => {
|
|
42
|
+
this.listeners = this.listeners.filter(listener => listener.callback !== callback);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
subscribeToSharedNodesWithMe(callback) {
|
|
46
|
+
this.listeners.push({ type: interface_1.SharingType.sharedWithMe, callback });
|
|
47
|
+
return () => {
|
|
48
|
+
this.listeners = this.listeners.filter(listener => listener.callback !== callback);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.SharingEvents = SharingEvents;
|
|
53
|
+
/**
|
|
54
|
+
* Update cache and notify listeners accordingly for any updates
|
|
55
|
+
* to nodes that are shared by me.
|
|
56
|
+
*
|
|
57
|
+
* Any node create or update that is being shared, is automatically
|
|
58
|
+
* added to the cache and the listeners are notified about the
|
|
59
|
+
* update of the node.
|
|
60
|
+
*
|
|
61
|
+
* Any node delete or update that is not being shared, and the cache
|
|
62
|
+
* includes the node, is removed from the cache and the listeners are
|
|
63
|
+
* notified about the removal of the node.
|
|
64
|
+
*
|
|
65
|
+
* @throws Only if the client's callback throws.
|
|
66
|
+
*/
|
|
67
|
+
async function handleSharedByMeNodes(logger, event, cache, listeners, nodesService) {
|
|
68
|
+
if (event.type === events_1.DriveEventType.ShareWithMeUpdated || !event.isOwnVolume) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const subscribedListeners = listeners.filter(({ type }) => type === interface_1.SharingType.SharedByMe);
|
|
72
|
+
if ([events_1.DriveEventType.NodeCreated, events_1.DriveEventType.NodeUpdated, events_1.DriveEventType.NodeUpdatedMetadata].includes(event.type) && event.isShared) {
|
|
73
|
+
try {
|
|
74
|
+
await cache.addSharedByMeNodeUid(event.nodeUid);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger.error(`Skipping shared by me node cache update`, error);
|
|
78
|
+
}
|
|
79
|
+
if (subscribedListeners.length) {
|
|
80
|
+
let node;
|
|
81
|
+
try {
|
|
82
|
+
node = await nodesService.getNode(event.nodeUid);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.error(`Skipping shared by me node update event to listener`, error);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
subscribedListeners.forEach(({ callback }) => callback({ type: 'update', uid: node.uid, node: (0, transformers_1.convertInternalNode)(node) }));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (((event.type === events_1.DriveEventType.NodeUpdated || event.type === events_1.DriveEventType.NodeUpdatedMetadata) && !event.isShared)
|
|
92
|
+
|| event.type === events_1.DriveEventType.NodeDeleted) {
|
|
93
|
+
let nodeWasShared = false;
|
|
94
|
+
try {
|
|
95
|
+
const cachedNodeUids = await cache.getSharedByMeNodeUids();
|
|
96
|
+
nodeWasShared = cachedNodeUids.includes(event.nodeUid);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Cache can be empty.
|
|
100
|
+
}
|
|
101
|
+
if (nodeWasShared) {
|
|
102
|
+
try {
|
|
103
|
+
await cache.removeSharedByMeNodeUid(event.nodeUid);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
logger.error(`Skipping shared by me node cache remove`, error);
|
|
107
|
+
}
|
|
108
|
+
subscribedListeners.forEach(({ callback }) => callback({ type: 'remove', uid: event.nodeUid }));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Update cache and notify listeners accordingly for any updates
|
|
114
|
+
* to nodes that are shared with me.
|
|
115
|
+
*
|
|
116
|
+
* There is only one event type that is relevant for shared with me
|
|
117
|
+
* nodes, which is the ShareWithMeUpdated event. The event is triggered
|
|
118
|
+
* when the list of shared with me nodes is updated.
|
|
119
|
+
*
|
|
120
|
+
* The cache is cleared and re-populated fully when the client
|
|
121
|
+
* requests the list of shared with me, or is actively listening.
|
|
122
|
+
*
|
|
123
|
+
* If the client listenes to shared with me updates, the client receives
|
|
124
|
+
* update to the full list of shared with me nodes, including remove
|
|
125
|
+
* updates for nodes that are no longer shared with me, but was before.
|
|
126
|
+
*
|
|
127
|
+
* @throws Only if the client's callback throws.
|
|
128
|
+
*/
|
|
129
|
+
async function handleSharedWithMeNodes(event, cache, listeners, sharingAccess) {
|
|
130
|
+
if (event.type !== events_1.DriveEventType.ShareWithMeUpdated) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
let cachedNodeUids = [];
|
|
134
|
+
const subscribedListeners = listeners.filter(({ type }) => type === interface_1.SharingType.sharedWithMe);
|
|
135
|
+
if (subscribedListeners.length) {
|
|
136
|
+
cachedNodeUids = await cache.getSharedWithMeNodeUids();
|
|
137
|
+
}
|
|
138
|
+
// Clearing the cache must be first, sharingAccess is no-op if cache is set.
|
|
139
|
+
await cache.setSharedWithMeNodeUids(undefined);
|
|
140
|
+
if (subscribedListeners.length) {
|
|
141
|
+
const nodeUids = [];
|
|
142
|
+
for await (const node of sharingAccess.iterateSharedNodesWithMe()) {
|
|
143
|
+
nodeUids.push(node.uid);
|
|
144
|
+
subscribedListeners.forEach(({ callback }) => callback({ type: 'update', uid: node.uid, node: (0, transformers_1.convertInternalNode)(node) }));
|
|
145
|
+
}
|
|
146
|
+
for (const nodeUid of cachedNodeUids) {
|
|
147
|
+
if (!nodeUids.includes(nodeUid)) {
|
|
148
|
+
subscribedListeners.forEach(({ callback }) => callback({ type: 'remove', uid: nodeUid }));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/internal/sharing/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|