Commit Graph
12 Commits
Author SHA1 Message Date
thePR0M3TH3ANandClaude Opus 4.8 6f7f419636 feat(sync): storage-credential sync data layer (push/pull/clear)
Wires the encrypted-sync core (0abb82b9) to the live client + active signer and
adds the storage-credential sync service. No UI yet — the Storage pane toggle is
the next increment.

- js/nostr/encryptedSyncFacade.js: default encryptedSync instance bound to
  nostrClient (write set via getDeletePublishRelays, read relays, pool) and the
  active signer's signEvent. Keeps the core pure/testable.
- js/services/storageService.js: exportAccountRecord / importAccountRecord — get
  the on-disk account record and restore it on another device. Import REPLACES
  the local record (same-pubkey envelope unlocks with the same signer); cross-
  device merge is a follow-up.
- js/services/storageSyncService.js: enable/disable/push/pull under d-tag
  "bitvid:storage-connections", with a per-pubkey opt-in flag (off by default).
  enable() pushes immediately; disable() wipes the published note.

tests/storage-sync-service.test.mjs: enable-pushes-exported-record, pull-restores
on a fresh device, disable-clears, empty-record-doesn't-publish. Mutation-verified
(skip-import and skip-clear both fail).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 17:01:54 -04:00
thePR0M3TH3AN 44dfcc363b Improve storage unlock permission and decrypt error handling 2026-02-08 14:38:21 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1954739624 Fix NIP-07 decryption fallback and storage unlock issues
- Updated `StorageService` to check `signer.capabilities` before calling encryption methods, ensuring graceful fallback from NIP-44 to NIP-04.
- Updated `UserBlockList` to check `signer.capabilities` before registering decryptors, preventing "Decryption timed out" errors caused by queueing unsupported method calls.
- Fixed flakiness in `tests/user-blocks.test.mjs` by adding delays to allow background promises to settle between tests.
- Verified changes with reproduction test case and existing test suite.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 19:59:24 +00:00
thePR0M3TH3AN 1e2f6b989a Migrate legacy R2 settings to storage service 2026-01-25 21:33:00 -05:00
thePR0M3TH3AN eac1e9a75d Normalize storage connection public URLs 2026-01-25 20:54:15 -05:00
thePR0M3TH3AN 6ec83e4237 update 2026-01-25 19:59:24 -05:00
google-labs-jules[bot] ea026552ce Fix: Enforce single default storage connection
Previously, `StorageService.saveConnection` allowed multiple connections to be marked as `defaultForUploads: true` because it did not unset the flag on existing connections. This caused `loadFromStorage` (which uses `find`) to potentially pick up an old, invalid connection instead of the newly configured one, leading to a loop where the user is asked to configure credentials again.

This change modifies `saveConnection` to iterate through existing connections and unset `defaultForUploads` if the new connection is being saved as the default. This ensures the "default" invariant is maintained.

Added a unit test case to verify this behavior.
2026-01-25 17:40:16 +00:00
thePR0M3TH3AN 9412afb1af Add generic S3 client loader and update tests 2026-01-23 18:49:34 -05:00
google-labs-jules[bot] 40f60ec837 Docs: Add comments to StorageService
Added detailed in-code documentation to `js/services/storageService.js` to explain the `STORE_ACCOUNTS` schema, encryption strategy (NIP-44/NIP-04 fallback), and concurrency handling.
2026-01-16 05:05:24 +00:00
google-labs-jules[bot] 35d3b0de73 Implement storage connection testing
Added `testConnection` to `StorageService` and `testS3Connection` to `r2-s3.js`.
Updated `ProfileModalController` to use the new `storageService.testAccess` method for verifying credentials before saving.
The test logic supports both specific bucket checks (via `HeadBucket`) and general credential checks (via `ListBuckets`).
2026-01-16 03:50:13 +00:00
google-labs-jules[bot] cf9d1c08be Refactor UploadModal to use StorageService for secure R2 credentials 2026-01-16 02:35:00 +00:00
google-labs-jules[bot] 1c2f934616 feat: implement StorageService with encrypted IndexedDB storage
- Adds `js/services/storageService.js` to manage encrypted connection credentials.
- Implements AES-GCM encryption for payloads using a random Master Key.
- Implements NIP-04/NIP-44 encryption for the Master Key using the user's Nostr signer.
- Provides public API for saving, retrieving, and listing connections.
- Persists data to `bitvid-storage` IndexedDB.
2026-01-16 01:14:58 +00:00