Commit Graph
87 Commits
Author SHA1 Message Date
thePR0M3TH3ANandClaude Fable 5 5a7481e30e zaps: reliable coinos platform address + fix NWC double-pay on timeout
Two things:

1. Platform fee address → [email protected] (verified live:
   allowsNostr + nostrPubkey, 1-sat min, working callback). coinos is
   Nostr-native and PUBLISHES zap receipts, unlike strike.me whose flaky LNURL
   + never-published receipts caused the platform-share pay timeouts and the
   missing zap tallies. The 30% platform fee is unchanged — only the rail.

2. Double-pay guard (bug found while diagnosing): on a `pay_invoice` timeout,
   nwcClient's nip44->nip04 encryption-fallback resent the request — but a
   timeout is ambiguous (the wallet may already be paying), so the resend
   could DOUBLE-SPEND. shouldRetryWithFallback now refuses to auto-resend any
   spending method (pay_invoice/pay_keysend/multi_pay_*) on timeout; read-only
   methods and explicit unsupported-encryption rejections (wallet never paid)
   stay retryable. The manual "Send again" retry is the safe path for a real
   payment timeout.

Tests: tests/nwc-pay-timeout-no-double-spend.test.mjs (4). Lint + build green.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 23:54:16 -04:00
thePR0M3TH3ANandClaude Opus 4.8 a3b66f8841 chore(liveness): default CARD_LIVENESS_POLICY to hide-foreign (#5)
Set the default policy to hide-foreign for live feel-testing: foreign/ingested
cards stay hidden until a source verifies (no flash of dead strangers), while
native/own cards keep showing instantly. Revert to "show-pending" if it feels
worse.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-25 09:21:00 -04:00
thePR0M3TH3ANandClaude Opus 4.8 ccbe8d9bb2 feat(liveness): config-driven card visibility policy + probe prefetch (#5)
Makes the card liveness-visibility behavior switchable so it can be A/B
feel-tested, and probes ahead of the scroll for a snappier result.

- CARD_LIVENESS_POLICY (config/instance-config.js): "show-pending" (default,
  unchanged) | "hide-foreign" (foreign/ingested cards hidden until a source
  verifies; native cards stay show-pending) | "hide-all". Owner's own cards are
  always visible. Flip live for testing without a rebuild:
  window.__BITVID_CARD_LIVENESS_POLICY__ = "hide-foreign" then refresh/scroll.
  Implemented via a data-foreign provenance flag on the card +
  getCardLivenessPolicy() in cardSourceVisibility.js.
- LIVENESS_PROBE_PREFETCH_MARGIN (default 600px): both liveness probes were
  already viewport-gated (IntersectionObserver, on-screen-first, WebTorrent
  priority-queued + concurrency-capped); this expands their rootMargin so cards
  just below the fold verify before the user reaches them.
- Tests: three policy scenarios in tests/video-card-source-visibility.test.mjs;
  also un-broke 3 pre-existing VideoCard tests by adding the missing
  IntersectionObserver JSDOM stub.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-25 09:13:52 -04:00
thePR0M3TH3ANandClaude Opus 4.8 96a985ce89 nip71: fix feed hang — surface published_at so ingest skips history fetch
Deep dive into the "nothing loads / Fetching recent videos… hangs" symptom
found the real blocker: it was NOT the moderation/WoT stage (that uses
cached reads and passes unknown authors through clean). It was the feed's
resolve-posted-at stage.

resolveVideoPostedAt() short-circuits when a video has nip71.publishedAt,
otherwise it does a per-video `nostrClient.hydrateVideoHistory()` network
fetch (looking up kind-30078 history). Foreign NIP-71 videos have no such
history, and the ingest adapter wasn't setting nip71.publishedAt — so a
burst of ~32 ingested videos triggered ~32 blocking history fetches that
stalled the render and flooded relays.

Fix: the ingest adapter now surfaces nip71.publishedAt from the NIP-71
published_at tag (falling back to created_at). The feed short-circuits and
never fetches history for ingested videos. Re-enables FEATURE_NIP71_INGEST
by default now that the hang is addressed.

Tests: adapter published_at extraction + created_at fallback;
mutation-verified. 1237/1238 unit (known UploadModal flake).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-22 16:54:41 -04:00
thePR0M3TH3ANandClaude Opus 4.8 639d045e28 nip71: default ingest OFF until feed pipeline can absorb it
Ingest's data path is verified working (subscribe -> fetch -> adapt ->
inject -> survives the whitelist filter), but surfacing a burst of
ingested authors pushes bitvid's moderation/WoT stage to hydrate trust +
report data (kind 30000 / 1984) for many cold authors at once, storming
relays and stalling the feed render ("nothing loads"). The native feed
avoids this only because it trickles authors in gradually.

Flip FEATURE_NIP71_INGEST default to false to restore a stable feed for
launch. All ingest code stays in place behind the admin toggle; re-enable
once moderation/WoT hydration is bounded/non-blocking for an author
influx, or whitelisted authors are treated as pre-trusted (skipping the
WoT fetch). Tracked as the next NIP-71 increment.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-22 16:31:31 -04:00
thePR0M3TH3ANandClaude Opus 4.8 e418e729d6 nip71: add FEATURE_NIP71_INGEST admin toggle (default on)
Foundation for inbound NIP-71 ingest. Adds a single admin switch in the
instance config (config/instance-config.js, default true), re-exported
through config.js and surfaced as a runtime-overridable flag in
constants.js — same pattern as FEATURE_NIP71_MIRROR / ALLOW_NSFW_CONTENT.

A deployer flips one constant to disable all inbound ingest if it ever
causes problems (spam, low-quality content, performance). The ingest
adapter + service (gated on this flag) land in follow-up commits; its
behavioral test will assert the service is inert when the flag is off.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-22 15:00:01 -04:00
google-labs-jules[bot]andPR0M3TH3AN f041719474 chore(docs): content audit 2026-02-19
- Verified /content/docs/guides/upload-content.md against codebase
- Corrected comments in config/instance-config.js regarding moderation thresholds
- Created inventory, verification, and validation artifacts

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-19 19:02:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5ca378bb96 Add ENABLE_NIP17_RELAY_WARNING config to suppress privacy warnings
Added a new configuration variable `ENABLE_NIP17_RELAY_WARNING` to `config/instance-config.js` (defaulting to `false`) to control the display of NIP-17 relay fallback warnings. Updated `js/ui/profileModalController.js` and `js/app.js` to respect this setting.

This change allows instance operators to disable "Privacy warning: direct messages are using your default relays because no NIP-17 relay list is available" and related notifications.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 04:05:36 +00:00
thePR0M3TH3AN 53ac83df2a [ci] remove runtime asset version cache busting 2026-02-10 01:10:19 -05:00
google-labs-jules[bot]andPR0M3TH3AN dd4b0df89b Ensure IS_VERBOSE_DEV_MODE is disabled in production config
- Add explicit security comment to config/instance-config.js
- Add regression test to verify IS_VERBOSE_DEV_MODE is false
- Verify IS_DEV_MODE is false

Note: The configuration file was found to be already set to `false` in the environment. This change enforces the policy.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:23:18 +00:00
google-labs-jules[bot]andPR0M3TH3AN 0592155ebd config: update Tip Jar URL to bitvid.network domain
Replaces the legacy Netlify URL with the new tipjar.bitvid.network address.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-05 18:04:51 +00:00
thePR0M3TH3AN 31b5fc5c16 Harden dev mode defaults 2026-01-30 09:13:54 -05:00
google-labs-jules[bot]andPR0M3TH3AN cfbbf78941 chore(ai): add automated PR review report
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-28 23:49:33 +00:00
thePR0M3TH3AN 596e2f472b Preserve NIP-07 permissions on logout 2026-01-28 14:03:43 -05:00
thePR0M3TH3AN 3e29f2042d update 2026-01-28 09:05:20 -05:00
thePR0M3TH3AN b91b0ccbfa updated social link 2026-01-27 15:42:10 -05:00
thePR0M3TH3AN 178f75c093 update 2026-01-26 11:38:49 -05:00
thePR0M3TH3AN 20241b584e update 2026-01-26 11:36:33 -05:00
google-labs-jules[bot] 7921ab6a2e feat(playback): add configurable timeout for initial playback start
Introduces a race condition between the primary playback source (URL or Torrent) and a configurable timeout. If the primary source fails to reach the 'playing' state within the timeout window, the system automatically falls back to the alternative source.

- Adds `DEFAULT_PLAYBACK_START_TIMEOUT` to instance config (3000ms).
- Updates `PlaybackService` to implement timeout logic using `withTimeout` wrapper.
- Ensures proper cleanup of stalled attempts (resetting video element, destroying torrent client).
2026-01-26 15:55:11 +00:00
google-labs-jules[bot] c22037a575 feat: make default playback source configurable
- Added `DEFAULT_PLAYBACK_SOURCE` to `config/instance-config.js` to allow choosing between "url" (default) and "torrent" priority.
- Updated `js/constants.js` to derive `URL_FIRST_ENABLED` flag from the configuration.
- Refactored `PlaybackService.execute()` in `js/services/playbackService.js` to robustly support "Torrent First" logic with fallback to URL, while maintaining "URL First" with fallback to Torrent.
- Added unit tests in `tests/services/playbackService_order.test.mjs` to verify playback order and fallback mechanics.
2026-01-26 15:13:56 +00: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
thePR0M3TH3AN 0d45133f85 Revert "update"
This reverts commit 54a3d9c73e.
2026-01-19 19:48:24 -05:00
thePR0M3TH3AN f9ed4bd7c9 Revert "update"
This reverts commit 8b6ee8cad5.
2026-01-19 19:47:58 -05:00
thePR0M3TH3AN 8b6ee8cad5 update 2026-01-19 19:45:04 -05:00
thePR0M3TH3AN 54a3d9c73e update 2026-01-19 19:42:19 -05:00
google-labs-jules[bot] ad69548fb7 feat: make lockdown mode title and message configurable
This change introduces `LOCKDOWN_TITLE` and `LOCKDOWN_MESSAGE` constants in `config/instance-config.js` and exposes them via `js/config.js`. It updates `components/lockdown-modal.html` to include IDs for the title and message elements, and modifies `js/index.js` to dynamically populate these elements with the configured text when initializing the lockdown interface. This allows instance operators to customize the maintenance mode appearance.

No new tests were added as this is a configuration and UI text update, but `tests/auth-service.test.mjs` was run to ensure no regressions in auth logic during lockdown.
2026-01-19 21:35:23 +00:00
google-labs-jules[bot] 85883aa5c6 feat: increase default trusted mute hide threshold to 20
- Updated `DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLD` in `config/instance-config.js` from 1 to 20.
- Updated `tests/moderation/trusted-mute-lists.test.mjs` to explicitly override the threshold to 1 for tests verifying the hide mechanism.
- Updated documentation (`docs/moderation/*.md`, `docs/instance-config.md`, `content/community-guidelines.md`) to reflect the new default and upstream examples.
- Verified that existing blurring logic in `js/feedEngine/stages.js` and `js/ui/components/VideoCard.js` handles the intermediate state (1-19 mutes) correctly.
2026-01-11 21:30:23 +00:00
thePR0M3TH3AN 891226697d Simplify watch history pipeline 2026-01-06 18:53:27 -05:00
google-labs-jules[bot] 1b577d3326 Refactor: remove legacy compatibility systems
- Removed `WATCH_HISTORY_LEGACY_KIND` (30078) support from watch history fetch and config.
- Removed `WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS` from config.
- Removed `LEGACY_EVENTS_STORAGE_KEY` (bitvidEvents) migration logic from client.
- Removed `loadLegacyAdminState` and `LEGACY_STORAGE_KEYS` from admin list store.
- Updated tests to remove references to legacy kinds.
2026-01-06 19:48:55 +00:00
google-labs-jules[bot] b3aeb95a0b Fix watch history reliability by migrating to Kind 30003
Migrates watch history persistence from Kind 30078 (Application Data) to Kind 30003 (Bookmark List) to resolve blocking issues on some relays. Updates fetch logic to query both kinds for backward compatibility.
2026-01-06 19:03:03 +00:00
thePR0M3TH3AN b24aac7349 dev mode on 2026-01-05 16:16:38 -05:00
thePR0M3TH3AN a4bd71ef78 update 2025-11-19 10:25:01 -05:00
thePR0M3TH3AN 243b768be7 Add Tip Jar link to sidebar more menu 2025-10-27 18:02:32 -04:00
thePR0M3TH3AN 8e2f21846a Disable verbose dev mode by default 2025-10-27 14:38:22 -04:00
thePR0M3TH3AN 27bafdd3de Add verbose dev mode toggle for COUNT warnings 2025-10-27 14:36:00 -04:00
thePR0M3TH3AN 2b903e0ba6 Merge pull request #886 from PR0M3TH3AN/codex/update-guidance-in-instance-config.js
Document moderator-sourced trust seeding
2025-10-24 23:32:53 -04:00
thePR0M3TH3AN 2d248059e0 Document moderator-sourced trust seeding 2025-10-24 23:32:35 -04:00
thePR0M3TH3AN 1b4252ad16 update 2025-10-24 23:29:08 -04:00
thePR0M3TH3AN 51fe972d6c Source default trust seeds from instance config 2025-10-24 23:06:25 -04:00
thePR0M3TH3AN c3c87b810f update 2025-10-24 22:20:16 -04:00
thePR0M3TH3AN c575f48a81 Align moderation defaults with instance config 2025-10-24 21:36:10 -04:00
thePR0M3TH3AN 004652c545 Add lockdown mode flag to config exports 2025-10-20 15:13:01 -04:00
thePR0M3TH3AN be684b9ef4 update 2025-10-19 16:43:56 -04:00
thePR0M3TH3AN 7065075c8b Make sidebar external links configurable 2025-10-18 15:53:01 -04:00
thePR0M3TH3AN f755349e13 Make sidebar blog and community links configurable 2025-10-18 15:36:59 -04:00
thePR0M3TH3AN 8c568af46a Remove local blog view in favor of configurable external link 2025-10-18 15:28:33 -04:00
thePR0M3TH3AN 6d760d2f34 Reserve more sidebar dropup scroll space 2025-10-17 13:27:44 -04:00
thePR0M3TH3AN 7b1bb420e2 Widen sidebar dropup scroll area 2025-10-17 13:21:18 -04:00
thePR0M3TH3AN 5186b8d499 Enlarge sidebar dropup and eliminate horizontal scroll 2025-10-17 13:06:39 -04:00
thePR0M3TH3AN c633b4d905 Expand sidebar dropup capacity 2025-10-17 13:00:14 -04:00