@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,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUid = getUid;
|
|
4
|
+
exports.getUids = getUids;
|
|
5
|
+
exports.convertInternalNodeIterator = convertInternalNodeIterator;
|
|
6
|
+
exports.convertInternalMissingNodeIterator = convertInternalMissingNodeIterator;
|
|
7
|
+
exports.convertInternalNodePromise = convertInternalNodePromise;
|
|
8
|
+
exports.convertInternalNode = convertInternalNode;
|
|
9
|
+
const interface_1 = require("./interface");
|
|
10
|
+
function getUid(nodeUid) {
|
|
11
|
+
if (typeof nodeUid === "string") {
|
|
12
|
+
return nodeUid;
|
|
13
|
+
}
|
|
14
|
+
// Directly passed NodeEntity or DegradedNode that has UID directly.
|
|
15
|
+
if ('uid' in nodeUid) {
|
|
16
|
+
return nodeUid.uid;
|
|
17
|
+
}
|
|
18
|
+
// MaybeNode that can be either NodeEntity or DegradedNode.
|
|
19
|
+
if (nodeUid.ok) {
|
|
20
|
+
return nodeUid.value.uid;
|
|
21
|
+
}
|
|
22
|
+
return nodeUid.error.uid;
|
|
23
|
+
}
|
|
24
|
+
function getUids(nodeUids) {
|
|
25
|
+
return nodeUids.map(getUid);
|
|
26
|
+
}
|
|
27
|
+
async function* convertInternalNodeIterator(nodeIterator) {
|
|
28
|
+
for await (const node of nodeIterator) {
|
|
29
|
+
yield convertInternalNode(node);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function* convertInternalMissingNodeIterator(nodeIterator) {
|
|
33
|
+
for await (const node of nodeIterator) {
|
|
34
|
+
if ('missingUid' in node) {
|
|
35
|
+
yield (0, interface_1.resultError)(node);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
yield convertInternalNode(node);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function convertInternalNodePromise(nodePromise) {
|
|
43
|
+
const node = await nodePromise;
|
|
44
|
+
return convertInternalNode(node);
|
|
45
|
+
}
|
|
46
|
+
function convertInternalNode(node) {
|
|
47
|
+
const baseNodeMetadata = {
|
|
48
|
+
uid: node.uid,
|
|
49
|
+
parentUid: node.parentUid,
|
|
50
|
+
keyAuthor: node.keyAuthor,
|
|
51
|
+
nameAuthor: node.nameAuthor,
|
|
52
|
+
directMemberRole: node.directMemberRole,
|
|
53
|
+
type: node.type,
|
|
54
|
+
mediaType: node.mediaType,
|
|
55
|
+
isShared: node.isShared,
|
|
56
|
+
creationTime: node.creationTime,
|
|
57
|
+
trashTime: node.trashTime,
|
|
58
|
+
totalStorageSize: node.totalStorageSize,
|
|
59
|
+
folder: node.folder,
|
|
60
|
+
};
|
|
61
|
+
const name = node.name;
|
|
62
|
+
const activeRevision = node.activeRevision;
|
|
63
|
+
if (node.errors?.length || !name.ok || (activeRevision && !activeRevision.ok)) {
|
|
64
|
+
return (0, interface_1.resultError)({
|
|
65
|
+
...baseNodeMetadata,
|
|
66
|
+
name,
|
|
67
|
+
activeRevision,
|
|
68
|
+
errors: node.errors,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return (0, interface_1.resultOk)({
|
|
72
|
+
...baseNodeMetadata,
|
|
73
|
+
name: name.value,
|
|
74
|
+
activeRevision: activeRevision?.value,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=transformers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":";;AAwBA,wBAaC;AAED,0BAEC;AAED,kEAIC;AAED,gFAQC;AAED,gEAGC;AAED,kDAiCC;AAjGD,2CAAuN;AAwBvN,SAAgB,MAAM,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,oEAAoE;IACpE,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC;IACD,2DAA2D;IAC3D,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,CAAC;AAED,SAAgB,OAAO,CAAC,QAAmB;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAEM,KAAK,SAAU,CAAC,CAAA,2BAA2B,CAAC,YAAiD;IAChG,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;AACL,CAAC;AAEM,KAAK,SAAU,CAAC,CAAA,kCAAkC,CAAC,YAA+D;IACrH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAA,uBAAW,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAAC,WAAyC;IACtF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;IAC/B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAyB;IACzD,MAAM,gBAAgB,GAAG;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,IAAI,CAAC,MAAM;KACtB,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAE3C,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAA,uBAAW,EAAC;YACf,GAAG,gBAAgB;YACnB,IAAI;YACJ,cAAc;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACA,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,IAAA,oBAAQ,EAAC;QACZ,GAAG,gBAAgB;QACnB,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,cAAc,EAAE,cAAc,EAAE,KAAK;KACpB,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION: string;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE7B,QAAA,OAAO,GAAG,sBAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@protontech/drive-sdk",
|
|
3
|
+
"version": "0.0.10",
|
|
4
|
+
"description": "Proton Drive SDK",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"src"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"build:ci": "rm -rf dist && tsc",
|
|
15
|
+
"check-types": "tsc --noEmit",
|
|
16
|
+
"generate-doc:interface": "typedoc src/index.ts --out ${OUTPUT_PATH}",
|
|
17
|
+
"generate-doc:internal": "typedoc src/**/*.ts --out ${OUTPUT_PATH}",
|
|
18
|
+
"generate-types": "openapi-typescript ../../api/openapi-drive.json -o ./src/internal/apiService/driveTypes.ts && openapi-typescript ../../api/openapi-core.json -o ./src/internal/apiService/coreTypes.ts",
|
|
19
|
+
"lint": "eslint src --ext .ts --cache --ignore-pattern '**/apiService/*Types.ts'",
|
|
20
|
+
"pretty": "prettier --write $(find src -type f -name '*.ts')",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test:ci": "jest --runInBand --no-cache",
|
|
23
|
+
"test:watch": "jest --watch --coverage=false",
|
|
24
|
+
"lint:ttag": "node tasks/linter.mjs src --verbose",
|
|
25
|
+
"extract:ttag": "ttag extract src --output po/template.pot"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@noble/hashes": "^1.8.0",
|
|
29
|
+
"bcryptjs": "^2.4.3",
|
|
30
|
+
"ttag": "^1.8.7"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@swc/core": "^1.12.3",
|
|
34
|
+
"@swc/jest": "^0.2.38",
|
|
35
|
+
"@types/jest": "^29.5.14",
|
|
36
|
+
"@types/mocha": "^10.0.10",
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^8.19.1",
|
|
38
|
+
"@web/dev-server-esbuild": "^1.0.3",
|
|
39
|
+
"eslint": "^8.57.1",
|
|
40
|
+
"eslint-plugin-tsdoc": "^0.3.0",
|
|
41
|
+
"glob": "^11.0.3",
|
|
42
|
+
"jest": "^29.7.0",
|
|
43
|
+
"openapi-typescript": "^7.4.1",
|
|
44
|
+
"prettier": "^3.4.2",
|
|
45
|
+
"ttag-cli": "^1.10.18",
|
|
46
|
+
"typedoc": "^0.26.11",
|
|
47
|
+
"typescript": "^5.6.3"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export interface ProtonDriveCacheConstructor<T> {
|
|
2
|
+
/**
|
|
3
|
+
* Initialize the cache.
|
|
4
|
+
*
|
|
5
|
+
* The local database should follow document-based structure. The SDK does
|
|
6
|
+
* serialisation and data is not intended to be read by 3rd party. The SDK,
|
|
7
|
+
* however, provides also clear fields in form of tags that is used for
|
|
8
|
+
* search. Local database should have index or other structure for easier
|
|
9
|
+
* look-up.
|
|
10
|
+
*
|
|
11
|
+
* See {@link setEntity} for more details how tags are used.
|
|
12
|
+
*/
|
|
13
|
+
new (): ProtonDriveCache<T>,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ProtonDriveCache<T> {
|
|
17
|
+
/**
|
|
18
|
+
* Re-creates the whole persistent cache.
|
|
19
|
+
*
|
|
20
|
+
* The SDK can call this when there is some inconsistency and it is better
|
|
21
|
+
* to start from scratch rather than fix it.
|
|
22
|
+
*/
|
|
23
|
+
clear(): Promise<void>,
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Adds or updates entity in the local database.
|
|
27
|
+
*
|
|
28
|
+
* The `tags` is a list of strings that should be stored properly for fast
|
|
29
|
+
* look-up.
|
|
30
|
+
*
|
|
31
|
+
* @example Usage by the SDK
|
|
32
|
+
* ```ts
|
|
33
|
+
* await cache.setEntity("node-abc42", "{ node abc42 serialised data }", ["parentUid:abc123", "sharedWithMe"] });
|
|
34
|
+
* await Array.fromAsync(cache.iterateEntitiesByTag("parentUid:abc123")); // returns ["node-abc42"]
|
|
35
|
+
* await cache.getEntity("node-abc42"); // returns "{ node abc42 serialised data }"
|
|
36
|
+
* await Array.fromAsync(cache.iterateEntities(["node-abc42"])); // returns ["{ node abc42 serialised data }"]
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example Stored data
|
|
40
|
+
* ```json
|
|
41
|
+
* {
|
|
42
|
+
* type: "node",
|
|
43
|
+
* version: 1,
|
|
44
|
+
* internal: {
|
|
45
|
+
* isStale,
|
|
46
|
+
* claimedDigests,
|
|
47
|
+
* // ...
|
|
48
|
+
* }
|
|
49
|
+
* node: {
|
|
50
|
+
* // same as node entity, here some example
|
|
51
|
+
* uid,
|
|
52
|
+
* parentUid,
|
|
53
|
+
* // ...
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @param key - Key is internal ID controlled by the SDK. It combines type and ID of the entity.
|
|
59
|
+
* @param value - Serialised JSON object controlled by the SDK. It is not intended for use outside of the SDK.
|
|
60
|
+
* @param tags - Clear metadata about the entity used for filtering. It is intended to store efficiently for fast look-up.
|
|
61
|
+
* @throws Exception if `key` from `tags` is not one of the tag keys provided from `usedTagKeysBySDK` in constructor.
|
|
62
|
+
*/
|
|
63
|
+
setEntity(key: string, value: T, tags?: string[] ): Promise<void>,
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Returns the data of the entity stored locally.
|
|
67
|
+
*
|
|
68
|
+
* @throws Exception if entity is not present.
|
|
69
|
+
*/
|
|
70
|
+
getEntity(key: string): Promise<T>,
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Generator providing the data of the entities stored locally for given
|
|
74
|
+
* list of keys.
|
|
75
|
+
*
|
|
76
|
+
* No exception is thrown when data is missing.
|
|
77
|
+
*/
|
|
78
|
+
iterateEntities(keys: string[]): AsyncGenerator<EntityResult<T>>,
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Generator providing the data of the entities stored locally for given
|
|
82
|
+
* filter option.
|
|
83
|
+
*
|
|
84
|
+
* No exception is thrown when data is missing.
|
|
85
|
+
*
|
|
86
|
+
* @example Usage by the SDK
|
|
87
|
+
* ```ts
|
|
88
|
+
* await cache.setEntity("node-abc42", "{ node abc42 serialised data }", { "parentUid": "abc123", "shared": "withMe" });
|
|
89
|
+
* await Array.fromAsync(cache.iterateEntitiesByTag("parentUid", "abc123")); // returns ["node-abc42"]
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @param tag - The tag, for example `parentUid:abc123`
|
|
93
|
+
*/
|
|
94
|
+
iterateEntitiesByTag(tag: string): AsyncGenerator<EntityResult<T>>,
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Removes completely the entity stored locally from the database.
|
|
98
|
+
*
|
|
99
|
+
* It is no-op if entity is not present.
|
|
100
|
+
*/
|
|
101
|
+
removeEntities(keys: string[]): Promise<void>,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export type EntityResult<T> = {key: string, ok: true, value: T} | {key: string, ok: false, error: string};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { EntityResult } from "./interface";
|
|
2
|
+
import { MemoryCache } from "./memoryCache";
|
|
3
|
+
|
|
4
|
+
describe('MemoryCache', () => {
|
|
5
|
+
let cache: MemoryCache<string>;
|
|
6
|
+
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
cache = new MemoryCache();
|
|
9
|
+
|
|
10
|
+
await cache.setEntity('key1', 'value1', ['tag1:hello', 'tag2:world']);
|
|
11
|
+
await cache.setEntity('key2', 'value2', ['tag2:world']);
|
|
12
|
+
await cache.setEntity('key3', 'value3');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should store and retrieve an entity', async () => {
|
|
16
|
+
const key = 'newkey';
|
|
17
|
+
const value = 'newvalue';
|
|
18
|
+
|
|
19
|
+
await cache.setEntity(key, value);
|
|
20
|
+
const result = await cache.getEntity(key);
|
|
21
|
+
|
|
22
|
+
expect(result).toBe(value);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should update an entity with tags - remove old and add new tags', async () => {
|
|
26
|
+
const key = 'newkey';
|
|
27
|
+
|
|
28
|
+
await cache.setEntity(key, 'value1', ['tag1', 'tag2']);
|
|
29
|
+
await cache.setEntity(key, 'value2', ['tag2', 'tag3']);
|
|
30
|
+
|
|
31
|
+
const result = await cache.getEntity(key);
|
|
32
|
+
expect(result).toBe('value2');
|
|
33
|
+
|
|
34
|
+
const tag1 = await Array.fromAsync(cache.iterateEntitiesByTag('tag1'));
|
|
35
|
+
expect(tag1).toEqual([]);
|
|
36
|
+
const tag2 = await Array.fromAsync(cache.iterateEntitiesByTag('tag2'));
|
|
37
|
+
expect(tag2).toEqual([{ key, ok: true, value: 'value2' }]);
|
|
38
|
+
const tag3 = await Array.fromAsync(cache.iterateEntitiesByTag('tag3'));
|
|
39
|
+
expect(tag3).toEqual([{ key, ok: true, value: 'value2' }]);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should throw an error when retrieving a non-existing entity', async () => {
|
|
43
|
+
const key = 'newkey';
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
await cache.getEntity(key);
|
|
47
|
+
fail('Should have thrown an error');
|
|
48
|
+
} catch (error) {
|
|
49
|
+
expect(`${error}`).toBe('Error: Entity not found');
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('should iterate over entities', async () => {
|
|
54
|
+
const results = [];
|
|
55
|
+
for await (const result of cache.iterateEntities(['key1', 'key2', 'key100'])) {
|
|
56
|
+
results.push(result);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
expect(results).toEqual([
|
|
60
|
+
{ key: 'key1', ok: true, value: 'value1' },
|
|
61
|
+
{ key: 'key2', ok: true, value: 'value2' },
|
|
62
|
+
{ key: 'key100', ok: false, error: 'Error: Entity not found' },
|
|
63
|
+
]);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('should iterate over entities by tag', async () => {
|
|
67
|
+
const results = [];
|
|
68
|
+
for await (const result of cache.iterateEntitiesByTag('tag2:world')) {
|
|
69
|
+
results.push(result);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
expect(results).toEqual([
|
|
73
|
+
{ key: 'key1', ok: true, value: 'value1' },
|
|
74
|
+
{ key: 'key2', ok: true, value: 'value2' },
|
|
75
|
+
]);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('should iterate over entities with multiple tags by tag', async () => {
|
|
79
|
+
const results = [];
|
|
80
|
+
for await (const result of cache.iterateEntitiesByTag('tag1:hello')) {
|
|
81
|
+
results.push(result);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
expect(results).toEqual([
|
|
85
|
+
{ key: 'key1', ok: true, value: 'value1' },
|
|
86
|
+
]);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('should iterate over entities by empty tag', async () => {
|
|
90
|
+
const results = [];
|
|
91
|
+
for await (const result of cache.iterateEntitiesByTag('nonexistent')) {
|
|
92
|
+
results.push(result);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
expect(results).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('should iterate over entities with concurrent changes to the same set', async () => {
|
|
99
|
+
const iterator = cache.iterateEntities(['key1', 'key2', 'key3']);
|
|
100
|
+
|
|
101
|
+
const results: string[] = [];
|
|
102
|
+
const { value: { key: key1 } } = await iterator.next();
|
|
103
|
+
results.push(key1);
|
|
104
|
+
await cache.removeEntities([key1]);
|
|
105
|
+
|
|
106
|
+
let value = await iterator.next(); // key2
|
|
107
|
+
results.push(value.value.key);
|
|
108
|
+
|
|
109
|
+
value = await iterator.next(); // key3
|
|
110
|
+
results.push(value.value.key);
|
|
111
|
+
|
|
112
|
+
expect(results).toEqual(['key1', 'key2', 'key3']);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('should remove entities', async () => {
|
|
116
|
+
await cache.removeEntities(['key1', 'key3']);
|
|
117
|
+
|
|
118
|
+
const results = [];
|
|
119
|
+
for await (const result of cache.iterateEntities(['key1', 'key2', 'key3'])) {
|
|
120
|
+
results.push(result);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
expect(results).toEqual([
|
|
124
|
+
{ key: 'key1', ok: false, error: 'Error: Entity not found' },
|
|
125
|
+
{ key: 'key2', ok: true, value: 'value2' },
|
|
126
|
+
{ key: 'key3', ok: false, error: 'Error: Entity not found' },
|
|
127
|
+
]);
|
|
128
|
+
|
|
129
|
+
const results2 = [];
|
|
130
|
+
for await (const result of cache.iterateEntitiesByTag('tag1:hello')) {
|
|
131
|
+
results2.push(result);
|
|
132
|
+
}
|
|
133
|
+
expect(results2).toEqual([]);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('should clear the cache', async () => {
|
|
137
|
+
await cache.clear();
|
|
138
|
+
|
|
139
|
+
const results = [];
|
|
140
|
+
for await (const result of cache.iterateEntities(['key1', 'key2', 'key3'])) {
|
|
141
|
+
results.push(result);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
expect(results).toEqual([
|
|
145
|
+
{ key: 'key1', ok: false, error: 'Error: Entity not found' },
|
|
146
|
+
{ key: 'key2', ok: false, error: 'Error: Entity not found' },
|
|
147
|
+
{ key: 'key3', ok: false, error: 'Error: Entity not found' },
|
|
148
|
+
]);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ProtonDriveCache, EntityResult } from './interface';
|
|
2
|
+
|
|
3
|
+
type KeyValueCache<T> = { [ key: string ]: T };
|
|
4
|
+
type TagsCache = { [ tag: string ]: string[] };
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* In-memory cache implementation for Proton Drive SDK.
|
|
8
|
+
*
|
|
9
|
+
* This cache is not persistent and is intended for mostly for testing or
|
|
10
|
+
* development only. It is not recommended to use this cache in production
|
|
11
|
+
* environments.
|
|
12
|
+
*/
|
|
13
|
+
export class MemoryCache<T> implements ProtonDriveCache<T> {
|
|
14
|
+
private entities: KeyValueCache<T> = {};
|
|
15
|
+
private entitiesByTag: TagsCache = {};
|
|
16
|
+
|
|
17
|
+
async clear() {
|
|
18
|
+
this.entities = {};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async setEntity(key: string, value: T, tags?: string[]) {
|
|
22
|
+
this.entities[key] = value;
|
|
23
|
+
|
|
24
|
+
for (const tag of Object.keys(this.entitiesByTag)) {
|
|
25
|
+
const index = this.entitiesByTag[tag].indexOf(key);
|
|
26
|
+
if (index !== -1) {
|
|
27
|
+
this.entitiesByTag[tag].splice(index, 1);
|
|
28
|
+
if (this.entitiesByTag[tag].length === 0) {
|
|
29
|
+
delete this.entitiesByTag[tag];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (tags) {
|
|
35
|
+
for (const tag of tags) {
|
|
36
|
+
if (!this.entitiesByTag[tag]) {
|
|
37
|
+
this.entitiesByTag[tag] = [];
|
|
38
|
+
}
|
|
39
|
+
this.entitiesByTag[tag].push(key);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async getEntity(key: string) {
|
|
45
|
+
const value = this.entities[key];
|
|
46
|
+
if (!value) {
|
|
47
|
+
throw Error('Entity not found');
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async *iterateEntities(keys: string[]): AsyncGenerator<EntityResult<T>> {
|
|
53
|
+
for (const key of keys) {
|
|
54
|
+
try {
|
|
55
|
+
const value = await this.getEntity(key);
|
|
56
|
+
yield { key, ok: true, value };
|
|
57
|
+
} catch (error) {
|
|
58
|
+
yield { key, ok: false, error: `${error}` };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async *iterateEntitiesByTag(tag: string): AsyncGenerator<EntityResult<T>> {
|
|
64
|
+
const keys = this.entitiesByTag[tag];
|
|
65
|
+
if (!keys) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Pass copy of keys so concurrent changes to the cache do not affect
|
|
70
|
+
// results from iterating entities.
|
|
71
|
+
yield* this.iterateEntities([...keys]);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async removeEntities(keys: string[]) {
|
|
75
|
+
for (const key of keys) {
|
|
76
|
+
delete this.entities[key];
|
|
77
|
+
Object.values(this.entitiesByTag).forEach((tagKeys) => {
|
|
78
|
+
const index = tagKeys.indexOf(key);
|
|
79
|
+
if (index !== -1) {
|
|
80
|
+
tagKeys.splice(index, 1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
package/src/config.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ProtonDriveConfig } from './interface';
|
|
2
|
+
|
|
3
|
+
export function getConfig(config?: ProtonDriveConfig): Required<ProtonDriveConfig> {
|
|
4
|
+
return {
|
|
5
|
+
...config,
|
|
6
|
+
baseUrl: config?.baseUrl ? `https://${config.baseUrl}` : 'https://drive-api.proton.me',
|
|
7
|
+
language: config?.language || 'en',
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { uint8ArrayToUtf8, arrayToHexString } from "./driveCrypto";
|
|
2
|
+
|
|
3
|
+
describe("uint8ArrayToUtf8", () => {
|
|
4
|
+
it("should convert a Uint8Array to a UTF-8 string", () => {
|
|
5
|
+
const input = new Uint8Array([72, 101, 108, 108, 111]);
|
|
6
|
+
const expectedOutput = "Hello";
|
|
7
|
+
const result = uint8ArrayToUtf8(input);
|
|
8
|
+
expect(result).toBe(expectedOutput);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("should handle an empty Uint8Array", () => {
|
|
12
|
+
const input = new Uint8Array([]);
|
|
13
|
+
const expectedOutput = "";
|
|
14
|
+
const result = uint8ArrayToUtf8(input);
|
|
15
|
+
expect(result).toBe(expectedOutput);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("should throw if input is invalid", () => {
|
|
19
|
+
const input = new Uint8Array([887987979887897989]);
|
|
20
|
+
expect(() => uint8ArrayToUtf8(input)).toThrow("The encoded data was not valid for encoding utf-8");
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe("arrayToHexString", () => {
|
|
25
|
+
it("should convert a Uint8Array to a hex string", () => {
|
|
26
|
+
const input = new Uint8Array([0, 255, 16, 32]);
|
|
27
|
+
const expectedOutput = "00ff1020";
|
|
28
|
+
const result = arrayToHexString(input);
|
|
29
|
+
expect(result).toBe(expectedOutput);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("should handle an empty Uint8Array", () => {
|
|
33
|
+
const input = new Uint8Array([]);
|
|
34
|
+
const expectedOutput = "";
|
|
35
|
+
const result = arrayToHexString(input);
|
|
36
|
+
expect(result).toBe(expectedOutput);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("should handle a Uint8Array with one element", () => {
|
|
40
|
+
const input = new Uint8Array([1]);
|
|
41
|
+
const expectedOutput = "01";
|
|
42
|
+
const result = arrayToHexString(input);
|
|
43
|
+
expect(result).toBe(expectedOutput);
|
|
44
|
+
});
|
|
45
|
+
});
|