Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
791 commits
Select commit Hold shift + click to select a range
095268c
Update changelog for js/v0.10.0
ProtonDriveTeam Feb 19, 2026
caf32b8
i18n(weekly-mr): Upgrade translations from crowdin (095268ce).
ProtonDriveTeam Feb 23, 2026
3a5cb68
Do not block upload block reuqest by computing digest
ProtonDriveTeam Feb 20, 2026
22690e0
Add context to timestamp conversion errors
ProtonDriveTeam Feb 19, 2026
fb14d59
Set caller exception as cause to be reported in Sentry
ProtonDriveTeam Feb 23, 2026
04b3036
Fix value type check
ProtonDriveTeam Feb 23, 2026
77053f2
Add node context to error about missing parent key
ProtonDriveTeam Feb 23, 2026
bf034b9
Upgrade android core to the last version (36.3.0)
ProtonDriveTeam Feb 23, 2026
41d9abb
Clean native memory of global weak references
ProtonDriveTeam Feb 24, 2026
2211a6f
Add crypto performance metrics
ProtonDriveTeam Feb 24, 2026
8ee48b5
Stop reporting progress after failed upload
ProtonDriveTeam Feb 25, 2026
2b6de18
Fix failures due to empty authorship results on degraded nodes
ProtonDriveTeam Feb 25, 2026
ff3ad9e
Ignore performance metrics in diagnostics tool
ProtonDriveTeam Feb 25, 2026
85b5d1e
Clean native memory of weak references after release
ProtonDriveTeam Feb 25, 2026
6013a3f
Improve error reporting with full exception details
ProtonDriveTeam Feb 25, 2026
3593d84
Provide clearer context when canceling operations
ProtonDriveTeam Feb 25, 2026
6a36c17
Transmit api codes through interop
ProtonDriveTeam Feb 25, 2026
3c7d2f0
Update changelog for cs/v0.7.0-alpha.12
ProtonDriveTeam Feb 26, 2026
7d7ecd9
Add method to update photo tags
ProtonDriveTeam Feb 26, 2026
2212c10
Categorize upload integrity exception properly
ProtonDriveTeam Feb 26, 2026
b49dac7
Update changelog for js/v0.11.0
ProtonDriveTeam Feb 27, 2026
edbfd58
Support AEAD block encryption
ProtonDriveTeam Feb 27, 2026
4812ed3
Fix second-attempt file upload failing due to signature key disposal
ProtonDriveTeam Feb 27, 2026
59d2c2f
Improve error reporting for trash and restore operations
ProtonDriveTeam Feb 27, 2026
f1fa527
i18n(weekly-mr): Upgrade translations from crowdin (2a3e4b9f).
ProtonDriveTeam Mar 2, 2026
9b42004
Override parentUid for root node of public link
ProtonDriveTeam Mar 2, 2026
0c4d498
Add Kotlin bindings for trash nodes
ProtonDriveTeam Mar 2, 2026
ed620e4
Add AEAD crypto test and FF management
ProtonDriveTeam Mar 2, 2026
467d354
Update changelog for js/v0.12.0
ProtonDriveTeam Mar 2, 2026
4eff34b
Update changelog for cs/v0.7.0-alpha.13
ProtonDriveTeam Mar 2, 2026
b11be18
Improve the way drafts are considered non-resumable to pass through o…
ProtonDriveTeam Mar 2, 2026
c80dcfd
Update changelog for cs/v0.7.0-alpha.14
ProtonDriveTeam Mar 2, 2026
a327d8a
Fix registry not removing objects when the removeAll call happens fro…
ProtonDriveTeam Mar 3, 2026
6147894
Update changelog for cs/v0.7.0-alpha.15
ProtonDriveTeam Mar 3, 2026
9af7b87
Ensure cancelled uploads/downloads don't block queue
ProtonDriveTeam Mar 4, 2026
a8a2b7d
Update changelog for cs/v0.7.0-alpha.16
ProtonDriveTeam Mar 4, 2026
29be03e
Align telemetry with the web SDK
ProtonDriveTeam Mar 5, 2026
55207bf
Implement small file upload endpoint
ProtonDriveTeam Mar 5, 2026
b497d77
Log failed attempts to report decryption errors to telemetry
ProtonDriveTeam Mar 6, 2026
d0a9bf3
Add context traversal for photo nodes and set telemetry volume type
ProtonDriveTeam Mar 6, 2026
7dbf3bf
i18n(weekly-mr): Upgrade translations from crowdin (d0a9bf3a).
ProtonDriveTeam Mar 9, 2026
e0ed33d
Change main photo reference to UID instead of link ID
ProtonDriveTeam Mar 9, 2026
3575b62
Add interop and Kotlin bindings for trash management
ProtonDriveTeam Mar 9, 2026
fb6a3c0
Use java Instant instead for Long to describe time
ProtonDriveTeam Mar 9, 2026
9dace9f
Prevent resumed uploads from being paused by a stale previous attempt
ProtonDriveTeam Mar 10, 2026
9fbf0ce
Fix manifest verification errors due to wrong thumbnail order in mani…
ProtonDriveTeam Mar 10, 2026
d39a175
Update changelog for cs/v0.7.0-alpha.17
ProtonDriveTeam Mar 11, 2026
8b420ab
Handle empty file using single-request-file-upload endpoint
ProtonDriveTeam Mar 11, 2026
454fbd4
Add owned by property
ProtonDriveTeam Mar 11, 2026
58434d3
Propagate individual thumbnail errors to callers instead of silently …
ProtonDriveTeam Mar 11, 2026
aeab09a
Update changelog for js/v0.13.0
ProtonDriveTeam Mar 11, 2026
2418781
Handle nullable OwnedBy fields when mapping to proto
ProtonDriveTeam Mar 11, 2026
4d36c3f
Set swift error message
ProtonDriveTeam Mar 11, 2026
d7917f4
Implement upload to Photos
ProtonDriveTeam Mar 12, 2026
5f2a566
Update changelog for cs/v0.8.0
ProtonDriveTeam Mar 12, 2026
69ad027
Add streaming thumbnails enumeration for Drive and Photos clients
ProtonDriveTeam Mar 13, 2026
f0b9333
Fix disposal of upload controller and update upload bindings api
ProtonDriveTeam Mar 16, 2026
dbe3a8c
Log number of ids when enumerate thumbnails
ProtonDriveTeam Mar 16, 2026
82a8b98
i18n(weekly-mr): Upgrade translations from crowdin (69ad027c).
ProtonDriveTeam Mar 16, 2026
8fe2d13
Update changelog for cs/v0.8.1
ProtonDriveTeam Mar 16, 2026
adf6220
Add approximate sizes to telemetry events
ProtonDriveTeam Mar 18, 2026
bde0dc3
Clarify exception for missing node when looking up entry point
ProtonDriveTeam Mar 18, 2026
7895d53
Change API endpoint that updates 'editors can share' value
ProtonDriveTeam Mar 16, 2026
cc30c8c
Parse enumerate result synchronously
ProtonDriveTeam Mar 18, 2026
9d3a719
Throw error if node is not found
ProtonDriveTeam Mar 18, 2026
318be69
Expose structured data on upload integrity errors
ProtonDriveTeam Mar 19, 2026
e17e835
Fix telemetry causing deadlock on uploads and downloads
ProtonDriveTeam Mar 19, 2026
283377b
Improve error details for drive errors
ProtonDriveTeam Mar 19, 2026
b88d031
Handle missing timestamps in photo upload metadata
ProtonDriveTeam Mar 19, 2026
9140afb
Make LatestEventIdProvider.getLatestEventId async to support IndexedDB
ProtonDriveTeam Mar 19, 2026
833a831
Try all album inclusions to find the entry point key
ProtonDriveTeam Mar 19, 2026
9ff10d2
Update changelog for js/v0.13.1
ProtonDriveTeam Mar 20, 2026
bbe01b1
Fail node provision when parent key could not be obtained
ProtonDriveTeam Mar 20, 2026
b9b9398
Make unknown telemetry volume type explicit
ProtonDriveTeam Mar 20, 2026
14092be
Update changelog for cs/v0.9.0
ProtonDriveTeam Mar 20, 2026
a7c9cc0
Improve error details for node decryption failures
ProtonDriveTeam Mar 20, 2026
5339c8d
Fix wrong link details endpoint being used for Photos
ProtonDriveTeam Mar 20, 2026
0b16c35
Allow resuming download to non seekable data stream
ProtonDriveTeam Mar 20, 2026
a121649
Report unmapped HTTP errors as Network errors instead of Unknown
ProtonDriveTeam Mar 20, 2026
d65dcb9
Report checksum verification state to back-end and client
ProtonDriveTeam Mar 20, 2026
2358f67
Update changelog for cs/v0.9.2
ProtonDriveTeam Mar 20, 2026
64593ad
Report checksum verification state to interop
ProtonDriveTeam Mar 23, 2026
fb43bad
Mark checksum verified as optional in the api
ProtonDriveTeam Mar 23, 2026
5d168c7
Update changelog for cs/v0.9.3
ProtonDriveTeam Mar 23, 2026
3682859
Allow saving photos when deleting albums
ProtonDriveTeam Mar 23, 2026
1756e74
Update changelog for js/v0.14.0
ProtonDriveTeam Mar 23, 2026
731d646
Expose structured data on upload integrity errors to Swift binding
ProtonDriveTeam Mar 19, 2026
329cc89
Fix wrong volume type for photo events
ProtonDriveTeam Mar 23, 2026
af36b1d
Update changelog for cs/v0.9.4
ProtonDriveTeam Mar 23, 2026
b9dd682
Upgrade ProtonCore_iOS to 36.0.3
ProtonDriveTeam Mar 23, 2026
8b628dd
Enable resuming of uploads from Swift bindings
ProtonDriveTeam Mar 24, 2026
a220358
Surface non-resumable upload and download as typed exceptions
ProtonDriveTeam Mar 24, 2026
d7c9d85
Update changelog for cs/v0.10.0
ProtonDriveTeam Mar 24, 2026
c896cf3
Wrap SDK exception into IO exception for android network library to h…
ProtonDriveTeam Mar 25, 2026
7a04452
Update changelog for cs/v0.11.1
ProtonDriveTeam Mar 25, 2026
4dd91fd
Add experimental getSessionInfo helper
ProtonDriveTeam Mar 25, 2026
30f0d29
Update changelog for js/v0.14.1
ProtonDriveTeam Mar 25, 2026
aaf4efc
Update Swift binding to get trash error
ProtonDriveTeam Mar 23, 2026
f97ad89
Fix regression in disposal of file transfer controllers
ProtonDriveTeam Mar 26, 2026
a05a737
Stream trash enumeration instead of loading all items at once
ProtonDriveTeam Mar 12, 2026
dc2be21
Rename library to fix Xcode26.4 dependency issue
ProtonDriveTeam Mar 27, 2026
d6b4c29
Update changelog for cs/v0.11.2
ProtonDriveTeam Mar 27, 2026
1395066
Handle thumbnails in small file upload
ProtonDriveTeam Mar 27, 2026
fefab4d
Update nodes after shared with me updated event
ProtonDriveTeam Mar 27, 2026
7bb088e
Remove the need to dispose of Photos client
ProtonDriveTeam Mar 27, 2026
4827a04
Add streaming thumbnails enumeration to Swift bindings
ProtonDriveTeam Mar 30, 2026
7834b45
i18n(weekly-mr): Upgrade translations from crowdin (4827a04c).
ProtonDriveTeam Mar 30, 2026
7016364
Return all possible items from batch loading
ProtonDriveTeam Mar 27, 2026
9acb6bb
Update changelog for js/v0.14.2
ProtonDriveTeam Mar 30, 2026
05390cd
Log network calls with body size
ProtonDriveTeam Mar 26, 2026
f29ac8a
Fix cancellation in download and upload
ProtonDriveTeam Mar 30, 2026
9f9f339
Fix thumbnail enumeration to stay within API limits
ProtonDriveTeam Mar 30, 2026
4de6639
Do not call interop functions if cancelled
ProtonDriveTeam Mar 30, 2026
7f425b6
Move native weak reference management to kotlin
ProtonDriveTeam Mar 27, 2026
f8d08fb
Introduce uids in the kotlin bindings
ProtonDriveTeam Mar 30, 2026
4a48d71
Remove get thumbnails in favor of enumerate thumbnails
ProtonDriveTeam Mar 30, 2026
e0ba5ac
Update changelog for cs/v0.12.0
ProtonDriveTeam Mar 31, 2026
1583740
Remove casting for parentNodeUid
ProtonDriveTeam Mar 31, 2026
4d4b51e
Add trash management to Photos
ProtonDriveTeam Mar 23, 2026
e6606cb
Extract clients interfaces
ProtonDriveTeam Mar 31, 2026
88410bc
Update changelog for js/v0.14.3
ProtonDriveTeam Apr 1, 2026
b669acf
Fix function to get node from Photos client not using Photos API
ProtonDriveTeam Apr 1, 2026
2a50fdc
Enable streaming of results when enumerating folder children and Phot…
ProtonDriveTeam Apr 1, 2026
a551208
Fix illegal assignments of null values to Protobuf fields for authors…
ProtonDriveTeam Apr 1, 2026
6923273
Keep http request body in kotlin memory for retries
ProtonDriveTeam Apr 2, 2026
96213f8
Get public link of share only for my own nodes
ProtonDriveTeam Apr 2, 2026
8f1ce60
Update changelog for cs/v0.13.0
ProtonDriveTeam Apr 2, 2026
95c0522
Update changelog for js/v0.14.4
ProtonDriveTeam Apr 2, 2026
faeeb85
Fix feature flag parsing in kotlin
ProtonDriveTeam Apr 2, 2026
d5e23ea
Update logs from kotlin resume api
ProtonDriveTeam Apr 3, 2026
90244f1
Change move function to support returning validation error
ProtonDriveTeam Apr 7, 2026
468be47
i18n(weekly-mr): Upgrade translations from crowdin (d5e23ea0).
ProtonDriveTeam Apr 6, 2026
e3a756a
Log network error and retries in kotlin
ProtonDriveTeam Apr 4, 2026
3dc6878
Resume continuation only when active
ProtonDriveTeam Apr 4, 2026
cc29178
Update changelog for cs/v0.13.2
ProtonDriveTeam Apr 7, 2026
359341e
Avoid crypto key fallback for non-owners
ProtonDriveTeam Apr 8, 2026
13f3f67
Support NonProtonInvitation conversion
ProtonDriveTeam Apr 8, 2026
d66cc14
Fix issue when listing photos of shared album
ProtonDriveTeam Apr 9, 2026
979f434
Correctly catch AbortError in batchLoading
ProtonDriveTeam Apr 9, 2026
3dad510
Update changelog for js/v0.14.6
ProtonDriveTeam Apr 9, 2026
e3cde4c
Fix verifying signature contexts
ProtonDriveTeam Apr 10, 2026
9b4c376
i18n(weekly-mr): Upgrade translations from crowdin (e3cde4ce).
ProtonDriveTeam Apr 13, 2026
d240a06
Switch NPM package license to MIT
ProtonDriveTeam Apr 13, 2026
ec0b8e9
Fix failure to upload new revision on single file sharing
ProtonDriveTeam Apr 16, 2026
5e898ff
Update changelog for cs/v0.13.3
ProtonDriveTeam Apr 16, 2026
441103a
Add experimental iterate by uids for albums and shared with me albums
ProtonDriveTeam Apr 17, 2026
89ee79f
Update changelog for js/v0.14.7
ProtonDriveTeam Apr 17, 2026
eec6ea7
Fix memory leak on SHA1 provision through interop
ProtonDriveTeam Apr 17, 2026
61b600e
i18n(weekly-mr): Upgrade translations from crowdin (eec6ea77).
ProtonDriveTeam Apr 20, 2026
df8decb
Add get node for Kotlin drive client
ProtonDriveTeam Apr 17, 2026
29f5e51
Improve download initialization speed by parallelizing some server ro…
ProtonDriveTeam Apr 20, 2026
4348a42
Update changelog for cs/v0.13.4
ProtonDriveTeam Apr 20, 2026
431c973
Ensure expected SHA1 provider is called only once during upload
ProtonDriveTeam Apr 20, 2026
80fccdd
Add encrypted credentials and cache
ProtonDriveTeam Apr 21, 2026
1491833
Add public CLI
ProtonDriveTeam Apr 7, 2026
1b7ee69
Add thumbnail error handling from API response
ProtonDriveTeam Apr 22, 2026
0aff88f
Prevent encrypted block buffers from leaking via onProgress closure
ProtonDriveTeam Apr 22, 2026
cc8c819
Report checksum verification
ProtonDriveTeam Mar 20, 2026
bcfa545
Upgrade protoncore_ios to 37.0.1
ProtonDriveTeam Apr 22, 2026
cbb8922
Update changelog for cs/v0.13.5
ProtonDriveTeam Apr 22, 2026
141d00a
Handle too many children exception when creating a new draft
ProtonDriveTeam Apr 22, 2026
1dac7c7
Update changelog for cs/v0.13.6
ProtonDriveTeam Apr 22, 2026
90612bb
Update album metadata cache after albums api request
ProtonDriveTeam Apr 23, 2026
bb56fb7
Log error when volume type is unknown
ProtonDriveTeam Apr 22, 2026
e361779
Update changelog for js/v0.14.8
ProtonDriveTeam Apr 23, 2026
3a5accc
Remove unnecessary too many children exception
ProtonDriveTeam Apr 23, 2026
c0594c9
Update changelog for cs/v0.13.7
ProtonDriveTeam Apr 23, 2026
716991a
Improve exception type names in error reports
ProtonDriveTeam Apr 23, 2026
938f49b
Reduce log in controllers
ProtonDriveTeam Apr 24, 2026
26c0111
Add extension to aborted exception
ProtonDriveTeam Apr 24, 2026
7e05e81
Fix nullable data in name conflict error
ProtonDriveTeam Apr 21, 2026
fd87afe
Expose savePhotosToTimeline
ProtonDriveTeam Apr 27, 2026
8bd00b9
Update changelog for js/v0.14.9
ProtonDriveTeam Apr 27, 2026
9bd0fd6
Update changelog for cs/v0.13.8
ProtonDriveTeam Apr 27, 2026
c894d1b
Fix download queuing not blocking on full queue
ProtonDriveTeam Apr 27, 2026
98ccc54
Update cached album photo count after adding or removing photo
ProtonDriveTeam Apr 27, 2026
598bd10
Update changelog for js/v0.14.10
ProtonDriveTeam Apr 27, 2026
1bd2eee
Upgrade to .NET 10
ProtonDriveTeam Apr 27, 2026
b6934a3
Evict non-deserializable entries from cache
ProtonDriveTeam Apr 8, 2026
ea784e1
Reduce log level for draft deletion failure from error to warning
ProtonDriveTeam Apr 28, 2026
b36ca84
Fix name conflict handling regression
ProtonDriveTeam Apr 28, 2026
c7d1f30
Update changelog for cs/v0.14.0
ProtonDriveTeam Apr 28, 2026
06f4481
Add upload and download commands
ProtonDriveTeam Apr 28, 2026
abb9635
Generate both thumbnails in CLI as WebP
ProtonDriveTeam Apr 28, 2026
008e6e7
Pull crypto dependency from Maven
ProtonDriveTeam Apr 29, 2026
777fbe2
Integrate @protontech/crypto
ProtonDriveTeam Apr 29, 2026
1baaf57
Fix TypeError not being recognized as NetworkError
ProtonDriveTeam Apr 29, 2026
a563ed6
Include error details in decryption telemetry events
ProtonDriveTeam Apr 30, 2026
bfee1a7
Add events subscriptions for CLI
ProtonDriveTeam Apr 30, 2026
320de34
Persist client UID
ProtonDriveTeam Apr 30, 2026
a0ba9f1
Add error for verification error event
ProtonDriveTeam Apr 30, 2026
a478b2e
BatchSize for remove_multiple on photos should be 10
ProtonDriveTeam Apr 30, 2026
a0f3c02
Refactor Proton API exception to consolidate constructor initialization
ProtonDriveTeam May 1, 2026
5586743
Update changelog for cs/v0.14.1
ProtonDriveTeam May 1, 2026
a112880
Handle loading drafts
ProtonDriveTeam Apr 22, 2026
41449e8
Optional AccountClientProtocol + interop nil handling
ProtonDriveTeam May 4, 2026
58c9798
Make cryptography time monotonic
ProtonDriveTeam May 4, 2026
2b4bb71
Fix detecting photo drafts
ProtonDriveTeam May 5, 2026
bc33393
Update changelog for cs/v0.14.2
ProtonDriveTeam May 6, 2026
8ee9841
Update changelog for js/v0.15.0
ProtonDriveTeam May 6, 2026
353fc27
Remove slash validation name after decryption
ProtonDriveTeam May 7, 2026
a69225c
Fix handling of mismatch between uploaded and intended sizes
ProtonDriveTeam May 7, 2026
fd1ecbb
Fix upload failing to resume when blocks were uploaded out of order
ProtonDriveTeam May 7, 2026
dc80f26
Add info log for uploader and downloader
ProtonDriveTeam May 6, 2026
250f360
i18n(weekly-mr): Upgrade translations from crowdin (a87f8802).
ProtonDriveTeam May 11, 2026
d0bb1bd
Flatten messages of decryption errors reported to telemetry
ProtonDriveTeam May 11, 2026
7455c0e
Classify HTTP response code 499 as server error
ProtonDriveTeam May 11, 2026
13b3baf
Handle degraded folder secrets in upload and node operations
ProtonDriveTeam May 5, 2026
ffaf4b8
Update changelog for cs/v0.14.3
ProtonDriveTeam May 11, 2026
7652c33
Allow all address keys to be used for decryption when listing invitat…
ProtonDriveTeam May 11, 2026
ba7263e
Update changelog for js/v0.15.1
ProtonDriveTeam May 12, 2026
41102bf
Fix incorrect reporting of decryption errors
ProtonDriveTeam May 13, 2026
6f7d473
Retry network errors more times and with bigger delay
ProtonDriveTeam May 12, 2026
79b8209
Update changelog for cs/v0.14.4
ProtonDriveTeam May 14, 2026
1252c5d
Fix error mapping for decryption
ProtonDriveTeam May 14, 2026
ca7ed44
Allow client to pass core events from external subscription
ProtonDriveTeam May 14, 2026
57f1b5b
Update cached node after revision restore
ProtonDriveTeam May 14, 2026
685b85a
Clarify README
ProtonDriveTeam May 15, 2026
19feb95
i18n(weekly-mr): Upgrade translations from crowdin (36ac83c9).
ProtonDriveTeam May 18, 2026
dc7831b
Avoid content key packet verification fallback on publicly shared nodes
ProtonDriveTeam May 13, 2026
54658d5
Fix missing disposal of reader in Sqlite cache repository
ProtonDriveTeam May 18, 2026
fd1d510
Update changelog for cs/v0.14.5
ProtonDriveTeam May 18, 2026
57bdc34
Support copy on save for not owned album
ProtonDriveTeam May 19, 2026
afa97fb
Update changelog for js/v0.15.2
ProtonDriveTeam May 19, 2026
0b6c986
Export CoreEventInput type to prevent casting on client
ProtonDriveTeam May 20, 2026
a19abd0
Show what was actually in the JSON when extended attributes cannot be…
ProtonDriveTeam May 21, 2026
03597f7
Make last modification time optional for file uploads
ProtonDriveTeam May 22, 2026
dbcf796
Wrap node not found into a dedicated exception
ProtonDriveTeam May 22, 2026
904b8b3
Retry block encryption and report metric
ProtonDriveTeam May 22, 2026
8acfd69
Update docs
ProtonDriveTeam May 25, 2026
cdfb726
Prefer iterate over UIDs over nodes
ProtonDriveTeam May 26, 2026
76f8452
Add method to return node hierarchy
ProtonDriveTeam May 26, 2026
bb49128
Use single type hierarchy for nodes
ProtonDriveTeam May 27, 2026
0d0b264
Fix interop account client requesting empty address instead of defaul…
ProtonDriveTeam May 27, 2026
854cd60
Do not close the input stream in Swift's StreamForUpload
ProtonDriveTeam May 26, 2026
b8ca745
Publish Swift SDK to separate GitHub repository
ProtonDriveTeam May 27, 2026
de54b53
Add method to iterate events
ProtonDriveTeam May 27, 2026
d0f8ce1
Fix cache not evicting incompatible entries
ProtonDriveTeam May 27, 2026
ab82b74
Report extended attributes size for download progress instead of revi…
ProtonDriveTeam May 27, 2026
3cc28d8
Update changelog for cs/v0.15.0
ProtonDriveTeam May 27, 2026
428cb9f
Verify added by email fields
ProtonDriveTeam May 28, 2026
e56de85
Merge result error message with first error message
ProtonDriveTeam May 28, 2026
aac35b1
Use photos API when fetching album and photo node details
ProtonDriveTeam May 28, 2026
24b6757
Fix node secrets not being read from cache
ProtonDriveTeam May 28, 2026
f695c76
Support more modification time formats and report invalid ones as nod…
ProtonDriveTeam May 28, 2026
24131ca
Update changelog for cs/v0.15.1
ProtonDriveTeam May 28, 2026
c82b77e
Drop rounding for crypto performance telemetry
ProtonDriveTeam May 29, 2026
5f4e519
Add validation_error category for upload & download telemetry events
ProtonDriveTeam May 29, 2026
9a45674
Process automatically events converting external invitations
ProtonDriveTeam May 29, 2026
2c82ba7
Fix root README js/docs generation instructions
ronituohino May 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
33 changes: 32 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,38 @@
# macOS
.DS_Store

# Docs
public
__pycache__
docs/build
/public
js/public
doc

# JS
node_modules
.eslintcache
tsconfig.tsbuildinfo
dist

# JS CLI
js/cli/release
auth.txt
auth-session.json
cache*.sqlite
events.json
events.lock
clientUid.json
*.log
*.bun-build
config.json
*.map

# IDEs
.vs
.vscode
.idea
*.swp

# Tests
tests/storage
tests/test-results
22 changes: 20 additions & 2 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
# License
The MIT License

TBD
Copyright (c) 2025-2026 Proton AG

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
103 changes: 98 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,102 @@
# Drive SDK
# Proton Drive SDK

Copyright (c) 2025 Proton AG
The Proton Drive SDK provides a high-level interface for interacting with Proton Drive. It is available in the following languages:

TBD
- **TypeScript** — native SDK in [`js/sdk/`](./js/sdk/), available on npm as [`@protontech/drive-sdk`](https://www.npmjs.com/package/@protontech/drive-sdk). See [changelog](./js/CHANGELOG.md) for changes.
- **C#** — native SDK in [`cs/sdk/`](./cs/sdk/). See [changelog](./cs/CHANGELOG.md) for changes.
- **Kotlin** — bindings that wrap the C# SDK in [`kt/`](./kt/). See [changelog](./cs/CHANGELOG.md) for changes to the C# SDK.
- **Swift** - bindings that wrap the C# SDK in [`swift/ProtonDriveSDK/`](./swift/ProtonDriveSDK/), available on github as [`sdk-swift`](https://github.com/ProtonDriveApps/sdk-swift). See [changelog](./cs/CHANGELOG.md) for changes to the C# SDK.

## Contributions
### Who this is for

Contributions are not accepted at the moment.
| Audience | Expectations |
| --- | --- |
| **Proton first-party clients** | Primary focus today: this codebase is built for and validated alongside official Proton Drive apps. |
| **Personal, non-commercial projects** | Allowed under [Guidelines](#usage-guidelines-for-personal-projects) below. Expect interface changes and the upcoming cryptographic migration until general availability. |
| **Commercial or production third-party apps** | The SDK is not yet ready for third-party production use. |

Using the SDK directly is still recommended over raw Drive API calls for any experimentation, so correctness, safety and rate-limit expectations stay aligned with first-party behavior. The SDK handles encryption and metadata processing, protecting uploaded data from corruption due to incorrect encryption or invalid metadata.

## Current Status

The SDK is actively being integrated into official Proton Drive clients. During this phase, the architecture and public interface may still change.

**Upcoming cryptographic model change**:

- **What changes:** Proton Drive will move to a new cryptographic model that improves performance, simplifies the architecture, and strengthens security.
- **When:** Currently targeted for the **end of 2026/early 2027**. This window is an estimate and may shift; final timing and migration steps will be documented in this README and in the changelogs when they are finalized.
- **What breaks:** Once the service uses the new model, any client that only implements the previous cryptography including older SDK releases will **not** interoperate until upgraded to a release that implements the new model.
- **How to stay informed:** Watch this repository and read changelogs and README for migration notes and definitive dates.

Once these changes are complete and the integration is stable, the SDK will be officially released for third-party use.

Despite not being officially supported for third-party use at present, Proton strongly recommends integrating through this SDK rather than calling the Drive API directly. It is the same implementation used in Proton's first-party clients and is maintained to the same quality standards, even while the public interface continues to evolve. If you integrate without the SDK, you must still follow those guidelines; non-compliant clients may be rate-limited or blocked to protect Proton Drive and other users.

## Usage Guidelines for Personal Projects

The SDK may be used for personal, non-commercial projects. If you choose to build an application using Proton Drive, you **must** adhere to the requirements below.

### Operational requirements

These rules protect service availability and honest identification of clients. Rate limits are per session and user, thus third-party applications use the **same rate-limiting policy** as Proton first-party Drive clients.

| Requirement | Description |
| --- | --- |
| **Use the SDK** | You are strongly encouraged to interact with Proton Drive through the SDK. If you make direct API calls, your application **must** implement the same correctness and safety guarantees as the SDK. Failing to use appropriate caching, event-based sync, parallelism limits, and exponential backoff may cause your application to be rate-limited to protect service availability. |
| **Use official endpoints** | All HTTP requests must go to the official Proton Drive domain. Do not modify or proxy API endpoints to different domains. |
| **Identify your application** | Set the `x-pm-appversion` HTTP header so it identifies your build honestly. Use the shape described below (for example, `external-drive-myapp@1.2.3-stable`). The value must accurately represent your application. Do not spoof or falsify this header. Third-party clients that seek to masquerade as official Proton first-party clients are forbidden and may stop working at any time. Customer support and development use the reported app version to troubleshoot requests; a **specific version may be blocked** if it is known to ship a serious bug. |
| **Use event-based sync** | Synchronize data using Drive events. Do not poll the API or perform frequent recursive traversals of the file tree. Excessive polling or recursion may cause your application and your account to be rate-limited to protect service availability. |

Use this pattern for `x-pm-appversion`:

`external-drive-{name}@{semver}-{channel}+{suffix}` with optional SemVer build metadata `+{suffix}` (for example a short commit hash).

- **`{name}`** — your project identifier using lowercase letters and underscores (e.g. `my_app`).
- **`{semver}`** — `major.minor.patch` (e.g. `1.2.3`).
- (optional) **`{channel}`** — one of `stable`, `beta`, or `alpha`.
- (optional) **`+{suffix}`** — build metadata, for example a short commit hash (e.g. `+abc123f`).

Examples:

- `external-drive-myapp@1.2.3-stable`
- `external-drive-my_app@2.0.0-beta`
- `external-drive-photo_backup@1.0.0-alpha+abc123f`

### Product and legal requirements

These rules keep third-party apps distinguishable from official Proton products and transparent to users.

| Requirement | Description |
| --- | --- |
| **No Proton branding** | Your application must not use Proton logos, trademarks, or design elements. It must be clearly distinguishable as an unofficial, third-party product. |
| **Credential handling disclosure** | When you prompt a user for account details (including but not limited to username and password) your application must clearly state that it is a third-party application not officially supported by Proton. Suggested text: _This is a third-party application not officially supported by Proton._ |

To protect the availability of Proton Drive and to properly safeguard the Proton customer experience, failure to comply with these requirements may result in your third-party application being limited or blocked from accessing Proton services. If you believe your third-party application has been improperly limited and/or blocked, please contact customer support on [proton.me/support/contact](https://proton.me/support/contact).

## Scope and Limitations

The SDK provides functionality for Proton Drive business logic only. It does **not** include:

- Authentication or login flows
- Session management
- User address provider

**Where to look first:** Official Proton Drive clients wire these pieces into the SDK; treat them as the living reference until this repository publishes standalone sample apps. Standalone integration support will be documented once the SDK reaches general availability.

## Documentation

We are preparing the documentation for the SDK. It will be available in the future.

Until then, you can generate the code reference for the TypeScript SDK using the following command:

```bash
cd js/sdk && OUTPUT_PATH=./doc npm run generate-docs
```

## License

This project is licensed under the MIT License. See [LICENSE.md](./LICENSE.md) for details.

> **Using Proton’s hosted services:** The MIT license governs **use of the source code in this repository** only. Access to **Proton’s hosted services** (including Proton Drive) remains subject to separate terms of service and operational policies. Integration rules and enforcement described in this README apply regardless of the OSS license.

Copyright (c) 2026 Proton AG
6 changes: 5 additions & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Security

TBD
If you discover a security vulnerability in the Proton Drive SDK, please report it through our official bug bounty program:

**[Proton Bug Bounty Program](https://proton.me/security/bug-bounty)**

For general security inquiries, you can reach us at [security@proton.me](mailto:security@proton.me).
210 changes: 210 additions & 0 deletions cs/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

[**/obj/**.cs]
generated_code = true

# C# files
[*.cs]

#### Core EditorConfig Options ####

# Indentation and spacing
indent_size = 4
indent_style = space
tab_width = 4

# New line preferences
insert_final_newline = true

#### .NET Coding Conventions ####

# Make build follow IDE severities
dotnet_analyzer_diagnostic.severity = default

# Organize usings
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = true

# this. and Me. preferences
dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_property = false:silent

# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent

# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent

# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent

# Expression-level preferences
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion

# Field preferences
dotnet_style_readonly_field = true:suggestion

# Parameter preferences
dotnet_code_quality_unused_parameters = all:suggestion

#### C# Coding Conventions ####

# var preferences
csharp_style_var_elsewhere = true
csharp_style_var_for_built_in_types = true
csharp_style_var_when_type_is_apparent = true

# Expression-bodied members
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent

# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_prefer_switch_expression = true:suggestion

# Null-checking preferences
csharp_style_conditional_delegate_call = true:suggestion

# Modifier preferences
csharp_prefer_static_local_function = true:suggestion
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent

# Code-block preferences
csharp_prefer_braces = true:silent
csharp_prefer_simple_using_statement = true:suggestion

# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent

# Namespace declarations
csharp_style_namespace_declarations = file_scoped:warning

# 'using' directive preferences
csharp_using_directive_placement = outside_namespace:silent

#### C# Formatting Rules ####

# New line preferences
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = false
csharp_new_line_before_members_in_object_initializers = false
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true

roslynator_max_line_length = 160

# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true

# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true

#### Naming styles ####

# Naming rules

dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case

# Symbol specifications

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =

dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =

# Naming styles

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
Loading