Commit Graph
1663 Commits
Author SHA1 Message Date
thePR0M3TH3AN dd363f0086 Allow any public URL for storage 2026-01-26 07:01:35 -05:00
thePR0M3TH3AN 49809c2154 Merge pull request #1717 from PR0M3TH3AN/fix-privacy-warning-timeout-863377375539024117
Add timeout to sticky privacy warnings in profile modal
2026-01-26 06:34:15 -05:00
google-labs-jules[bot] 727892c61a fix: add timeout to sticky privacy warnings in profile modal
Updates the privacy warning notifications in `ProfileModalController` to auto-dismiss after 5 seconds. This resolves an issue where warnings about direct message relays and NIP-17 delivery would persist indefinitely, requiring manual dismissal or page reload.

The fix applies `{ autoHideMs: 5000 }` to `this.showStatus` calls for:
- "Privacy warning: direct messages are using your default relays because no NIP-17 relay list is available."
- "Privacy warning: this recipient has not shared NIP-17 relays, so we'll use your default relays."
- "Privacy warning: this message used default relays because no NIP-17 relay list was found."
2026-01-26 11:33:47 +00:00
thePR0M3TH3AN 0c0addb2a1 Merge pull request #1712 from PR0M3TH3AN/ai/schema-validate-20260126-15068520206560681237
chore(ai): event schema validation tool + fixes
2026-01-26 06:22:22 -05:00
google-labs-jules[bot] 3a1ffd3688 chore(ai): event schema validation tool + fixes
- Added `scripts/agent/validate-events.mjs` to validate event builders.
- Added `GENERIC_REPOST` (kind 16) to `js/nostrEventSchemas.js` and `docs/nostr-event-schemas.md`.
- Updated `buildRepostEvent` to validate against `GENERIC_REPOST` when producing kind 16 events.
2026-01-26 05:20:43 +00:00
google-labs-jules[bot] 62dcc57e64 refactor(ai): extract EditModalController from js/app.js (agent) 2026-01-26 03:21:44 +00:00
thePR0M3TH3AN 4e71b1d320 Add R2 CORS failure context logging 2026-01-25 22:00:22 -05:00
thePR0M3TH3AN 69dc281c04 Add debug logs for upload settings presence 2026-01-25 21:57:09 -05:00
thePR0M3TH3AN e1da71b802 Include R2 identifiers in uploads 2026-01-25 21:54:17 -05:00
thePR0M3TH3AN 4373bda877 Remove deprecated quick R2 upload 2026-01-25 21:35:50 -05:00
thePR0M3TH3AN 1e2f6b989a Migrate legacy R2 settings to storage service 2026-01-25 21:33:00 -05:00
thePR0M3TH3AN 4248999294 Guard r2 settings bucket lookup 2026-01-25 21:07:54 -05:00
thePR0M3TH3AN 46161ccea2 Improve R2 CORS error guidance 2026-01-25 21:05:24 -05:00
thePR0M3TH3AN eac1e9a75d Normalize storage connection public URLs 2026-01-25 20:54:15 -05:00
thePR0M3TH3AN e096a8b136 Add R2 public URL to storage tests 2026-01-25 20:44:21 -05:00
thePR0M3TH3AN a923ce57c8 Merge pull request #1699 from PR0M3TH3AN/fix-storage-settings-ui-confusion-1939030476423683554
Clarify Public URL vs S3 Endpoint in Storage Settings
2026-01-25 20:24:39 -05:00
google-labs-jules[bot] ad1d7de092 Clarify Public URL field in storage settings and add validation
- Renamed "Public URL / Prefix" to "Public Access URL" in Profile Modal to differentiate from S3 API Endpoint.
- Added helper text clarifying that Account ID is used for connection and Public URL is for CDN.
- Implemented validation in `ProfileModalController` to detect and warn if an S3/R2 API endpoint is entered into the Public URL field.
- Added blocking validation on save to prevent misconfiguration.
- Verified changes with unit tests and Playwright frontend verification.
2026-01-26 01:24:04 +00:00
thePR0M3TH3AN 6ec83e4237 update 2026-01-25 19:59:24 -05:00
google-labs-jules[bot] 1398d16e57 feat: enhance storage connection test with upload/retrieve/delete verification
- Expose PutObjectCommand and GetObjectCommand in s3-client.js
- Update testS3Connection in r2-s3.js to perform a full Read/Write/Delete cycle when a bucket is provided
- Add clear user-facing logs for each step of the storage test
2026-01-26 00:04:43 +00:00
google-labs-jules[bot] cd94900f02 fix(upload): improve error feedback in UploadModal
- Keep progress bar visible on upload failure
- Style error status text with `text-critical`
- Set generated link inputs to "Upload Failed" to clearly indicate failure
- Reset error state on retry
2026-01-25 23:53:08 +00:00
thePR0M3TH3AN 9c34a730f4 Merge pull request #1694 from PR0M3TH3AN/fix-upload-modal-exit-reset-2907666759560590370
Reset upload state on modal exit
2026-01-25 16:27:35 -05:00
google-labs-jules[bot] d4433fb886 fix(UploadModal): cancel and reset uploads on exit, preserve metadata 2026-01-25 21:24:01 +00:00
thePR0M3TH3AN 0d87efa6ac Merge pull request #1693 from PR0M3TH3AN/feature/truncate-storage-status-4436489322731743170
Truncate Storage Status fields in Upload Modal
2026-01-25 16:22:01 -05:00
google-labs-jules[bot] e1324c1bfc Truncate Storage Status fields in Upload Modal
Truncate Provider, Bucket, and URL Style fields to prevent layout overflow.
Add `title` attribute for native tooltips on hover.
Add `tabindex="0"` for keyboard accessibility.
2026-01-25 21:19:42 +00:00
google-labs-jules[bot] de03cd4c58 fix(storage): ensure R2 public URL is saved to connection metadata
When saving an R2 storage connection, the "Prefix" input (which holds the Public Bucket URL) was not being mapped to `meta.baseDomain` or `meta.publicBaseUrl`. This caused `R2Service.ensureBucketConfigForNpub` to throw "Public Bucket URL is missing" during upload preparation, as it relies on these properties.

This commit updates `ProfileModalController.handleSaveStorage` to correctly assign the prefix value to `baseDomain` and `publicBaseUrl` for the `cloudflare_r2` provider, aligning it with the behavior for generic S3 providers and resolving the upload error.
2026-01-25 21:14:05 +00:00
google-labs-jules[bot] 070c054043 Refactor upload flow for immediate uploads and fix logging crash
- Refactored `UploadModal.js` to trigger uploads immediately on file selection.
- Added progress bars and result fields (Video URL, Magnet, Torrent) to the UI.
- Fixed a crash in `r2Service.js` caused by `userLogger.debug` usage.
- Exposed `prepareUpload` and `uploadFile` methods in `r2Service` and `s3UploadService` for granular control.
- Updated `upload-modal.html` with new UI elements.
2026-01-25 20:53:16 +00:00
google-labs-jules[bot] 55d00900a0 Fix R2 upload failures by ensuring baseDomain is saved and used correctly. 2026-01-25 19:41:26 +00:00
google-labs-jules[bot] 2062ba0889 Refactor Upload Modal to use read-only storage status
Simplified the Upload Modal by removing inline storage configuration forms.
The modal now displays the active storage provider (read-only) or prompts the user
to configure storage via the Profile Modal if missing.

Changes:
- Refactored `js/ui/components/UploadModal.js` to consume stored credentials directly.
- Updated `components/upload-modal.html` to remove complex forms.
- Updated `tests/ui/uploadModal-integration.test.mjs` to match new UI structure.
- Removed race-prone logic for saving credentials within the upload flow.
2026-01-25 19:20:08 +00:00
thePR0M3TH3AN b6260c1352 Merge pull request #1686 from PR0M3TH3AN/fix-storage-isolation-7292502268303926887
Fix storage credentials persistence on profile switch
2026-01-25 13:35:24 -05:00
google-labs-jules[bot] a718c65173 fix(ai): frontend console error — missing css & concurrent reqs (agent) 2026-01-25 18:33:19 +00:00
google-labs-jules[bot] 94cafc26ab Fix storage credentials persistence on profile switch
This change ensures that cloud storage credentials are not leaked between Nostr profiles when switching accounts in the UI.

Changes:
- Imported `storageService` in `js/app.js` to enable the `bitvid:auth-changed` event listener to correctly lock the previous profile's storage session.
- Updated `ProfileModalController.populateStoragePane` to explicitly clear the storage form before loading new data.
- Enhanced `ProfileModalController.handleClearStorage` to fully reset the form state, including the provider selection and visibility toggles.

Verified with a reproduction script (`reproduce_storage_isolation.mjs`) that `StorageService` correctly isolates data by pubkey at the backend level. The UI fixes address the frontend persistence issue.
2026-01-25 18:32:46 +00:00
thePR0M3TH3AN 399f57a9a9 Merge pull request #1685 from PR0M3TH3AN/fix-storage-unlock-profile-switch-5219038763657167414
Fix storage unlock failure when switching profiles
2026-01-25 13:09:58 -05:00
google-labs-jules[bot] d50110f685 fix(storage): validate signer identity before unlocking storage
Prevents storage unlock failures and security risks when switching profiles by verifying that the active signer's public key matches the target profile. This ensures users are prompted to switch accounts in their NIP-07 extension if a mismatch occurs.

Fixes an issue where switching profiles caused the storage tab to break due to using the wrong decryption key.
2026-01-25 18:09:28 +00:00
thePR0M3TH3AN 9582c3e61f Merge pull request #1682 from PR0M3TH3AN/fix-storage-default-connections-7359024264233326996
Fix multiple default storage connections issue
2026-01-25 12:59:45 -05:00
google-labs-jules[bot] 31751579a3 Fix: prevent thumbnail cache from being cleared on empty video lists
This commit addresses an issue where thumbnail images would "drop" (disappear/flicker) upon login or re-initialization of the video list.

Changes:
- Modified `js/ui/views/VideoListView.js` to add a guard clause in `cleanupThumbnailCache`.
- The function now returns early if the provided `videos` list is empty, preserving the existing `loadedThumbnails` cache during transient loading states.

Verification:
- Created a reproduction script (`reproduce_issue.mjs`) that confirmed the cache was being cleared on empty input.
- Verified the fix with the same script, ensuring the cache is preserved.
- Verified no regression in `npm run lint:hex` and `npm run lint:inline-styles`.
2026-01-25 17:44:21 +00: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
google-labs-jules[bot] ecef84f2d8 fix: increase NIP-07 extension timeout to 5000ms
Increases the default wait time for NIP-07 extension injection from 1.5s to 5s.
This resolves timeout errors for users on slower connections or devices where
the extension takes longer to inject `window.nostr`.

Verified with a reproduction script that simulates delayed injection.
2026-01-25 17:04:28 +00:00
google-labs-jules[bot] b980f3a9ba Fix NIP-07 login by waiting for extension injection
Implemented `waitForNip07Extension` polling in `js/nostr/client.js` to address race conditions where `window.nostr` is not immediately available.
Updated `js/nostr/nip07Permissions.js` with the polling logic and added unit tests.
2026-01-25 16:34:07 +00:00
thePR0M3TH3AN c99a00993a Merge pull request #1676 from PR0M3TH3AN/ai/doc-nostr-client-20250212-10623091702389088402
chore(ai): document js/nostr/client.js
2026-01-25 10:51:46 -05:00
thePR0M3TH3AN 3a599e3ad5 Merge pull request #1670 from PR0M3TH3AN/ai/onboarding-20231026-1317313232699865149
docs(ai): improve onboarding steps
2026-01-25 10:47:23 -05:00
google-labs-jules[bot] c026a8cc45 chore(ai): doc js/nostr/client.js (agent) 2026-01-25 15:43:39 +00:00
thePR0M3TH3AN 06550ef007 Merge pull request #1667 from PR0M3TH3AN/ai/schema-validate-20231026-12531232348450891371
chore(ai): event schema validation tool + fixes
2026-01-25 10:42:14 -05:00
google-labs-jules[bot] 93b3434145 docs(ai): improve onboarding steps (agent)
- Audit onboarding process (`npm ci`, build, lint).
- Fix hex color lint failures by updating `scripts/check-hex.js` ignore list.
- Fix inline style lint failures by updating `scripts/check-inline-styles.mjs` allowlist.
- Fix raw tailwind colors in `js/ui/components/EmbedPlayerModal.js` by using semantic tokens.
- Add `ai/onboarding-report.md` detailing the audit.
2026-01-25 08:25:42 +00:00
google-labs-jules[bot] 5790b6e7c1 chore(ai): event schema validation tool + fixes
- Created `scripts/agent/validate-events.mjs` to validate all event builders.
- Fixed `buildViewEvent` to generate a fallback `d` tag for kind 30079 compliance.
- Relaxed `REPOST` schema validation to allow empty content (blind reposts), per NIP-18.
- Updated `docs/nostr-event-schemas.md` to reflect schema changes.
2026-01-25 05:29:32 +00:00
google-labs-jules[bot] 4c93080baa refactor(ai): extract ShareNostrController from js/app.js (agent) 2026-01-25 03:34:10 +00:00
thePR0M3TH3AN 7f38c4597b Merge pull request #1664 from PR0M3TH3AN/feature/s3-manifest-upload-v2-12799695231766651880
Support S3 Presigned Multipart Manifest Upload
2026-01-24 21:45:28 -05:00
google-labs-jules[bot] a33092fc47 feat(upload): support presigned multipart manifest for S3 uploads
- Updated `js/s3-quick.js` to support new manifest structure: `{ bucket, key, uploadId, parts: [{partNumber, url}] }`.
- Added logic to sort parts, upload chunks, collect ETags, and call `completeUrl` if present.
- Updated `js/ui/components/UploadModal.js` to handle manifest flow, validate new structure, and alert user if completion is manual (missing `completeUrl`).
- Updated `components/upload-modal.html` with new placeholder example and documentation note.
- Verified logic with reproduction script and UI with Playwright.
2026-01-25 02:44:49 +00:00
google-labs-jules[bot] ee0af68bfd fix: prevent SecurityError in pushState when playing video on local origin
When running the application locally (e.g., `127.0.0.1:5500`) but using a production configuration (`BITVID_WEBSITE_URL` pointing to `bitvid.network`), `playVideoByEventId` would attempt to `pushState` with the production URL. This triggers a browser `SecurityError` due to the origin mismatch, preventing the video modal from opening.

This change adds a check to normalize the `pushUrl`. If the target URL's origin differs from the current window's origin, it falls back to a relative path using `window.location.pathname` combined with the target's search parameters and hash. This ensures `pushState` always receives a safe, same-origin URL regardless of the environment configuration.
2026-01-25 02:33:30 +00:00
thePR0M3TH3AN feef662bf8 Merge pull request #1661 from PR0M3TH3AN/feat/s3-quick-upload-4202021437560592801
Add S3 quick upload with presigned manifest support
2026-01-24 20:42:50 -05:00
google-labs-jules[bot] adad6a07a4 feat: Add S3 quick upload with presigned manifest support
- Add `js/s3-quick.js` with `uploadWithManifest` and `uploadWithKeys`.
- Update `components/upload-modal.html` to add "Use presigned manifest" toggle and warning.
- Update `js/ui/components/UploadModal.js` to wire up the manifest upload flow.
- Add local persistence for quick S3 settings (though mainly handled by existing storage settings).
- Ensure keys are only used for client-side uploads or replaced by manifest flow.
2026-01-25 01:38:41 +00:00