diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..4e54da4 --- /dev/null +++ b/TODO.md @@ -0,0 +1,44 @@ +# Status + +pre-1.0 + +# Next Step + +Implement the download retry policy from the README TODO: no retry on 4xx, +exponential backoff on 5xx and network errors. Apply it to file and +thumbnail downloads, cover it with mock-server tests, and update the +README TODO checkbox. + +# Completed Steps + +- 2026-06-10: Decrypted collections shared by other users (sealed-box + keys); listCollections drops deleted-collection tombstones. +- 2026-06-10: Login hardening: dual-2FA empty-string fields handled, TOTP + preferred when a passkey is also enrolled, interactive input via + @inquirer/prompts. +- 2026-06-10: Replaced sharp with pure JS (jpeg-js + exif-reader); added + single-binary bun build and make install. +- 2026-06-09: Added backup-metadata command (ML data always included, + --exif opt-in); rewrote README to match the implementation; added + thumbnail helper tests. +- 2026-05-13: Full CLI surface: login, backup with dedup symlink layout, + collections, files, get, get-thumb, thumbnail repair helpers. +- 2026-05-13: Client OO API with literate usage tests; file download and + decryption; all three metadata layers decrypted and persisted; renamed + quack to quak. +- 2026-05-11: SRP login flow (email OTP + TOTP) and ApiClient. + +# Future Steps + +- Retry policy: no retry on 4xx, exponential backoff on 5xx and network + errors (the Next Step). +- Update the README API reference section to match the current + implementation. +- Make `make docker` green. +- Tag v1.0.0. +- Future desktop client, separate repo: + - Electron app skeleton consuming this library. + - Local SQLite cache keyed on (collectionID, fileID, updationTime). + - Background sync worker streaming new files into the cache. + - Gallery UI: thumbnails, full-image view, basic search. + - Upload, delete, and share operations in the library.