From c6e7a64e7342601ac1160017467109eec069990a Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:21:48 -0500 Subject: [PATCH] example --- .../.devcontainer/devcontainer.json | 17 + bitvid-working-webtorrent/.dockerignore | 7 + bitvid-working-webtorrent/.gitattributes | 2 + .../.github/workflows/agent-pr-review.yml | 52 + .../.github/workflows/ci.yml | 247 + .../.github/workflows/cleanup-stuck-runs.yml | 72 + .../workflows/daily-design-system-audit.yml | 75 + bitvid-working-webtorrent/.gitignore | 12 + .../.vscode/settings.json | 3 + bitvid-working-webtorrent/AGENTS.md | 202 + bitvid-working-webtorrent/CHANGELOG.md | 11 + bitvid-working-webtorrent/CONTRIBUTING.md | 176 + bitvid-working-webtorrent/Dockerfile | 18 + bitvid-working-webtorrent/KNOWN_ISSUES.md | 34 + bitvid-working-webtorrent/LICENSE | 693 + bitvid-working-webtorrent/LINT_ISSUES.md | 20 + bitvid-working-webtorrent/PR_REVIEWS.md | 55 + bitvid-working-webtorrent/README.md | 539 + .../REMEDIATION_REPORT.md | 32 + bitvid-working-webtorrent/TRADEMARKS.md | 21 + bitvid-working-webtorrent/_headers | 2 + bitvid-working-webtorrent/_redirects | 1 + .../ai/onboarding-report.md | 50 + bitvid-working-webtorrent/assets/favicon.ico | Bin 0 -> 15406 bytes .../assets/gif/please-stand-by.gif | Bin 0 -> 1941152 bytes .../assets/jpg/bitvid.jpg | Bin 0 -> 95452 bytes .../assets/jpg/bitvid_Simplified-Chinese.png | Bin 0 -> 57681 bytes .../assets/jpg/default-profile.jpg | Bin 0 -> 163867 bytes .../assets/jpg/video-thumbnail-fallback.jpg | Bin 0 -> 95452 bytes .../assets/png/android-chrome-192x192.png | Bin 0 -> 9326 bytes .../assets/png/android-chrome-512x512.png | Bin 0 -> 37857 bytes .../assets/png/apple-touch-icon.png | Bin 0 -> 8295 bytes .../assets/png/bitvid-banner.png | Bin 0 -> 12836 bytes .../assets/png/favicon-16x16.png | Bin 0 -> 586 bytes .../assets/png/favicon-32x32.png | Bin 0 -> 1150 bytes .../assets/svg/about-icon.svg | 5 + .../assets/svg/beacon-icon.svg | 7 + .../assets/svg/beta-icon.svg | 7 + .../assets/svg/bitvid-logo-dark-mode.svg | 21 + .../assets/svg/bitvid-logo-light-mode.svg | 21 + .../assets/svg/blog-icon.svg | 5 + .../assets/svg/copy-magnet.svg | 1 + .../assets/svg/default-profile.svg | 5 + .../assets/svg/dns-icon.svg | 5 + .../assets/svg/ellipsis.svg | 11 + .../assets/svg/explore-icon.svg | 5 + .../assets/svg/feed-icon.svg | 11 + .../assets/svg/filter.svg | 3 + .../assets/svg/for-you-feed-icon.svg | 9 + .../assets/svg/getting-started-icon.svg | 5 + .../assets/svg/github-icon.svg | 5 + .../assets/svg/globe-icon.svg | 6 + .../assets/svg/guidelines-icon.svg | 5 + .../assets/svg/history-icon.svg | 22 + .../assets/svg/home-icon.svg | 5 + .../assets/svg/hot-icon.svg | 16 + .../assets/svg/lightning-bolt.svg | 13 + .../assets/svg/links-icon.svg | 5 + .../assets/svg/mobile-sidebar-menu-icon.svg | 5 + .../assets/svg/nostr-icon.svg | 12 + .../assets/svg/roadmap-icon.svg | 5 + .../assets/svg/search.svg | 3 + .../assets/svg/share-video.svg | 1 + .../assets/svg/subscribe-button-icon.svg | 5 + .../assets/svg/subscriptions-icon.svg | 5 + .../assets/svg/upload-content-icon.svg | 1 + .../assets/svg/video-settings-gear.svg | 5 + .../bitvid_logo/beacon-icon.svg | 5 + .../bitvid_logo/bitvid-01.png | Bin 0 -> 10109 bytes .../bitvid_logo/bitvid-01.svg | 21 + .../bitvid_logo/bitvid-02.png | Bin 0 -> 9578 bytes .../bitvid_logo/bitvid-02.svg | 21 + .../bitvid_logo/bitvid-03.png | Bin 0 -> 10163 bytes .../bitvid_logo/bitvid-03.svg | 21 + .../bitvid_logo/bitvid-04.png | Bin 0 -> 9737 bytes .../bitvid_logo/bitvid-04.svg | 21 + .../bitvid_logo/bitvid-05.png | Bin 0 -> 2304 bytes .../bitvid_logo/bitvid-05.svg | 13 + .../bitvid_logo/bitvid-06.png | Bin 0 -> 2337 bytes .../bitvid_logo/bitvid-06.svg | 13 + .../bitvid_logo/bitvid-07.png | Bin 0 -> 2302 bytes .../bitvid_logo/bitvid-07.svg | 13 + .../bitvid_logo/bitvid-08.png | Bin 0 -> 8369 bytes .../bitvid_logo/bitvid-08.svg | 10 + .../bitvid_logo/bitvid-09.png | Bin 0 -> 8343 bytes .../bitvid_logo/bitvid-09.svg | 10 + .../bitvid_logo/bitvid-10.png | Bin 0 -> 8016 bytes .../bitvid_logo/bitvid-10.svg | 10 + .../bitvid_logo/bitvid-11.png | Bin 0 -> 5117 bytes .../bitvid_logo/bitvid-11.svg | 14 + .../bitvid_logo/bitvid-12.png | Bin 0 -> 5038 bytes .../bitvid_logo/bitvid-12.svg | 14 + .../bitvid_logo/bitvid-13.png | Bin 0 -> 5077 bytes .../bitvid_logo/bitvid-13.svg | 14 + .../bitvid_logo/bitvid-14.png | Bin 0 -> 5019 bytes .../bitvid_logo/bitvid-14.svg | 14 + .../bitvid_logo/bitvid-15.png | Bin 0 -> 5037 bytes .../bitvid_logo/bitvid-15.svg | 14 + .../bitvid_logo/bitvid-16.png | Bin 0 -> 5007 bytes .../bitvid_logo/bitvid-16.svg | 14 + .../bitvid_logo/bitvid.afdesign | Bin 0 -> 29823 bytes .../bitvid_logo/bitvid.ai | 2006 +++ .../bitvid_logo/bitvid.jpg | Bin 0 -> 95452 bytes .../bitvid_logo/bitvid_favicon.afdesign | Bin 0 -> 29925 bytes .../bitvid_logo/bitvid_favicon.png | Bin 0 -> 5967 bytes .../bitvid_logo/dns-icon.svg | 3 + .../bitvid_logo/guidelines-icon.svg | 3 + .../bitvid_logo/home-icon.svg | 3 + .../bitvid_logo/ipns-icon.svg | 3 + .../components/application-form.html | 56 + .../components/bug-fix-form.html | 58 + .../components/content-appeals-form.html | 55 + .../components/delete-video-modal.html | 71 + .../components/disclaimer.html | 138 + .../components/edit-video-modal.html | 963 ++ .../components/embed-video-modal.html | 125 + .../components/feature-request-form.html | 55 + .../components/general-feedback-form.html | 59 + .../iframe_forms/iframe-application-form.html | 489 + .../iframe_forms/iframe-bug-fix-form.html | 469 + .../iframe-content-appeals-form.html | 385 + .../iframe_forms/iframe-feedback-form.html | 368 + .../iframe_forms/iframe-request-form.html | 411 + .../components/iframe_forms/theme-sync.js | 253 + .../components/lockdown-modal.html | 80 + .../components/login-modal.html | 420 + .../components/profile-modal.html | 1543 ++ .../components/revert-video-modal.html | 209 + .../components/search-filter-modal.html | 174 + .../components/share-nostr-modal.html | 127 + .../components/sidebar.html | 311 + .../components/upload-modal.html | 400 + .../components/video-modal.html | 685 + .../config/asset-version.js | 1 + .../config/instance-config.js | 448 + .../config/validate-config.js | 184 + .../content/docs/about.md | 20 + .../docs/community/community-guidelines.md | 106 + .../content/docs/community/index.md | 8 + .../content/docs/community/links.md | 131 + .../content/docs/getting-started.md | 47 + .../content/docs/guides/index.md | 7 + .../content/docs/guides/upload-content.md | 70 + .../content/docs/overview.md | 13 + .../content/docs/roadmap.md | 59 + .../content/docs/toc.json | 64 + ...d_Enhanced_Migration_of_Note_Spec_Logic.md | 268 + ...eo_&_Audio_Note_Specification_Version 3.md | 296 + ...ced_Profile_Channel_Views_Specification.md | 149 + ..._Subscription_&_Reporting_Specification.md | 287 + ...nced_Video_Comment_System_Specification.md | 269 + ...View_Rating_&_Retention_Penalty_Scoring.md | 394 + ...ome_Page_&_Video_Tracking_Specification.md | 245 + ...anced_NIP-35_+_WebRTC_Check_Integration.md | 205 + bitvid-working-webtorrent/css/docs.css | 76 + .../css/tailwind.source.css | 6096 +++++++ bitvid-working-webtorrent/css/tokens.css | 864 + bitvid-working-webtorrent/debug_sidebar.mjs | 20 + .../docs/auth-architecture.md | 138 + .../docs/beacon/css-mapping.md | 43 + .../docs/bitvid-app-audit.md | 25 + .../docs/cancelling-ci-runs.md | 53 + .../docs/comment-threading.md | 116 + .../docs/deployment-notes.md | 7 + .../docs/design-system.md | 493 + .../docs/dm-privacy-model.md | 70 + bitvid-working-webtorrent/docs/embed-notes.md | 48 + bitvid-working-webtorrent/docs/feed-engine.md | 146 + .../docs/feeds/kids-feed.md | 84 + .../docs/instance-config.md | 242 + .../docs/kitchen-sink.html | 769 + bitvid-working-webtorrent/docs/logging.md | 68 + .../docs/manual-qa-2024-05-10.md | 29 + bitvid-working-webtorrent/docs/menus.md | 174 + .../docs/moderation/README.md | 99 + .../docs/moderation/action-flow.md | 55 + .../docs/moderation/fixtures/index.html | 717 + .../docs/moderation/nips.md | 22 + .../docs/moderation/relays.md | 25 + .../docs/moderation/testing.md | 91 + .../docs/moderation/web-of-trust-examples.md | 118 + .../docs/moderation/web-of-trust.md | 105 + .../docs/nip46-client-overview.md | 89 + .../docs/nip46-remote-signers.md | 114 + .../docs/nip46-roadmap.md | 52 + bitvid-working-webtorrent/docs/nips/01.md | 178 + bitvid-working-webtorrent/docs/nips/02.md | 78 + bitvid-working-webtorrent/docs/nips/03.md | 34 + bitvid-working-webtorrent/docs/nips/04.md | 55 + bitvid-working-webtorrent/docs/nips/05.md | 103 + bitvid-working-webtorrent/docs/nips/06.md | 31 + bitvid-working-webtorrent/docs/nips/07.md | 32 + bitvid-working-webtorrent/docs/nips/08.md | 21 + bitvid-working-webtorrent/docs/nips/09.md | 53 + bitvid-working-webtorrent/docs/nips/10.md | 84 + bitvid-working-webtorrent/docs/nips/11.md | 367 + bitvid-working-webtorrent/docs/nips/12.md | 9 + bitvid-working-webtorrent/docs/nips/13.md | 102 + bitvid-working-webtorrent/docs/nips/14.md | 21 + bitvid-working-webtorrent/docs/nips/15.md | 339 + bitvid-working-webtorrent/docs/nips/16.md | 9 + bitvid-working-webtorrent/docs/nips/17.md | 211 + bitvid-working-webtorrent/docs/nips/18.md | 40 + bitvid-working-webtorrent/docs/nips/19.md | 69 + bitvid-working-webtorrent/docs/nips/20.md | 9 + bitvid-working-webtorrent/docs/nips/21.md | 38 + bitvid-working-webtorrent/docs/nips/22.md | 200 + bitvid-working-webtorrent/docs/nips/23.md | 66 + bitvid-working-webtorrent/docs/nips/24.md | 43 + bitvid-working-webtorrent/docs/nips/25.md | 100 + bitvid-working-webtorrent/docs/nips/26.md | 112 + bitvid-working-webtorrent/docs/nips/27.md | 54 + bitvid-working-webtorrent/docs/nips/28.md | 160 + bitvid-working-webtorrent/docs/nips/29.md | 244 + bitvid-working-webtorrent/docs/nips/30.md | 72 + bitvid-working-webtorrent/docs/nips/31.md | 15 + bitvid-working-webtorrent/docs/nips/32.md | 176 + bitvid-working-webtorrent/docs/nips/33.md | 9 + bitvid-working-webtorrent/docs/nips/34.md | 248 + bitvid-working-webtorrent/docs/nips/35.md | 70 + bitvid-working-webtorrent/docs/nips/36.md | 41 + bitvid-working-webtorrent/docs/nips/37.md | 57 + bitvid-working-webtorrent/docs/nips/38.md | 63 + bitvid-working-webtorrent/docs/nips/39.md | 67 + bitvid-working-webtorrent/docs/nips/40.md | 59 + bitvid-working-webtorrent/docs/nips/42.md | 109 + bitvid-working-webtorrent/docs/nips/44.md | 297 + bitvid-working-webtorrent/docs/nips/45.md | 60 + bitvid-working-webtorrent/docs/nips/46.md | 226 + bitvid-working-webtorrent/docs/nips/47.md | 687 + bitvid-working-webtorrent/docs/nips/48.md | 60 + bitvid-working-webtorrent/docs/nips/49.md | 126 + bitvid-working-webtorrent/docs/nips/50.md | 55 + bitvid-working-webtorrent/docs/nips/51.md | 170 + bitvid-working-webtorrent/docs/nips/52.md | 216 + bitvid-working-webtorrent/docs/nips/53.md | 267 + bitvid-working-webtorrent/docs/nips/54.md | 117 + bitvid-working-webtorrent/docs/nips/55.md | 586 + bitvid-working-webtorrent/docs/nips/56.md | 108 + bitvid-working-webtorrent/docs/nips/57.md | 191 + bitvid-working-webtorrent/docs/nips/58.md | 123 + bitvid-working-webtorrent/docs/nips/59.md | 255 + bitvid-working-webtorrent/docs/nips/60.md | 186 + bitvid-working-webtorrent/docs/nips/61.md | 122 + bitvid-working-webtorrent/docs/nips/62.md | 61 + bitvid-working-webtorrent/docs/nips/64.md | 146 + bitvid-working-webtorrent/docs/nips/65.md | 43 + bitvid-working-webtorrent/docs/nips/66.md | 97 + bitvid-working-webtorrent/docs/nips/68.md | 92 + bitvid-working-webtorrent/docs/nips/69.md | 89 + bitvid-working-webtorrent/docs/nips/70.md | 45 + bitvid-working-webtorrent/docs/nips/71.md | 137 + bitvid-working-webtorrent/docs/nips/72.md | 132 + bitvid-working-webtorrent/docs/nips/73.md | 128 + bitvid-working-webtorrent/docs/nips/75.md | 85 + bitvid-working-webtorrent/docs/nips/77.md | 175 + bitvid-working-webtorrent/docs/nips/78.md | 21 + bitvid-working-webtorrent/docs/nips/7D.md | 33 + bitvid-working-webtorrent/docs/nips/84.md | 51 + bitvid-working-webtorrent/docs/nips/86.md | 90 + bitvid-working-webtorrent/docs/nips/87.md | 142 + bitvid-working-webtorrent/docs/nips/88.md | 132 + bitvid-working-webtorrent/docs/nips/89.md | 133 + bitvid-working-webtorrent/docs/nips/90.md | 230 + bitvid-working-webtorrent/docs/nips/92.md | 45 + bitvid-working-webtorrent/docs/nips/94.md | 58 + bitvid-working-webtorrent/docs/nips/96.md | 338 + bitvid-working-webtorrent/docs/nips/98.md | 63 + bitvid-working-webtorrent/docs/nips/99.md | 86 + bitvid-working-webtorrent/docs/nips/A0.md | 60 + bitvid-working-webtorrent/docs/nips/B0.md | 53 + bitvid-working-webtorrent/docs/nips/B7.md | 41 + bitvid-working-webtorrent/docs/nips/C0.md | 69 + bitvid-working-webtorrent/docs/nips/C7.md | 29 + bitvid-working-webtorrent/docs/nips/EE.md | 288 + bitvid-working-webtorrent/docs/nips/README.md | 423 + .../docs/nostr-analytics.md | 41 + bitvid-working-webtorrent/docs/nostr-auth.md | 64 + .../docs/nostr-client-overview.md | 92 + .../docs/nostr-event-schemas.md | 351 + .../docs/nwc-compliance.md | 58 + .../docs/onboarding-audit-2025-01-27.md | 28 + .../docs/onboarding-audit-20260128.md | 61 + .../docs/per-profile-cache.md | 108 + .../docs/playback-fallback.md | 94 + .../docs/popover-scenarios.html | 271 + bitvid-working-webtorrent/docs/qa.md | 53 + .../docs/relay-trust-bootstrap.md | 62 + .../docs/release-notes.md | 12 + .../docs/signing-adapter.md | 82 + bitvid-working-webtorrent/docs/storage-r2.md | 98 + .../docs/storage-tab-design.md | 126 + .../docs/video-availability-checks.md | 86 + .../docs/video-grid-filtering.md | 84 + .../docs/watch-history-logging.md | 65 + .../docs/watch-history-system.md | 95 + bitvid-working-webtorrent/embed.html | 220 + .../reproducers/001-popover-404/repro.spec.ts | 16 + .../002-sidebar-layout/repro.spec.ts | 26 + .../003-video-modal-reg/repro.spec.ts | 25 + .../README.md | 23 + .../reproduce_issue.js | 45 + .../2-repost-comment-visibility-bug/README.md | 29 + .../reproduce_issue.js | 73 + .../3-similar-content-logic-bug/README.md | 32 + .../reproduce_issue.js | 241 + .../examples/reproducers/README.md | 23 + .../crash-buildAdminListEvent-hexPubkeys.json | 10 + ...-schemas-buildAdminListEvent-848e5ba6.json | 6 + ...-schemas-buildAdminListEvent-b1eed32e.json | 6 + ...-schemas-buildAdminListEvent-ead98a99.json | 6 + ...d-crash-nostrEventSchemas-pointerTags.json | 11 + .../issue-001-video-card-logic/README.md | 11 + .../issue-001-video-card-logic/repro.mjs | 199 + .../issue-002-login-modal-nsec/README.md | 12 + .../issue-002-login-modal-nsec/repro.spec.ts | 131 + .../issue-003-popover-ref-error/README.md | 12 + .../issue-003-popover-ref-error/repro.spec.ts | 95 + .../issue-1-moderation-ui/README.md | 17 + .../playwright.config.ts | 13 + .../issue-1-moderation-ui/repro.spec.ts | 39 + .../issue-1769184336556-zi9tj5l6/README.md | 13 + .../issue-1769184336556-zi9tj5l6/repro.mjs | 17 + .../issue-1769184336558-dkgdojxe/README.md | 12 + .../issue-1769184336558-dkgdojxe/repro.mjs | 17 + .../issue-1769184336717-vkjo0p01/README.md | 13 + .../issue-1769184336717-vkjo0p01/repro.mjs | 17 + .../issue-1769184336720-gw7etqt5/README.md | 12 + .../issue-1769184336720-gw7etqt5/repro.mjs | 17 + .../issue-1769184336734-6hvf78rb/README.md | 13 + .../issue-1769184336734-6hvf78rb/repro.mjs | 17 + .../issue-1769184336735-ylfpm4ul/README.md | 12 + .../issue-1769184336735-ylfpm4ul/repro.mjs | 17 + .../issue-1769184336740-2j4kylui/README.md | 13 + .../issue-1769184336740-2j4kylui/repro.mjs | 17 + .../issue-1769184336741-uvul9skf/README.md | 12 + .../issue-1769184336741-uvul9skf/repro.mjs | 17 + .../issue-1769184336748-2cyuyxol/README.md | 13 + .../issue-1769184336748-2cyuyxol/repro.mjs | 17 + .../issue-1769184336749-04htj2e5/README.md | 12 + .../issue-1769184336749-04htj2e5/repro.mjs | 17 + .../issue-1769184354751-yhtkxzw3/README.md | 14 + .../issue-1769184354751-yhtkxzw3/repro.mjs | 16 + .../reproducers/issue-2-css-lint/README.md | 17 + .../reproducers/issue-2-css-lint/repro.mjs | 14 + .../README.md | 41 + .../repro.mjs | 36 + .../reproducers/issue-moderation-ui/README.md | 24 + .../issue-moderation-ui/playwright.config.ts | 29 + .../issue-moderation-ui/repro.spec.ts | 43 + .../issue-moderation-visibility/README.md | 21 + .../issue-moderation-visibility/repro.spec.ts | 76 + .../issue-popover-viewport/README.md | 21 + .../issue-popover-viewport/repro.spec.ts | 81 + .../nostr-schemas/18c960c07a1b14b0.json | 22 + .../nostr-schemas/227e8db93b7456c9.json | 26 + .../nostr-schemas/2388d33b32f5dd1f.json | 17 + .../nostr-schemas/2d038dd6ff3603e4.json | 29 + .../nostr-schemas/7d28c8f4e78c2a83.json | 26 + .../nostr-schemas/85fde36936a9aa86.json | 33 + .../nostr-schemas/8d1d49645b90d7ce.json | 38 + .../nostr-schemas/91f935834c393ec6.json | 34 + .../nostr-schemas/9542c7dff1386872.json | 31 + .../nostr-schemas/97b4273a8fe15fbe.json | 109 + .../nostr-schemas/9a68a21eb821d150.json | 39 + .../nostr-schemas/9e2b76583d4b46cf.json | 22 + .../nostr-schemas/a58dd9ee08c19eca.json | 37 + .../nostr-schemas/c1a8c5dbd064fa0b.json | 22 + .../nostr-schemas/c446637259d72e96.json | 26 + .../nostr-schemas/ca5e0379db09a508.json | 18 + .../nostr-schemas/d770efd177e76757.json | 16 + .../nostr-schemas/e4db9b78fcd4b2a5.json | 6 + .../nostr-schemas/e5ac4b49024a9315.json | 47 + .../nostr-schemas/f5565f667ef0bd28.json | 18 + .../nostr-schemas/f5dd74590c3975b4.json | 17 + .../nostrEventSchemas-circular-override.json | 11 + .../examples/reproducers/playwright.config.ts | 24 + bitvid-working-webtorrent/index.html | 427 + .../issues/todo-moderation-tests.md | 16 + .../issues/upgrade-cross-env.md | 7 + .../issues/upgrade-esbuild.md | 7 + .../issues/upgrade-nostr-tools.md | 8 + .../issues/upgrade-pixelmatch.md | 7 + .../upgrade-prettier-plugin-tailwindcss.md | 7 + .../issues/upgrade-stylelint.md | 7 + .../issues/upgrade-tailwindcss.md | 7 + bitvid-working-webtorrent/js/accessControl.js | 807 + .../js/adminListStore.js | 1032 ++ bitvid-working-webtorrent/js/app.js | 10170 ++++++++++++ .../js/applicationContext.js | 24 + .../js/attachments/attachmentUtils.js | 162 + .../js/auth/signingAdapter.js | 203 + bitvid-working-webtorrent/js/bootstrap.js | 39 + .../js/bufferPolyfill.js | 17 + .../js/channelProfile.js | 5506 +++++++ bitvid-working-webtorrent/js/config.js | 139 + bitvid-working-webtorrent/js/constants.js | 485 + bitvid-working-webtorrent/js/designSystem.js | 98 + .../js/designSystem/dynamicStyles.js | 276 + .../js/designSystem/metrics.js | 251 + .../js/directMessagesStore.js | 336 + bitvid-working-webtorrent/js/disclaimer.js | 62 + bitvid-working-webtorrent/js/dmDecryptor.js | 623 + bitvid-working-webtorrent/js/docsView.js | 633 + .../js/dom/cardObserver.js | 209 + bitvid-working-webtorrent/js/embed.js | 442 + .../js/embedDiagnostics.js | 177 + bitvid-working-webtorrent/js/exploreView.js | 120 + .../js/feedEngine/engine.js | 233 + .../js/feedEngine/exploreScoring.js | 451 + .../js/feedEngine/index.js | 26 + .../js/feedEngine/kidsAudienceFilterStage.js | 161 + .../js/feedEngine/kidsScoring.js | 424 + .../js/feedEngine/sorters.js | 460 + .../js/feedEngine/sources.js | 238 + .../js/feedEngine/stages.js | 1360 ++ .../js/feedEngine/utils.js | 64 + .../js/feedEngine/watchHistoryFeed.js | 670 + bitvid-working-webtorrent/js/forYouView.js | 152 + bitvid-working-webtorrent/js/gridHealth.js | 671 + .../js/hashChangeHandler.js | 137 + bitvid-working-webtorrent/js/hashView.js | 35 + bitvid-working-webtorrent/js/historyView.js | 2514 +++ bitvid-working-webtorrent/js/index.js | 1411 ++ bitvid-working-webtorrent/js/kidsView.js | 119 + bitvid-working-webtorrent/js/lists.js | 7 + bitvid-working-webtorrent/js/magnetShared.js | 420 + bitvid-working-webtorrent/js/magnetUtils.js | 129 + bitvid-working-webtorrent/js/magnets.js | 96 + .../js/nostr/adapters/nip07Adapter.js | 235 + .../js/nostr/adapters/nip46Adapter.js | 92 + .../js/nostr/adapters/nsecAdapter.js | 90 + .../js/nostr/cachePolicies.js | 96 + bitvid-working-webtorrent/js/nostr/client.js | 8205 ++++++++++ .../js/nostr/commentEvents.js | 1567 ++ .../js/nostr/countDiagnostics.js | 68 + .../js/nostr/defaultClient.js | 31 + .../js/nostr/dmDecryptDiagnostics.js | 42 + .../js/nostr/dmDecryptWorker.js | 265 + .../js/nostr/dmDecryptWorkerClient.js | 127 + .../js/nostr/dmSignalEvents.js | 308 + bitvid-working-webtorrent/js/nostr/index.js | 65 + .../js/nostr/maxListenerDiagnostics.js | 95 + .../js/nostr/nip04Worker.js | 91 + .../js/nostr/nip04WorkerClient.js | 108 + .../js/nostr/nip07Permissions.js | 401 + .../js/nostr/nip46Client.js | 2238 +++ .../js/nostr/nip46Queue.js | 88 + bitvid-working-webtorrent/js/nostr/nip71.js | 1519 ++ .../js/nostr/publishHelpers.js | 1334 ++ .../js/nostr/reactionEvents.js | 506 + .../js/nostr/sessionActor.js | 496 + .../js/nostr/signRequestQueue.js | 130 + .../js/nostr/signerHelpers.js | 165 + .../js/nostr/syncMetadataStore.js | 100 + bitvid-working-webtorrent/js/nostr/toolkit.js | 602 + .../js/nostr/viewEventBindings.js | 42 + .../js/nostr/viewEvents.js | 895 ++ .../js/nostr/watchHistory.js | 2343 +++ .../js/nostr/watchHistoryBindings.js | 29 + .../js/nostrClientFacade.js | 21 + .../js/nostrClientRegistry.js | 263 + .../js/nostrEventSchemas.js | 2699 ++++ bitvid-working-webtorrent/js/nostrPublish.js | 201 + .../js/nostrToolsBootstrap.js | 699 + .../js/nostrViewEventsFacade.js | 27 + .../js/nostrWatchHistoryFacade.js | 10 + bitvid-working-webtorrent/js/nwcSettings.js | 369 + .../js/payments/lnurl.js | 409 + .../js/payments/nwcClient.js | 1640 ++ .../js/payments/platformAddress.js | 326 + .../js/payments/platformFee.js | 74 + .../js/payments/zapMessages.js | 5 + .../js/payments/zapNotifications.js | 366 + .../js/payments/zapReceiptValidator.js | 445 + .../js/payments/zapRequests.js | 200 + .../js/payments/zapSharedState.js | 279 + .../js/payments/zapSplit.js | 610 + bitvid-working-webtorrent/js/playbackUtils.js | 102 + bitvid-working-webtorrent/js/r2.js | 245 + .../js/reactionCounter.js | 797 + bitvid-working-webtorrent/js/relayManager.js | 755 + .../js/search/searchFilterMatchers.js | 80 + .../js/search/searchFilterState.js | 104 + .../js/search/searchFilters.js | 331 + bitvid-working-webtorrent/js/searchView.js | 717 + .../js/services/attachmentService.js | 394 + .../js/services/authProviders/generate.js | 10 + .../js/services/authProviders/index.js | 147 + .../js/services/authProviders/nip07.js | 90 + .../js/services/authProviders/nip46.js | 287 + .../js/services/authProviders/nsec.js | 161 + .../js/services/authService.js | 1199 ++ .../js/services/commentThreadService.js | 1121 ++ .../js/services/discussionCountService.js | 245 + .../js/services/dmNostrService.js | 640 + .../js/services/dmNotificationManager.js | 215 + .../js/services/exploreDataService.js | 371 + .../js/services/hashtagPreferencesService.js | 1068 ++ .../js/services/linkPreviewService.js | 249 + .../js/services/moderationActionController.js | 600 + .../js/services/moderationDecorator.js | 507 + .../js/services/moderationService.js | 2549 +++ .../js/services/nostrService.js | 2075 +++ .../js/services/nwcSettingsService.js | 327 + .../js/services/playbackService.js | 944 ++ .../js/services/r2Service.js | 1193 ++ .../js/services/relayHealthService.js | 236 + .../js/services/s3Service.js | 185 + .../js/services/s3UploadService.js | 436 + .../js/services/storageService.js | 674 + .../js/services/trustBootstrap.js | 192 + .../js/services/videoNotePayload.js | 475 + .../js/services/watchHistoryTelemetry.js | 427 + bitvid-working-webtorrent/js/sidebar.js | 19 + .../js/sidebarLoading.js | 33 + .../js/state/appState.js | 222 + bitvid-working-webtorrent/js/state/cache.js | 1810 +++ .../js/state/profileCache.js | 365 + .../js/state/profileSettingsStore.js | 74 + bitvid-working-webtorrent/js/storage/dmDb.js | 551 + .../js/storage/r2-mgmt.js | 293 + bitvid-working-webtorrent/js/storage/r2-s3.js | 184 + .../js/storage/s3-client.js | 114 + .../js/storage/s3-multipart.js | 272 + .../js/storage/s3-url.js | 74 + bitvid-working-webtorrent/js/subscriptions.js | 1905 +++ .../js/themeController.js | 378 + bitvid-working-webtorrent/js/trackerConfig.js | 39 + .../js/ui/ModalManager.js | 974 ++ .../js/ui/ambientBackground.js | 298 + .../js/ui/appChromeController.js | 408 + .../js/ui/applicationBootstrap.js | 1108 ++ .../js/ui/components/DeleteModal.js | 453 + .../js/ui/components/EditModal.js | 1129 ++ .../js/ui/components/EmbedPlayerModal.js | 214 + .../js/ui/components/EmbedVideoModal.js | 451 + .../js/ui/components/EventDetailsModal.js | 458 + .../js/ui/components/FeedInfoPopover.js | 44 + .../js/ui/components/RevertModal.js | 1662 ++ .../js/ui/components/SearchFilterModal.js | 433 + .../js/ui/components/ShareNostrModal.js | 486 + .../js/ui/components/SimilarContentCard.js | 1293 ++ .../js/ui/components/UploadModal.js | 1318 ++ .../js/ui/components/VideoCard.js | 3098 ++++ .../js/ui/components/VideoModal.js | 6276 ++++++++ .../js/ui/components/hashtagStripHelper.js | 395 + .../js/ui/components/modalAccessibility.js | 210 + .../js/ui/components/nip71FormManager.js | 799 + .../ui/components/staticModalAccessibility.js | 142 + .../js/ui/components/tagPillList.js | 268 + .../js/ui/components/tagPreferenceMenu.js | 248 + .../video-modal/commentsController.js | 291 + .../video-modal/moderationController.js | 118 + .../video-modal/reactionsController.js | 76 + .../video-modal/similarContentController.js | 73 + .../video-modal/utils/commentAvatar.js | 81 + .../js/ui/components/videoMenuRenderers.js | 494 + .../js/ui/dm/AppShell.js | 283 + bitvid-working-webtorrent/js/ui/dm/Avatar.js | 57 + .../js/ui/dm/Composer.js | 244 + .../js/ui/dm/ContactRow.js | 95 + .../js/ui/dm/ConversationList.js | 159 + .../js/ui/dm/DMPrivacySettings.js | 72 + .../js/ui/dm/DayDivider.js | 24 + .../js/ui/dm/MessageBubble.js | 77 + .../js/ui/dm/MessageThread.js | 184 + .../js/ui/dm/NotificationCenter.js | 219 + .../js/ui/dm/ZapInterface.js | 118 + .../js/ui/dm/ZapReceiptList.js | 100 + bitvid-working-webtorrent/js/ui/dm/index.js | 11 + .../js/ui/dm/zapHelpers.js | 58 + .../js/ui/editModalController.js | 119 + .../js/ui/engagementController.js | 426 + .../js/ui/initDeleteModal.js | 58 + .../js/ui/initEditModal.js | 68 + .../js/ui/initUploadModal.js | 76 + .../js/ui/loginModalController.js | 2532 +++ .../js/ui/moderationCopy.js | 162 + .../js/ui/moderationUiHelpers.js | 350 + .../js/ui/moreMenuController.js | 1608 ++ .../js/ui/overlay/overlayRoot.js | 63 + .../js/ui/overlay/popoverEngine.js | 1069 ++ .../js/ui/profileIdentityController.js | 179 + .../js/ui/profileModalController.js | 13068 ++++++++++++++++ .../js/ui/reactionController.js | 371 + .../js/ui/revertModalController.js | 118 + .../js/ui/shareNostrController.js | 237 + .../js/ui/similarContentController.js | 333 + .../js/ui/tagPreferenceMenuController.js | 357 + .../js/ui/torrentStatusController.js | 73 + .../js/ui/urlHealthController.js | 477 + .../js/ui/videoListViewController.js | 112 + .../js/ui/videoModalCommentController.js | 962 ++ .../js/ui/views/VideoListView.js | 1345 ++ .../js/ui/watchHistoryController.js | 371 + .../js/ui/zapController.js | 1188 ++ .../js/urlHealthObserver.js | 68 + bitvid-working-webtorrent/js/userBlocks.js | 1980 +++ .../js/utils/cardSourceVisibility.js | 90 + .../js/utils/domUtils.js | 35 + .../js/utils/formatters.js | 126 + .../js/utils/hashtagNormalization.js | 50 + bitvid-working-webtorrent/js/utils/hex.js | 11 + .../js/utils/linkPreviewSettings.js | 150 + bitvid-working-webtorrent/js/utils/logger.js | 170 + .../js/utils/lruCache.js | 109 + .../js/utils/magnetValidators.js | 59 + .../js/utils/mediaLoader.js | 82 + bitvid-working-webtorrent/js/utils/pointer.js | 27 + .../js/utils/profileBatchFetcher.js | 173 + .../js/utils/profileMedia.js | 80 + bitvid-working-webtorrent/js/utils/qrcode.js | 805 + .../js/utils/safeDecode.js | 32 + .../js/utils/serviceWorkerFallbackMessages.js | 58 + bitvid-working-webtorrent/js/utils/storage.js | 114 + .../js/utils/storagePointer.js | 123 + .../js/utils/torrentHash.js | 72 + .../js/utils/videoDeduper.js | 37 + .../js/utils/videoPointer.js | 126 + .../js/utils/videoTags.js | 136 + .../js/utils/videoTimestamps.js | 106 + .../js/videoEventUtils.js | 118 + bitvid-working-webtorrent/js/viewCounter.js | 659 + bitvid-working-webtorrent/js/viewManager.js | 212 + .../js/watchHistoryDebug.js | 193 + .../js/watchHistoryService.js | 1376 ++ .../js/webtorrent-global.js | 16 + bitvid-working-webtorrent/js/webtorrent.js | 976 ++ .../js/webtorrent.min.js | 2 + .../js/webtorrent.min.js.map | 1 + bitvid-working-webtorrent/netlify.toml | 3 + bitvid-working-webtorrent/package-lock.json | 4560 ++++++ bitvid-working-webtorrent/package.json | 60 + .../playwright.config.ts | 40 + bitvid-working-webtorrent/postcss.config.cjs | 6 + bitvid-working-webtorrent/prettier.config.cjs | 5 + .../releases/draft-20260124.md | 17 + .../scripts/agent/debug_frontend.py | 33 + .../scripts/agent/fuzz-dm-decryptor.mjs | 84 + .../scripts/agent/fuzz-dm.mjs | 153 + .../scripts/agent/fuzz-dmDecryptor.mjs | 82 + .../scripts/agent/fuzz-lib.mjs | 190 + .../scripts/agent/fuzz-magnet-utils.mjs | 38 + .../scripts/agent/fuzz-magnet.mjs | 120 + .../scripts/agent/fuzz-magnetUtils.mjs | 107 + .../scripts/agent/fuzz-nostr-schemas.mjs | 84 + .../scripts/agent/fuzz-nostrEventSchemas.mjs | 254 + .../scripts/agent/fuzz-schemas.mjs | 217 + .../scripts/agent/fuzz-setup.mjs | 55 + .../scripts/agent/fuzz-shared.mjs | 191 + .../scripts/agent/fuzz-utils.mjs | 127 + .../scripts/agent/interop-test.mjs | 234 + .../scripts/agent/load-test-relay.mjs | 100 + .../scripts/agent/load-test.mjs | 482 + .../scripts/agent/mocks/watchHistory.js | 6 + .../scripts/agent/review-open-prs.mjs | 100 + .../scripts/agent/setup-test-env.js | 42 + .../scripts/agent/simple-relay.mjs | 98 + .../scripts/agent/smoke-test.mjs | 286 + .../scripts/agent/telemetry-aggregator.mjs | 532 + .../scripts/agent/test-nip07-refactor.mjs | 70 + .../scripts/agent/validate-events.test.mjs | 390 + .../scripts/automated-pr-review.mjs | 268 + .../scripts/build-beacon.mjs | 68 + .../scripts/build-dist.mjs | 69 + .../scripts/cancel-all-ci-runs.sh | 43 + .../scripts/check-design-tokens.mjs | 417 + .../scripts/check-hex.js | 81 + .../scripts/check-inline-styles.mjs | 257 + .../scripts/check-tailwind-colors.mjs | 133 + .../scripts/daily-design-system-audit.mjs | 252 + .../scripts/run-playwright-docker.sh | 29 + .../scripts/run-targeted-tests.mjs | 57 + .../scripts/run-unit-tests.mjs | 185 + .../scripts/setup-pre-commit.sh | 38 + .../scripts/show-artifacts.sh | 12 + .../scripts/vendor/floating-ui-dom-entry.mjs | 8 + bitvid-working-webtorrent/site.webmanifest | 41 + .../stylelint.config.cjs | 29 + bitvid-working-webtorrent/sw.min.js | 174 + bitvid-working-webtorrent/tailwind.config.cjs | 516 + .../tests/admin-list-store.test.mjs | 635 + .../tests/app-batch-fetch-profiles.test.mjs | 124 + .../tests/app-state.test.mjs | 108 + .../app/channel-profile-moderation.test.mjs | 522 + .../tests/app/hash-change-handler.test.mjs | 126 + .../app/hydrate-sidebar-navigation.test.mjs | 183 + .../tests/app/is-user-logged-in.test.mjs | 132 + .../tests/app/moderation-overrides.test.mjs | 264 + .../app/moderation-settings-refresh.test.mjs | 68 + .../tests/app/similar-content.test.mjs | 286 + .../tests/auth-service.test.mjs | 224 + .../tests/comment-event-builder.test.mjs | 196 + .../tests/comment-thread-service.test.mjs | 1274 ++ .../tests/design-system-metrics.test.mjs | 61 + .../tests/discussion-count-service.test.mjs | 179 + .../tests/dm-db.test.mjs | 88 + .../tests/dm-decryptor.test.mjs | 170 + .../tests/dm-normalization.test.mjs | 132 + .../tests/e2e/helpers/uiTestUtils.ts | 48 + .../tests/e2e/popover.spec.ts | 246 + .../tests/e2e/repro_issue.spec.ts | 112 + .../tests/e2e/toast-service.spec.ts | 39 + .../tests/e2e/ui-modals.spec.ts | 300 + .../tests/e2e/video-modal-share-bug.spec.ts | 67 + .../tests/e2e/webseed-playback.spec.ts | 80 + .../tests/edit-modal-submit-state.test.mjs | 312 + .../tests/embed_playback_check.spec.mjs | 134 + .../tests/event-schemas.test.mjs | 225 + .../tests/feed-engine.test.mjs | 414 + .../feed-engine/explore-diversity.test.mjs | 85 + .../tests/feed-engine/explore-scorer.test.mjs | 160 + .../tag-preference-filter.test.mjs | 86 + .../tests/hashtag-preferences.test.mjs | 557 + .../tests/helpers/moderation-test-helpers.mjs | 294 + .../tests/login-modal-controller.test.mjs | 275 + .../tests/magnet-utils.test.mjs | 187 + .../tests/media-loader.test.mjs | 197 + .../tests/modal-accessibility.test.mjs | 538 + .../tests/moderation-service.test.mjs | 444 + .../tests/moderation-stage.test.mjs | 676 + .../tests/moderation/hide-thresholds.test.mjs | 403 + .../mocks/bootstrap-trust-seeds-loader.mjs | 36 + .../tests/moderation/submit-report.test.mjs | 103 + .../tests/moderation/trust-seeds.test.mjs | 263 + .../moderation/trusted-mute-lists.test.mjs | 180 + .../moderation/trusted-report-count.test.mjs | 230 + .../tests/moderation/video-card.test.mjs | 562 + .../tests/more-menu-controller.test.mjs | 254 + .../tests/nip71-base-event-tags.test.mjs | 107 + .../tests/nip71-builder.test.mjs | 298 + .../tests/nip71-form-manager.test.mjs | 74 + .../tests/nostr-boost-actions.test.mjs | 400 + .../tests/nostr-count-fallback.test.mjs | 213 + .../tests/nostr-delete-flow.test.mjs | 472 + .../tests/nostr-ephemeral-dm-tester.html | 238 + .../tests/nostr-login-permissions.test.mjs | 457 + .../tests/nostr-nip46-queue.test.mjs | 136 + .../tests/nostr-private-key-signer.test.mjs | 80 + .../tests/nostr-publish-rejection.test.mjs | 476 + .../tests/nostr-rebroadcast-guard.test.mjs | 125 + .../tests/nostr-send-direct-message.test.mjs | 175 + .../nostr-service-access-control.test.mjs | 195 + .../tests/nostr-signer-race.test.mjs | 65 + .../tests/nostr-view-event-bindings.test.mjs | 141 + .../tests/nostr-view-events.test.mjs | 104 + .../tests/nostr/adapters.test.mjs | 156 + .../tests/nostr/cachePolicies.test.mjs | 39 + .../tests/nostr/client.test.mjs | 250 + .../tests/nostr/comment-events.test.mjs | 809 + .../nostr/dm-direct-message-flow.test.mjs | 421 + .../nostr/dmDecryptorPreference.test.mjs | 63 + .../tests/nostr/dmSignalEvents.test.mjs | 168 + .../tests/nostr/edit-video-dtag.test.mjs | 166 + .../nostr/integration-remote-flow.test.mjs | 318 + .../tests/nostr/nip07Permissions.test.js | 130 + .../tests/nostr/nip46Client.test.js | 438 + .../tests/nostr/nip71.test.js | 248 + .../tests/nostr/nostrClientFacade.test.js | 27 + .../tests/nostr/nostrClientRegistry.test.mjs | 51 + .../tests/nostr/publishHelpers.test.mjs | 143 + .../tests/nostr/reaction-events.test.mjs | 125 + .../tests/nostr/revert-video-dtag.test.mjs | 127 + .../tests/nostr/session-actor.test.mjs | 103 + .../tests/nostr/sessionActor.test.js | 107 + .../tests/nostr/sessionActor.test.mjs | 120 + .../tests/nostr/sign-request-queue.test.mjs | 123 + .../tests/nostr/signers.test.mjs | 38 + .../tests/nostr/syncMetadataStore.test.mjs | 115 + .../tests/nostr/toolkit.test.mjs | 98 + .../tests/nostr/watchHistory.test.js | 450 + .../tests/nostr/watchHistoryBindings.test.js | 83 + .../tests/nwc-client.test.mjs | 558 + .../tests/nwc-settings-service.test.mjs | 97 + .../tests/position-floating-panel.test.mjs | 418 + .../tests/profile-modal-controller.test.mjs | 1303 ++ .../tests/reaction-event-builder.test.mjs | 58 + .../tests/revert-modal-controller.test.mjs | 132 + .../tests/safe-decode.test.mjs | 70 + .../tests/services/attachmentService.test.mjs | 166 + .../services/link-preview-service.test.mjs | 123 + .../moderation-action-controller.test.mjs | 203 + .../tests/services/nostr-service.test.mjs | 83 + .../tests/services/playbackService.test.mjs | 213 + .../playbackService_forcedSource.test.mjs | 211 + .../services/playbackService_order.test.mjs | 227 + .../tests/services/r2Service.test.mjs | 181 + .../services/relay-health-service.test.mjs | 166 + .../tests/services/s3Service.test.mjs | 64 + .../tests/share-event-builder.test.mjs | 93 + .../tests/shareNostrController.test.mjs | 146 + .../tests/state/appState.test.mjs | 76 + .../tests/state/cache-saved-profiles.test.mjs | 163 + .../tests/state/cache.test.mjs | 105 + .../tests/state/profile-cache.test.mjs | 158 + .../state/profile-settings-store.test.mjs | 92 + .../tests/storage-service.test.mjs | 175 + .../tests/subscriptions-feed.test.mjs | 315 + .../tests/subscriptions-manager.test.mjs | 1171 ++ .../tests/test-helpers/setup-localstorage.mjs | 71 + .../tests/test-helpers/wait-for.mjs | 20 + .../tests/test-setup.mjs | 33 + .../service-worker-fallback-message.test.mjs | 57 + .../tests/torrent/style-helpers.test.mjs | 41 + .../tests/torrent/toast-service.test.mjs | 54 + .../tests/ui/app-chrome-controller.test.mjs | 58 + .../tests/ui/engagement-controller.test.mjs | 149 + .../ui/hashtag-strip-helper-bounce.test.mjs | 144 + .../tests/ui/helpers/jsdom-test-helpers.mjs | 46 + .../ui/mocks/floating-ui-test-loader.mjs | 28 + .../tests/ui/popoverEngine.test.mjs | 764 + ...profile-modal-moderation-settings.test.mjs | 356 + .../tests/ui/reactionController.test.mjs | 154 + .../tests/ui/similar-content-card.test.mjs | 196 + .../ui/similarContentController.test.mjs | 164 + .../tests/ui/storageService.test.mjs | 169 + .../tests/ui/tag-pill-list.test.mjs | 126 + .../tests/ui/tag-preference-menu.test.mjs | 102 + .../ui/tagPreferenceMenuController.test.mjs | 185 + .../tests/ui/torrentStatusController.test.mjs | 66 + .../tests/ui/uploadModal-integration.test.mjs | 215 + .../tests/ui/uploadModal-reset.test.mjs | 230 + .../tests/ui/url-health-controller.test.mjs | 195 + .../ui/video-list-view-popular-tags.test.mjs | 146 + .../tests/ui/video-list-view-sorting.test.mjs | 64 + .../tests/unit/app_guard_logic.test.mjs | 51 + .../tests/unit/editModalController.test.mjs | 160 + .../tests/unit/embed-accent.test.mjs | 10 + .../tests/unit/embed_player_modal.test.mjs | 34 + .../tests/unit/hashChangeHandler.test.mjs | 64 + .../tests/unit/searchFilters.test.mjs | 117 + .../services/moderationDecorator.test.mjs | 176 + .../r2Service.storage-config.test.mjs | 158 + .../tests/user-blocks.test.mjs | 1283 ++ .../tests/utils/video-deduper.test.mjs | 23 + .../tests/utils/video-tags.test.mjs | 54 + .../tests/validate-config.test.mjs | 21 + .../video-card-source-visibility.test.mjs | 252 + .../tests/video-modal-accessibility.test.mjs | 1115 ++ .../tests/video-modal-comments.test.mjs | 1268 ++ .../tests/video-modal-controllers.test.mjs | 192 + .../tests/video-modal-moderation.test.mjs | 158 + .../tests/video-modal-tags.test.mjs | 41 + .../tests/video-modal-zap.test.mjs | 989 ++ .../tests/video-note-payload.test.mjs | 212 + .../video-schema-and-conversion.test.mjs | 78 + .../tests/view-counter.test.mjs | 1121 ++ .../tests/visual/baseline-store.ts | 50 + .../tests/visual/baselines.json | 6 + .../tests/visual/embed-layout.spec.ts | 41 + .../tests/visual/kitchen-sink.spec.ts | 212 + .../tests/visual/moderation.spec.ts | 247 + .../tests/visual/overlay-layers.spec.ts | 282 + .../tests/visual/reduced-motion.spec.ts | 137 + .../tests/watch-history-feed.test.mjs | 132 + .../tests/watch-history.test.mjs | 2688 ++++ .../watch-history-telemetry.test.mjs | 224 + .../tests/zap-shared-state.test.mjs | 29 + .../tests/zap-split.test.mjs | 840 + bitvid-working-webtorrent/torrent/app.js | 637 + bitvid-working-webtorrent/torrent/beacon.html | 323 + .../torrent/docs/ui-grid-ng-notify-audit.md | 16 + bitvid-working-webtorrent/torrent/favicon.ico | Bin 0 -> 15406 bytes .../torrent/js/utils/logger.js | 2 + .../torrent/src/beacon-vendor.js | 100 + .../torrent/ui/styleHelpers.js | 7 + .../torrent/ui/toastService.js | 191 + .../torrent/ui/torrentTable.js | 266 + .../vendor/crypto-helpers.LICENSE | 22 + .../vendor/crypto-helpers.bundle.min.js | 10 + .../vendor/crypto-helpers.entry.js | 3 + .../vendor/floating-ui.LICENSE | 20 + .../vendor/floating-ui.dom.bundle.min.js | 1 + .../vendor/highlight.min.js | 1244 ++ .../vendor/marked.min.js | 74 + .../vendor/nostr-tools.LICENSE | 24 + .../vendor/nostr-tools.bundle.min.js | 8 + .../views/channel-profile.html | 179 + .../views/dev/popover-demo.html | 316 + bitvid-working-webtorrent/views/docs.html | 76 + bitvid-working-webtorrent/views/explore.html | 40 + bitvid-working-webtorrent/views/for-you.html | 40 + bitvid-working-webtorrent/views/history.html | 97 + bitvid-working-webtorrent/views/kids.html | 41 + .../views/most-recent-videos.html | 43 + bitvid-working-webtorrent/views/search.html | 73 + .../views/subscriptions.html | 39 + 888 files changed, 251050 insertions(+) create mode 100644 bitvid-working-webtorrent/.devcontainer/devcontainer.json create mode 100644 bitvid-working-webtorrent/.dockerignore create mode 100644 bitvid-working-webtorrent/.gitattributes create mode 100644 bitvid-working-webtorrent/.github/workflows/agent-pr-review.yml create mode 100644 bitvid-working-webtorrent/.github/workflows/ci.yml create mode 100644 bitvid-working-webtorrent/.github/workflows/cleanup-stuck-runs.yml create mode 100644 bitvid-working-webtorrent/.github/workflows/daily-design-system-audit.yml create mode 100644 bitvid-working-webtorrent/.gitignore create mode 100644 bitvid-working-webtorrent/.vscode/settings.json create mode 100644 bitvid-working-webtorrent/AGENTS.md create mode 100644 bitvid-working-webtorrent/CHANGELOG.md create mode 100644 bitvid-working-webtorrent/CONTRIBUTING.md create mode 100644 bitvid-working-webtorrent/Dockerfile create mode 100644 bitvid-working-webtorrent/KNOWN_ISSUES.md create mode 100644 bitvid-working-webtorrent/LICENSE create mode 100644 bitvid-working-webtorrent/LINT_ISSUES.md create mode 100644 bitvid-working-webtorrent/PR_REVIEWS.md create mode 100644 bitvid-working-webtorrent/README.md create mode 100644 bitvid-working-webtorrent/REMEDIATION_REPORT.md create mode 100644 bitvid-working-webtorrent/TRADEMARKS.md create mode 100644 bitvid-working-webtorrent/_headers create mode 100644 bitvid-working-webtorrent/_redirects create mode 100644 bitvid-working-webtorrent/ai/onboarding-report.md create mode 100644 bitvid-working-webtorrent/assets/favicon.ico create mode 100644 bitvid-working-webtorrent/assets/gif/please-stand-by.gif create mode 100644 bitvid-working-webtorrent/assets/jpg/bitvid.jpg create mode 100644 bitvid-working-webtorrent/assets/jpg/bitvid_Simplified-Chinese.png create mode 100644 bitvid-working-webtorrent/assets/jpg/default-profile.jpg create mode 100644 bitvid-working-webtorrent/assets/jpg/video-thumbnail-fallback.jpg create mode 100644 bitvid-working-webtorrent/assets/png/android-chrome-192x192.png create mode 100644 bitvid-working-webtorrent/assets/png/android-chrome-512x512.png create mode 100644 bitvid-working-webtorrent/assets/png/apple-touch-icon.png create mode 100644 bitvid-working-webtorrent/assets/png/bitvid-banner.png create mode 100644 bitvid-working-webtorrent/assets/png/favicon-16x16.png create mode 100644 bitvid-working-webtorrent/assets/png/favicon-32x32.png create mode 100644 bitvid-working-webtorrent/assets/svg/about-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/beacon-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/beta-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/bitvid-logo-dark-mode.svg create mode 100644 bitvid-working-webtorrent/assets/svg/bitvid-logo-light-mode.svg create mode 100644 bitvid-working-webtorrent/assets/svg/blog-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/copy-magnet.svg create mode 100644 bitvid-working-webtorrent/assets/svg/default-profile.svg create mode 100644 bitvid-working-webtorrent/assets/svg/dns-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/ellipsis.svg create mode 100644 bitvid-working-webtorrent/assets/svg/explore-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/feed-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/filter.svg create mode 100644 bitvid-working-webtorrent/assets/svg/for-you-feed-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/getting-started-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/github-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/globe-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/guidelines-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/history-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/home-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/hot-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/lightning-bolt.svg create mode 100644 bitvid-working-webtorrent/assets/svg/links-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/mobile-sidebar-menu-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/nostr-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/roadmap-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/search.svg create mode 100644 bitvid-working-webtorrent/assets/svg/share-video.svg create mode 100644 bitvid-working-webtorrent/assets/svg/subscribe-button-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/subscriptions-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/upload-content-icon.svg create mode 100644 bitvid-working-webtorrent/assets/svg/video-settings-gear.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/beacon-icon.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-01.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-01.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-02.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-02.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-03.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-03.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-04.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-04.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-05.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-05.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-06.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-06.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-07.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-07.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-08.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-08.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-09.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-09.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-10.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-10.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-11.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-11.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-12.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-12.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-13.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-13.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-14.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-14.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-15.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-15.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-16.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid-16.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid.afdesign create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid.ai create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid.jpg create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid_favicon.afdesign create mode 100644 bitvid-working-webtorrent/bitvid_logo/bitvid_favicon.png create mode 100644 bitvid-working-webtorrent/bitvid_logo/dns-icon.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/guidelines-icon.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/home-icon.svg create mode 100644 bitvid-working-webtorrent/bitvid_logo/ipns-icon.svg create mode 100644 bitvid-working-webtorrent/components/application-form.html create mode 100644 bitvid-working-webtorrent/components/bug-fix-form.html create mode 100644 bitvid-working-webtorrent/components/content-appeals-form.html create mode 100644 bitvid-working-webtorrent/components/delete-video-modal.html create mode 100644 bitvid-working-webtorrent/components/disclaimer.html create mode 100644 bitvid-working-webtorrent/components/edit-video-modal.html create mode 100644 bitvid-working-webtorrent/components/embed-video-modal.html create mode 100644 bitvid-working-webtorrent/components/feature-request-form.html create mode 100644 bitvid-working-webtorrent/components/general-feedback-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/iframe-application-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/iframe-bug-fix-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/iframe-content-appeals-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/iframe-feedback-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/iframe-request-form.html create mode 100644 bitvid-working-webtorrent/components/iframe_forms/theme-sync.js create mode 100644 bitvid-working-webtorrent/components/lockdown-modal.html create mode 100644 bitvid-working-webtorrent/components/login-modal.html create mode 100644 bitvid-working-webtorrent/components/profile-modal.html create mode 100644 bitvid-working-webtorrent/components/revert-video-modal.html create mode 100644 bitvid-working-webtorrent/components/search-filter-modal.html create mode 100644 bitvid-working-webtorrent/components/share-nostr-modal.html create mode 100644 bitvid-working-webtorrent/components/sidebar.html create mode 100644 bitvid-working-webtorrent/components/upload-modal.html create mode 100644 bitvid-working-webtorrent/components/video-modal.html create mode 100644 bitvid-working-webtorrent/config/asset-version.js create mode 100644 bitvid-working-webtorrent/config/instance-config.js create mode 100644 bitvid-working-webtorrent/config/validate-config.js create mode 100644 bitvid-working-webtorrent/content/docs/about.md create mode 100644 bitvid-working-webtorrent/content/docs/community/community-guidelines.md create mode 100644 bitvid-working-webtorrent/content/docs/community/index.md create mode 100644 bitvid-working-webtorrent/content/docs/community/links.md create mode 100644 bitvid-working-webtorrent/content/docs/getting-started.md create mode 100644 bitvid-working-webtorrent/content/docs/guides/index.md create mode 100644 bitvid-working-webtorrent/content/docs/guides/upload-content.md create mode 100644 bitvid-working-webtorrent/content/docs/overview.md create mode 100644 bitvid-working-webtorrent/content/docs/roadmap.md create mode 100644 bitvid-working-webtorrent/content/docs/toc.json create mode 100644 bitvid-working-webtorrent/content/roadmap/02_bitvid_Enhanced_Migration_of_Note_Spec_Logic.md create mode 100644 bitvid-working-webtorrent/content/roadmap/03_bitvid_Enhanced_Nostr_Video_&_Audio_Note_Specification_Version 3.md create mode 100644 bitvid-working-webtorrent/content/roadmap/04_bitvid_Enhanced_Profile_Channel_Views_Specification.md create mode 100644 bitvid-working-webtorrent/content/roadmap/05_bitvid_Enhanced_Block_Subscription_&_Reporting_Specification.md create mode 100644 bitvid-working-webtorrent/content/roadmap/06_bitvid_Enhanced_Video_Comment_System_Specification.md create mode 100644 bitvid-working-webtorrent/content/roadmap/07_bitvid_Enhanced_View_Rating_&_Retention_Penalty_Scoring.md create mode 100644 bitvid-working-webtorrent/content/roadmap/08_bitvid_Enhanced_Dynamic_Home_Page_&_Video_Tracking_Specification.md create mode 100644 bitvid-working-webtorrent/content/roadmap/09_bitvid_Enhanced_NIP-35_+_WebRTC_Check_Integration.md create mode 100644 bitvid-working-webtorrent/css/docs.css create mode 100644 bitvid-working-webtorrent/css/tailwind.source.css create mode 100644 bitvid-working-webtorrent/css/tokens.css create mode 100644 bitvid-working-webtorrent/debug_sidebar.mjs create mode 100644 bitvid-working-webtorrent/docs/auth-architecture.md create mode 100644 bitvid-working-webtorrent/docs/beacon/css-mapping.md create mode 100644 bitvid-working-webtorrent/docs/bitvid-app-audit.md create mode 100644 bitvid-working-webtorrent/docs/cancelling-ci-runs.md create mode 100644 bitvid-working-webtorrent/docs/comment-threading.md create mode 100644 bitvid-working-webtorrent/docs/deployment-notes.md create mode 100644 bitvid-working-webtorrent/docs/design-system.md create mode 100644 bitvid-working-webtorrent/docs/dm-privacy-model.md create mode 100644 bitvid-working-webtorrent/docs/embed-notes.md create mode 100644 bitvid-working-webtorrent/docs/feed-engine.md create mode 100644 bitvid-working-webtorrent/docs/feeds/kids-feed.md create mode 100644 bitvid-working-webtorrent/docs/instance-config.md create mode 100644 bitvid-working-webtorrent/docs/kitchen-sink.html create mode 100644 bitvid-working-webtorrent/docs/logging.md create mode 100644 bitvid-working-webtorrent/docs/manual-qa-2024-05-10.md create mode 100644 bitvid-working-webtorrent/docs/menus.md create mode 100644 bitvid-working-webtorrent/docs/moderation/README.md create mode 100644 bitvid-working-webtorrent/docs/moderation/action-flow.md create mode 100644 bitvid-working-webtorrent/docs/moderation/fixtures/index.html create mode 100644 bitvid-working-webtorrent/docs/moderation/nips.md create mode 100644 bitvid-working-webtorrent/docs/moderation/relays.md create mode 100644 bitvid-working-webtorrent/docs/moderation/testing.md create mode 100644 bitvid-working-webtorrent/docs/moderation/web-of-trust-examples.md create mode 100644 bitvid-working-webtorrent/docs/moderation/web-of-trust.md create mode 100644 bitvid-working-webtorrent/docs/nip46-client-overview.md create mode 100644 bitvid-working-webtorrent/docs/nip46-remote-signers.md create mode 100644 bitvid-working-webtorrent/docs/nip46-roadmap.md create mode 100644 bitvid-working-webtorrent/docs/nips/01.md create mode 100644 bitvid-working-webtorrent/docs/nips/02.md create mode 100644 bitvid-working-webtorrent/docs/nips/03.md create mode 100644 bitvid-working-webtorrent/docs/nips/04.md create mode 100644 bitvid-working-webtorrent/docs/nips/05.md create mode 100644 bitvid-working-webtorrent/docs/nips/06.md create mode 100644 bitvid-working-webtorrent/docs/nips/07.md create mode 100644 bitvid-working-webtorrent/docs/nips/08.md create mode 100644 bitvid-working-webtorrent/docs/nips/09.md create mode 100644 bitvid-working-webtorrent/docs/nips/10.md create mode 100644 bitvid-working-webtorrent/docs/nips/11.md create mode 100644 bitvid-working-webtorrent/docs/nips/12.md create mode 100644 bitvid-working-webtorrent/docs/nips/13.md create mode 100644 bitvid-working-webtorrent/docs/nips/14.md create mode 100644 bitvid-working-webtorrent/docs/nips/15.md create mode 100644 bitvid-working-webtorrent/docs/nips/16.md create mode 100644 bitvid-working-webtorrent/docs/nips/17.md create mode 100644 bitvid-working-webtorrent/docs/nips/18.md create mode 100644 bitvid-working-webtorrent/docs/nips/19.md create mode 100644 bitvid-working-webtorrent/docs/nips/20.md create mode 100644 bitvid-working-webtorrent/docs/nips/21.md create mode 100644 bitvid-working-webtorrent/docs/nips/22.md create mode 100644 bitvid-working-webtorrent/docs/nips/23.md create mode 100644 bitvid-working-webtorrent/docs/nips/24.md create mode 100644 bitvid-working-webtorrent/docs/nips/25.md create mode 100644 bitvid-working-webtorrent/docs/nips/26.md create mode 100644 bitvid-working-webtorrent/docs/nips/27.md create mode 100644 bitvid-working-webtorrent/docs/nips/28.md create mode 100644 bitvid-working-webtorrent/docs/nips/29.md create mode 100644 bitvid-working-webtorrent/docs/nips/30.md create mode 100644 bitvid-working-webtorrent/docs/nips/31.md create mode 100644 bitvid-working-webtorrent/docs/nips/32.md create mode 100644 bitvid-working-webtorrent/docs/nips/33.md create mode 100644 bitvid-working-webtorrent/docs/nips/34.md create mode 100644 bitvid-working-webtorrent/docs/nips/35.md create mode 100644 bitvid-working-webtorrent/docs/nips/36.md create mode 100644 bitvid-working-webtorrent/docs/nips/37.md create mode 100644 bitvid-working-webtorrent/docs/nips/38.md create mode 100644 bitvid-working-webtorrent/docs/nips/39.md create mode 100644 bitvid-working-webtorrent/docs/nips/40.md create mode 100644 bitvid-working-webtorrent/docs/nips/42.md create mode 100644 bitvid-working-webtorrent/docs/nips/44.md create mode 100644 bitvid-working-webtorrent/docs/nips/45.md create mode 100644 bitvid-working-webtorrent/docs/nips/46.md create mode 100644 bitvid-working-webtorrent/docs/nips/47.md create mode 100644 bitvid-working-webtorrent/docs/nips/48.md create mode 100644 bitvid-working-webtorrent/docs/nips/49.md create mode 100644 bitvid-working-webtorrent/docs/nips/50.md create mode 100644 bitvid-working-webtorrent/docs/nips/51.md create mode 100644 bitvid-working-webtorrent/docs/nips/52.md create mode 100644 bitvid-working-webtorrent/docs/nips/53.md create mode 100644 bitvid-working-webtorrent/docs/nips/54.md create mode 100644 bitvid-working-webtorrent/docs/nips/55.md create mode 100644 bitvid-working-webtorrent/docs/nips/56.md create mode 100644 bitvid-working-webtorrent/docs/nips/57.md create mode 100644 bitvid-working-webtorrent/docs/nips/58.md create mode 100644 bitvid-working-webtorrent/docs/nips/59.md create mode 100644 bitvid-working-webtorrent/docs/nips/60.md create mode 100644 bitvid-working-webtorrent/docs/nips/61.md create mode 100644 bitvid-working-webtorrent/docs/nips/62.md create mode 100644 bitvid-working-webtorrent/docs/nips/64.md create mode 100644 bitvid-working-webtorrent/docs/nips/65.md create mode 100644 bitvid-working-webtorrent/docs/nips/66.md create mode 100644 bitvid-working-webtorrent/docs/nips/68.md create mode 100644 bitvid-working-webtorrent/docs/nips/69.md create mode 100644 bitvid-working-webtorrent/docs/nips/70.md create mode 100644 bitvid-working-webtorrent/docs/nips/71.md create mode 100644 bitvid-working-webtorrent/docs/nips/72.md create mode 100644 bitvid-working-webtorrent/docs/nips/73.md create mode 100644 bitvid-working-webtorrent/docs/nips/75.md create mode 100644 bitvid-working-webtorrent/docs/nips/77.md create mode 100644 bitvid-working-webtorrent/docs/nips/78.md create mode 100644 bitvid-working-webtorrent/docs/nips/7D.md create mode 100644 bitvid-working-webtorrent/docs/nips/84.md create mode 100644 bitvid-working-webtorrent/docs/nips/86.md create mode 100644 bitvid-working-webtorrent/docs/nips/87.md create mode 100644 bitvid-working-webtorrent/docs/nips/88.md create mode 100644 bitvid-working-webtorrent/docs/nips/89.md create mode 100644 bitvid-working-webtorrent/docs/nips/90.md create mode 100644 bitvid-working-webtorrent/docs/nips/92.md create mode 100644 bitvid-working-webtorrent/docs/nips/94.md create mode 100644 bitvid-working-webtorrent/docs/nips/96.md create mode 100644 bitvid-working-webtorrent/docs/nips/98.md create mode 100644 bitvid-working-webtorrent/docs/nips/99.md create mode 100644 bitvid-working-webtorrent/docs/nips/A0.md create mode 100644 bitvid-working-webtorrent/docs/nips/B0.md create mode 100644 bitvid-working-webtorrent/docs/nips/B7.md create mode 100644 bitvid-working-webtorrent/docs/nips/C0.md create mode 100644 bitvid-working-webtorrent/docs/nips/C7.md create mode 100644 bitvid-working-webtorrent/docs/nips/EE.md create mode 100644 bitvid-working-webtorrent/docs/nips/README.md create mode 100644 bitvid-working-webtorrent/docs/nostr-analytics.md create mode 100644 bitvid-working-webtorrent/docs/nostr-auth.md create mode 100644 bitvid-working-webtorrent/docs/nostr-client-overview.md create mode 100644 bitvid-working-webtorrent/docs/nostr-event-schemas.md create mode 100644 bitvid-working-webtorrent/docs/nwc-compliance.md create mode 100644 bitvid-working-webtorrent/docs/onboarding-audit-2025-01-27.md create mode 100644 bitvid-working-webtorrent/docs/onboarding-audit-20260128.md create mode 100644 bitvid-working-webtorrent/docs/per-profile-cache.md create mode 100644 bitvid-working-webtorrent/docs/playback-fallback.md create mode 100644 bitvid-working-webtorrent/docs/popover-scenarios.html create mode 100644 bitvid-working-webtorrent/docs/qa.md create mode 100644 bitvid-working-webtorrent/docs/relay-trust-bootstrap.md create mode 100644 bitvid-working-webtorrent/docs/release-notes.md create mode 100644 bitvid-working-webtorrent/docs/signing-adapter.md create mode 100644 bitvid-working-webtorrent/docs/storage-r2.md create mode 100644 bitvid-working-webtorrent/docs/storage-tab-design.md create mode 100644 bitvid-working-webtorrent/docs/video-availability-checks.md create mode 100644 bitvid-working-webtorrent/docs/video-grid-filtering.md create mode 100644 bitvid-working-webtorrent/docs/watch-history-logging.md create mode 100644 bitvid-working-webtorrent/docs/watch-history-system.md create mode 100644 bitvid-working-webtorrent/embed.html create mode 100644 bitvid-working-webtorrent/examples/reproducers/001-popover-404/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/002-sidebar-layout/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/003-video-modal-reg/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/1-similar-content-card-thumbnail/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/1-similar-content-card-thumbnail/reproduce_issue.js create mode 100644 bitvid-working-webtorrent/examples/reproducers/2-repost-comment-visibility-bug/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/2-repost-comment-visibility-bug/reproduce_issue.js create mode 100644 bitvid-working-webtorrent/examples/reproducers/3-similar-content-logic-bug/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/3-similar-content-logic-bug/reproduce_issue.js create mode 100644 bitvid-working-webtorrent/examples/reproducers/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/crash-buildAdminListEvent-hexPubkeys.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/crash-schemas-buildAdminListEvent-848e5ba6.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/crash-schemas-buildAdminListEvent-b1eed32e.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/crash-schemas-buildAdminListEvent-ead98a99.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/fixed-crash-nostrEventSchemas-pointerTags.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-001-video-card-logic/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-001-video-card-logic/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-002-login-modal-nsec/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-002-login-modal-nsec/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-003-popover-ref-error/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-003-popover-ref-error/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1-moderation-ui/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1-moderation-ui/playwright.config.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1-moderation-ui/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336556-zi9tj5l6/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336556-zi9tj5l6/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336558-dkgdojxe/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336558-dkgdojxe/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336717-vkjo0p01/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336717-vkjo0p01/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336720-gw7etqt5/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336720-gw7etqt5/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336734-6hvf78rb/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336734-6hvf78rb/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336735-ylfpm4ul/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336735-ylfpm4ul/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336740-2j4kylui/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336740-2j4kylui/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336741-uvul9skf/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336741-uvul9skf/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336748-2cyuyxol/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336748-2cyuyxol/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336749-04htj2e5/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184336749-04htj2e5/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184354751-yhtkxzw3/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-1769184354751-yhtkxzw3/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-2-css-lint/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-2-css-lint/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-channel-moderation-test-crash/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-channel-moderation-test-crash/repro.mjs create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-moderation-ui/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-moderation-ui/playwright.config.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-moderation-ui/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-moderation-visibility/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-moderation-visibility/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-popover-viewport/README.md create mode 100644 bitvid-working-webtorrent/examples/reproducers/issue-popover-viewport/repro.spec.ts create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/18c960c07a1b14b0.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/227e8db93b7456c9.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/2388d33b32f5dd1f.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/2d038dd6ff3603e4.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/7d28c8f4e78c2a83.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/85fde36936a9aa86.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/8d1d49645b90d7ce.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/91f935834c393ec6.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/9542c7dff1386872.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/97b4273a8fe15fbe.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/9a68a21eb821d150.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/9e2b76583d4b46cf.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/a58dd9ee08c19eca.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/c1a8c5dbd064fa0b.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/c446637259d72e96.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/ca5e0379db09a508.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/d770efd177e76757.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/e4db9b78fcd4b2a5.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/e5ac4b49024a9315.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/f5565f667ef0bd28.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostr-schemas/f5dd74590c3975b4.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/nostrEventSchemas-circular-override.json create mode 100644 bitvid-working-webtorrent/examples/reproducers/playwright.config.ts create mode 100644 bitvid-working-webtorrent/index.html create mode 100644 bitvid-working-webtorrent/issues/todo-moderation-tests.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-cross-env.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-esbuild.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-nostr-tools.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-pixelmatch.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-prettier-plugin-tailwindcss.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-stylelint.md create mode 100644 bitvid-working-webtorrent/issues/upgrade-tailwindcss.md create mode 100644 bitvid-working-webtorrent/js/accessControl.js create mode 100644 bitvid-working-webtorrent/js/adminListStore.js create mode 100644 bitvid-working-webtorrent/js/app.js create mode 100644 bitvid-working-webtorrent/js/applicationContext.js create mode 100644 bitvid-working-webtorrent/js/attachments/attachmentUtils.js create mode 100644 bitvid-working-webtorrent/js/auth/signingAdapter.js create mode 100644 bitvid-working-webtorrent/js/bootstrap.js create mode 100644 bitvid-working-webtorrent/js/bufferPolyfill.js create mode 100644 bitvid-working-webtorrent/js/channelProfile.js create mode 100644 bitvid-working-webtorrent/js/config.js create mode 100644 bitvid-working-webtorrent/js/constants.js create mode 100644 bitvid-working-webtorrent/js/designSystem.js create mode 100644 bitvid-working-webtorrent/js/designSystem/dynamicStyles.js create mode 100644 bitvid-working-webtorrent/js/designSystem/metrics.js create mode 100644 bitvid-working-webtorrent/js/directMessagesStore.js create mode 100644 bitvid-working-webtorrent/js/disclaimer.js create mode 100644 bitvid-working-webtorrent/js/dmDecryptor.js create mode 100644 bitvid-working-webtorrent/js/docsView.js create mode 100644 bitvid-working-webtorrent/js/dom/cardObserver.js create mode 100644 bitvid-working-webtorrent/js/embed.js create mode 100644 bitvid-working-webtorrent/js/embedDiagnostics.js create mode 100644 bitvid-working-webtorrent/js/exploreView.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/engine.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/exploreScoring.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/index.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/kidsAudienceFilterStage.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/kidsScoring.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/sorters.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/sources.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/stages.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/utils.js create mode 100644 bitvid-working-webtorrent/js/feedEngine/watchHistoryFeed.js create mode 100644 bitvid-working-webtorrent/js/forYouView.js create mode 100644 bitvid-working-webtorrent/js/gridHealth.js create mode 100644 bitvid-working-webtorrent/js/hashChangeHandler.js create mode 100644 bitvid-working-webtorrent/js/hashView.js create mode 100644 bitvid-working-webtorrent/js/historyView.js create mode 100644 bitvid-working-webtorrent/js/index.js create mode 100644 bitvid-working-webtorrent/js/kidsView.js create mode 100644 bitvid-working-webtorrent/js/lists.js create mode 100644 bitvid-working-webtorrent/js/magnetShared.js create mode 100644 bitvid-working-webtorrent/js/magnetUtils.js create mode 100644 bitvid-working-webtorrent/js/magnets.js create mode 100644 bitvid-working-webtorrent/js/nostr/adapters/nip07Adapter.js create mode 100644 bitvid-working-webtorrent/js/nostr/adapters/nip46Adapter.js create mode 100644 bitvid-working-webtorrent/js/nostr/adapters/nsecAdapter.js create mode 100644 bitvid-working-webtorrent/js/nostr/cachePolicies.js create mode 100644 bitvid-working-webtorrent/js/nostr/client.js create mode 100644 bitvid-working-webtorrent/js/nostr/commentEvents.js create mode 100644 bitvid-working-webtorrent/js/nostr/countDiagnostics.js create mode 100644 bitvid-working-webtorrent/js/nostr/defaultClient.js create mode 100644 bitvid-working-webtorrent/js/nostr/dmDecryptDiagnostics.js create mode 100644 bitvid-working-webtorrent/js/nostr/dmDecryptWorker.js create mode 100644 bitvid-working-webtorrent/js/nostr/dmDecryptWorkerClient.js create mode 100644 bitvid-working-webtorrent/js/nostr/dmSignalEvents.js create mode 100644 bitvid-working-webtorrent/js/nostr/index.js create mode 100644 bitvid-working-webtorrent/js/nostr/maxListenerDiagnostics.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip04Worker.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip04WorkerClient.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip07Permissions.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip46Client.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip46Queue.js create mode 100644 bitvid-working-webtorrent/js/nostr/nip71.js create mode 100644 bitvid-working-webtorrent/js/nostr/publishHelpers.js create mode 100644 bitvid-working-webtorrent/js/nostr/reactionEvents.js create mode 100644 bitvid-working-webtorrent/js/nostr/sessionActor.js create mode 100644 bitvid-working-webtorrent/js/nostr/signRequestQueue.js create mode 100644 bitvid-working-webtorrent/js/nostr/signerHelpers.js create mode 100644 bitvid-working-webtorrent/js/nostr/syncMetadataStore.js create mode 100644 bitvid-working-webtorrent/js/nostr/toolkit.js create mode 100644 bitvid-working-webtorrent/js/nostr/viewEventBindings.js create mode 100644 bitvid-working-webtorrent/js/nostr/viewEvents.js create mode 100644 bitvid-working-webtorrent/js/nostr/watchHistory.js create mode 100644 bitvid-working-webtorrent/js/nostr/watchHistoryBindings.js create mode 100644 bitvid-working-webtorrent/js/nostrClientFacade.js create mode 100644 bitvid-working-webtorrent/js/nostrClientRegistry.js create mode 100644 bitvid-working-webtorrent/js/nostrEventSchemas.js create mode 100644 bitvid-working-webtorrent/js/nostrPublish.js create mode 100644 bitvid-working-webtorrent/js/nostrToolsBootstrap.js create mode 100644 bitvid-working-webtorrent/js/nostrViewEventsFacade.js create mode 100644 bitvid-working-webtorrent/js/nostrWatchHistoryFacade.js create mode 100644 bitvid-working-webtorrent/js/nwcSettings.js create mode 100644 bitvid-working-webtorrent/js/payments/lnurl.js create mode 100644 bitvid-working-webtorrent/js/payments/nwcClient.js create mode 100644 bitvid-working-webtorrent/js/payments/platformAddress.js create mode 100644 bitvid-working-webtorrent/js/payments/platformFee.js create mode 100644 bitvid-working-webtorrent/js/payments/zapMessages.js create mode 100644 bitvid-working-webtorrent/js/payments/zapNotifications.js create mode 100644 bitvid-working-webtorrent/js/payments/zapReceiptValidator.js create mode 100644 bitvid-working-webtorrent/js/payments/zapRequests.js create mode 100644 bitvid-working-webtorrent/js/payments/zapSharedState.js create mode 100644 bitvid-working-webtorrent/js/payments/zapSplit.js create mode 100644 bitvid-working-webtorrent/js/playbackUtils.js create mode 100644 bitvid-working-webtorrent/js/r2.js create mode 100644 bitvid-working-webtorrent/js/reactionCounter.js create mode 100644 bitvid-working-webtorrent/js/relayManager.js create mode 100644 bitvid-working-webtorrent/js/search/searchFilterMatchers.js create mode 100644 bitvid-working-webtorrent/js/search/searchFilterState.js create mode 100644 bitvid-working-webtorrent/js/search/searchFilters.js create mode 100644 bitvid-working-webtorrent/js/searchView.js create mode 100644 bitvid-working-webtorrent/js/services/attachmentService.js create mode 100644 bitvid-working-webtorrent/js/services/authProviders/generate.js create mode 100644 bitvid-working-webtorrent/js/services/authProviders/index.js create mode 100644 bitvid-working-webtorrent/js/services/authProviders/nip07.js create mode 100644 bitvid-working-webtorrent/js/services/authProviders/nip46.js create mode 100644 bitvid-working-webtorrent/js/services/authProviders/nsec.js create mode 100644 bitvid-working-webtorrent/js/services/authService.js create mode 100644 bitvid-working-webtorrent/js/services/commentThreadService.js create mode 100644 bitvid-working-webtorrent/js/services/discussionCountService.js create mode 100644 bitvid-working-webtorrent/js/services/dmNostrService.js create mode 100644 bitvid-working-webtorrent/js/services/dmNotificationManager.js create mode 100644 bitvid-working-webtorrent/js/services/exploreDataService.js create mode 100644 bitvid-working-webtorrent/js/services/hashtagPreferencesService.js create mode 100644 bitvid-working-webtorrent/js/services/linkPreviewService.js create mode 100644 bitvid-working-webtorrent/js/services/moderationActionController.js create mode 100644 bitvid-working-webtorrent/js/services/moderationDecorator.js create mode 100644 bitvid-working-webtorrent/js/services/moderationService.js create mode 100644 bitvid-working-webtorrent/js/services/nostrService.js create mode 100644 bitvid-working-webtorrent/js/services/nwcSettingsService.js create mode 100644 bitvid-working-webtorrent/js/services/playbackService.js create mode 100644 bitvid-working-webtorrent/js/services/r2Service.js create mode 100644 bitvid-working-webtorrent/js/services/relayHealthService.js create mode 100644 bitvid-working-webtorrent/js/services/s3Service.js create mode 100644 bitvid-working-webtorrent/js/services/s3UploadService.js create mode 100644 bitvid-working-webtorrent/js/services/storageService.js create mode 100644 bitvid-working-webtorrent/js/services/trustBootstrap.js create mode 100644 bitvid-working-webtorrent/js/services/videoNotePayload.js create mode 100644 bitvid-working-webtorrent/js/services/watchHistoryTelemetry.js create mode 100644 bitvid-working-webtorrent/js/sidebar.js create mode 100644 bitvid-working-webtorrent/js/sidebarLoading.js create mode 100644 bitvid-working-webtorrent/js/state/appState.js create mode 100644 bitvid-working-webtorrent/js/state/cache.js create mode 100644 bitvid-working-webtorrent/js/state/profileCache.js create mode 100644 bitvid-working-webtorrent/js/state/profileSettingsStore.js create mode 100644 bitvid-working-webtorrent/js/storage/dmDb.js create mode 100644 bitvid-working-webtorrent/js/storage/r2-mgmt.js create mode 100644 bitvid-working-webtorrent/js/storage/r2-s3.js create mode 100644 bitvid-working-webtorrent/js/storage/s3-client.js create mode 100644 bitvid-working-webtorrent/js/storage/s3-multipart.js create mode 100644 bitvid-working-webtorrent/js/storage/s3-url.js create mode 100644 bitvid-working-webtorrent/js/subscriptions.js create mode 100644 bitvid-working-webtorrent/js/themeController.js create mode 100644 bitvid-working-webtorrent/js/trackerConfig.js create mode 100644 bitvid-working-webtorrent/js/ui/ModalManager.js create mode 100644 bitvid-working-webtorrent/js/ui/ambientBackground.js create mode 100644 bitvid-working-webtorrent/js/ui/appChromeController.js create mode 100644 bitvid-working-webtorrent/js/ui/applicationBootstrap.js create mode 100644 bitvid-working-webtorrent/js/ui/components/DeleteModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/EditModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/EmbedPlayerModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/EmbedVideoModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/EventDetailsModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/FeedInfoPopover.js create mode 100644 bitvid-working-webtorrent/js/ui/components/RevertModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/SearchFilterModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/ShareNostrModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/SimilarContentCard.js create mode 100644 bitvid-working-webtorrent/js/ui/components/UploadModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/VideoCard.js create mode 100644 bitvid-working-webtorrent/js/ui/components/VideoModal.js create mode 100644 bitvid-working-webtorrent/js/ui/components/hashtagStripHelper.js create mode 100644 bitvid-working-webtorrent/js/ui/components/modalAccessibility.js create mode 100644 bitvid-working-webtorrent/js/ui/components/nip71FormManager.js create mode 100644 bitvid-working-webtorrent/js/ui/components/staticModalAccessibility.js create mode 100644 bitvid-working-webtorrent/js/ui/components/tagPillList.js create mode 100644 bitvid-working-webtorrent/js/ui/components/tagPreferenceMenu.js create mode 100644 bitvid-working-webtorrent/js/ui/components/video-modal/commentsController.js create mode 100644 bitvid-working-webtorrent/js/ui/components/video-modal/moderationController.js create mode 100644 bitvid-working-webtorrent/js/ui/components/video-modal/reactionsController.js create mode 100644 bitvid-working-webtorrent/js/ui/components/video-modal/similarContentController.js create mode 100644 bitvid-working-webtorrent/js/ui/components/video-modal/utils/commentAvatar.js create mode 100644 bitvid-working-webtorrent/js/ui/components/videoMenuRenderers.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/AppShell.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/Avatar.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/Composer.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/ContactRow.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/ConversationList.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/DMPrivacySettings.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/DayDivider.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/MessageBubble.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/MessageThread.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/NotificationCenter.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/ZapInterface.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/ZapReceiptList.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/index.js create mode 100644 bitvid-working-webtorrent/js/ui/dm/zapHelpers.js create mode 100644 bitvid-working-webtorrent/js/ui/editModalController.js create mode 100644 bitvid-working-webtorrent/js/ui/engagementController.js create mode 100644 bitvid-working-webtorrent/js/ui/initDeleteModal.js create mode 100644 bitvid-working-webtorrent/js/ui/initEditModal.js create mode 100644 bitvid-working-webtorrent/js/ui/initUploadModal.js create mode 100644 bitvid-working-webtorrent/js/ui/loginModalController.js create mode 100644 bitvid-working-webtorrent/js/ui/moderationCopy.js create mode 100644 bitvid-working-webtorrent/js/ui/moderationUiHelpers.js create mode 100644 bitvid-working-webtorrent/js/ui/moreMenuController.js create mode 100644 bitvid-working-webtorrent/js/ui/overlay/overlayRoot.js create mode 100644 bitvid-working-webtorrent/js/ui/overlay/popoverEngine.js create mode 100644 bitvid-working-webtorrent/js/ui/profileIdentityController.js create mode 100644 bitvid-working-webtorrent/js/ui/profileModalController.js create mode 100644 bitvid-working-webtorrent/js/ui/reactionController.js create mode 100644 bitvid-working-webtorrent/js/ui/revertModalController.js create mode 100644 bitvid-working-webtorrent/js/ui/shareNostrController.js create mode 100644 bitvid-working-webtorrent/js/ui/similarContentController.js create mode 100644 bitvid-working-webtorrent/js/ui/tagPreferenceMenuController.js create mode 100644 bitvid-working-webtorrent/js/ui/torrentStatusController.js create mode 100644 bitvid-working-webtorrent/js/ui/urlHealthController.js create mode 100644 bitvid-working-webtorrent/js/ui/videoListViewController.js create mode 100644 bitvid-working-webtorrent/js/ui/videoModalCommentController.js create mode 100644 bitvid-working-webtorrent/js/ui/views/VideoListView.js create mode 100644 bitvid-working-webtorrent/js/ui/watchHistoryController.js create mode 100644 bitvid-working-webtorrent/js/ui/zapController.js create mode 100644 bitvid-working-webtorrent/js/urlHealthObserver.js create mode 100644 bitvid-working-webtorrent/js/userBlocks.js create mode 100644 bitvid-working-webtorrent/js/utils/cardSourceVisibility.js create mode 100644 bitvid-working-webtorrent/js/utils/domUtils.js create mode 100644 bitvid-working-webtorrent/js/utils/formatters.js create mode 100644 bitvid-working-webtorrent/js/utils/hashtagNormalization.js create mode 100644 bitvid-working-webtorrent/js/utils/hex.js create mode 100644 bitvid-working-webtorrent/js/utils/linkPreviewSettings.js create mode 100644 bitvid-working-webtorrent/js/utils/logger.js create mode 100644 bitvid-working-webtorrent/js/utils/lruCache.js create mode 100644 bitvid-working-webtorrent/js/utils/magnetValidators.js create mode 100644 bitvid-working-webtorrent/js/utils/mediaLoader.js create mode 100644 bitvid-working-webtorrent/js/utils/pointer.js create mode 100644 bitvid-working-webtorrent/js/utils/profileBatchFetcher.js create mode 100644 bitvid-working-webtorrent/js/utils/profileMedia.js create mode 100644 bitvid-working-webtorrent/js/utils/qrcode.js create mode 100644 bitvid-working-webtorrent/js/utils/safeDecode.js create mode 100644 bitvid-working-webtorrent/js/utils/serviceWorkerFallbackMessages.js create mode 100644 bitvid-working-webtorrent/js/utils/storage.js create mode 100644 bitvid-working-webtorrent/js/utils/storagePointer.js create mode 100644 bitvid-working-webtorrent/js/utils/torrentHash.js create mode 100644 bitvid-working-webtorrent/js/utils/videoDeduper.js create mode 100644 bitvid-working-webtorrent/js/utils/videoPointer.js create mode 100644 bitvid-working-webtorrent/js/utils/videoTags.js create mode 100644 bitvid-working-webtorrent/js/utils/videoTimestamps.js create mode 100644 bitvid-working-webtorrent/js/videoEventUtils.js create mode 100644 bitvid-working-webtorrent/js/viewCounter.js create mode 100644 bitvid-working-webtorrent/js/viewManager.js create mode 100644 bitvid-working-webtorrent/js/watchHistoryDebug.js create mode 100644 bitvid-working-webtorrent/js/watchHistoryService.js create mode 100644 bitvid-working-webtorrent/js/webtorrent-global.js create mode 100644 bitvid-working-webtorrent/js/webtorrent.js create mode 100644 bitvid-working-webtorrent/js/webtorrent.min.js create mode 100644 bitvid-working-webtorrent/js/webtorrent.min.js.map create mode 100644 bitvid-working-webtorrent/netlify.toml create mode 100644 bitvid-working-webtorrent/package-lock.json create mode 100644 bitvid-working-webtorrent/package.json create mode 100644 bitvid-working-webtorrent/playwright.config.ts create mode 100644 bitvid-working-webtorrent/postcss.config.cjs create mode 100644 bitvid-working-webtorrent/prettier.config.cjs create mode 100644 bitvid-working-webtorrent/releases/draft-20260124.md create mode 100644 bitvid-working-webtorrent/scripts/agent/debug_frontend.py create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-dm-decryptor.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-dm.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-dmDecryptor.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-lib.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-magnet-utils.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-magnet.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-magnetUtils.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-nostr-schemas.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-nostrEventSchemas.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-schemas.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-setup.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-shared.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/fuzz-utils.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/interop-test.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/load-test-relay.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/load-test.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/mocks/watchHistory.js create mode 100644 bitvid-working-webtorrent/scripts/agent/review-open-prs.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/setup-test-env.js create mode 100644 bitvid-working-webtorrent/scripts/agent/simple-relay.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/smoke-test.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/telemetry-aggregator.mjs create mode 100644 bitvid-working-webtorrent/scripts/agent/test-nip07-refactor.mjs create mode 100755 bitvid-working-webtorrent/scripts/agent/validate-events.test.mjs create mode 100644 bitvid-working-webtorrent/scripts/automated-pr-review.mjs create mode 100755 bitvid-working-webtorrent/scripts/build-beacon.mjs create mode 100644 bitvid-working-webtorrent/scripts/build-dist.mjs create mode 100755 bitvid-working-webtorrent/scripts/cancel-all-ci-runs.sh create mode 100755 bitvid-working-webtorrent/scripts/check-design-tokens.mjs create mode 100755 bitvid-working-webtorrent/scripts/check-hex.js create mode 100644 bitvid-working-webtorrent/scripts/check-inline-styles.mjs create mode 100755 bitvid-working-webtorrent/scripts/check-tailwind-colors.mjs create mode 100644 bitvid-working-webtorrent/scripts/daily-design-system-audit.mjs create mode 100755 bitvid-working-webtorrent/scripts/run-playwright-docker.sh create mode 100755 bitvid-working-webtorrent/scripts/run-targeted-tests.mjs create mode 100755 bitvid-working-webtorrent/scripts/run-unit-tests.mjs create mode 100755 bitvid-working-webtorrent/scripts/setup-pre-commit.sh create mode 100755 bitvid-working-webtorrent/scripts/show-artifacts.sh create mode 100644 bitvid-working-webtorrent/scripts/vendor/floating-ui-dom-entry.mjs create mode 100644 bitvid-working-webtorrent/site.webmanifest create mode 100644 bitvid-working-webtorrent/stylelint.config.cjs create mode 100644 bitvid-working-webtorrent/sw.min.js create mode 100644 bitvid-working-webtorrent/tailwind.config.cjs create mode 100644 bitvid-working-webtorrent/tests/admin-list-store.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app-batch-fetch-profiles.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app-state.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/channel-profile-moderation.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/hash-change-handler.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/hydrate-sidebar-navigation.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/is-user-logged-in.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/moderation-overrides.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/moderation-settings-refresh.test.mjs create mode 100644 bitvid-working-webtorrent/tests/app/similar-content.test.mjs create mode 100644 bitvid-working-webtorrent/tests/auth-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/comment-event-builder.test.mjs create mode 100644 bitvid-working-webtorrent/tests/comment-thread-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/design-system-metrics.test.mjs create mode 100644 bitvid-working-webtorrent/tests/discussion-count-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/dm-db.test.mjs create mode 100644 bitvid-working-webtorrent/tests/dm-decryptor.test.mjs create mode 100644 bitvid-working-webtorrent/tests/dm-normalization.test.mjs create mode 100644 bitvid-working-webtorrent/tests/e2e/helpers/uiTestUtils.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/popover.spec.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/repro_issue.spec.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/toast-service.spec.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/ui-modals.spec.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/video-modal-share-bug.spec.ts create mode 100644 bitvid-working-webtorrent/tests/e2e/webseed-playback.spec.ts create mode 100644 bitvid-working-webtorrent/tests/edit-modal-submit-state.test.mjs create mode 100644 bitvid-working-webtorrent/tests/embed_playback_check.spec.mjs create mode 100644 bitvid-working-webtorrent/tests/event-schemas.test.mjs create mode 100644 bitvid-working-webtorrent/tests/feed-engine.test.mjs create mode 100644 bitvid-working-webtorrent/tests/feed-engine/explore-diversity.test.mjs create mode 100644 bitvid-working-webtorrent/tests/feed-engine/explore-scorer.test.mjs create mode 100644 bitvid-working-webtorrent/tests/feed-engine/tag-preference-filter.test.mjs create mode 100644 bitvid-working-webtorrent/tests/hashtag-preferences.test.mjs create mode 100644 bitvid-working-webtorrent/tests/helpers/moderation-test-helpers.mjs create mode 100644 bitvid-working-webtorrent/tests/login-modal-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/magnet-utils.test.mjs create mode 100644 bitvid-working-webtorrent/tests/media-loader.test.mjs create mode 100644 bitvid-working-webtorrent/tests/modal-accessibility.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation-stage.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/hide-thresholds.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/mocks/bootstrap-trust-seeds-loader.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/submit-report.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/trust-seeds.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/trusted-mute-lists.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/trusted-report-count.test.mjs create mode 100644 bitvid-working-webtorrent/tests/moderation/video-card.test.mjs create mode 100644 bitvid-working-webtorrent/tests/more-menu-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nip71-base-event-tags.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nip71-builder.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nip71-form-manager.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-boost-actions.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-count-fallback.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-delete-flow.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-ephemeral-dm-tester.html create mode 100644 bitvid-working-webtorrent/tests/nostr-login-permissions.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-nip46-queue.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-private-key-signer.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-publish-rejection.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-rebroadcast-guard.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-send-direct-message.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-service-access-control.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-signer-race.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-view-event-bindings.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr-view-events.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/adapters.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/cachePolicies.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/client.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/comment-events.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/dm-direct-message-flow.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/dmDecryptorPreference.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/dmSignalEvents.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/edit-video-dtag.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/integration-remote-flow.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/nip07Permissions.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/nip46Client.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/nip71.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/nostrClientFacade.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/nostrClientRegistry.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/publishHelpers.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/reaction-events.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/revert-video-dtag.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/session-actor.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/sessionActor.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/sessionActor.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/sign-request-queue.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/signers.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/syncMetadataStore.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/toolkit.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nostr/watchHistory.test.js create mode 100644 bitvid-working-webtorrent/tests/nostr/watchHistoryBindings.test.js create mode 100644 bitvid-working-webtorrent/tests/nwc-client.test.mjs create mode 100644 bitvid-working-webtorrent/tests/nwc-settings-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/position-floating-panel.test.mjs create mode 100644 bitvid-working-webtorrent/tests/profile-modal-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/reaction-event-builder.test.mjs create mode 100644 bitvid-working-webtorrent/tests/revert-modal-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/safe-decode.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/attachmentService.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/link-preview-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/moderation-action-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/nostr-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/playbackService.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/playbackService_forcedSource.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/playbackService_order.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/r2Service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/relay-health-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/services/s3Service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/share-event-builder.test.mjs create mode 100644 bitvid-working-webtorrent/tests/shareNostrController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/state/appState.test.mjs create mode 100644 bitvid-working-webtorrent/tests/state/cache-saved-profiles.test.mjs create mode 100644 bitvid-working-webtorrent/tests/state/cache.test.mjs create mode 100644 bitvid-working-webtorrent/tests/state/profile-cache.test.mjs create mode 100644 bitvid-working-webtorrent/tests/state/profile-settings-store.test.mjs create mode 100644 bitvid-working-webtorrent/tests/storage-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/subscriptions-feed.test.mjs create mode 100644 bitvid-working-webtorrent/tests/subscriptions-manager.test.mjs create mode 100644 bitvid-working-webtorrent/tests/test-helpers/setup-localstorage.mjs create mode 100644 bitvid-working-webtorrent/tests/test-helpers/wait-for.mjs create mode 100644 bitvid-working-webtorrent/tests/test-setup.mjs create mode 100644 bitvid-working-webtorrent/tests/torrent/service-worker-fallback-message.test.mjs create mode 100644 bitvid-working-webtorrent/tests/torrent/style-helpers.test.mjs create mode 100644 bitvid-working-webtorrent/tests/torrent/toast-service.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/app-chrome-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/engagement-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/hashtag-strip-helper-bounce.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/helpers/jsdom-test-helpers.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/mocks/floating-ui-test-loader.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/popoverEngine.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/profile-modal-moderation-settings.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/reactionController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/similar-content-card.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/similarContentController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/storageService.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/tag-pill-list.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/tag-preference-menu.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/tagPreferenceMenuController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/torrentStatusController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/uploadModal-integration.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/uploadModal-reset.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/url-health-controller.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/video-list-view-popular-tags.test.mjs create mode 100644 bitvid-working-webtorrent/tests/ui/video-list-view-sorting.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/app_guard_logic.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/editModalController.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/embed-accent.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/embed_player_modal.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/hashChangeHandler.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/searchFilters.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/services/moderationDecorator.test.mjs create mode 100644 bitvid-working-webtorrent/tests/unit/services/r2Service.storage-config.test.mjs create mode 100644 bitvid-working-webtorrent/tests/user-blocks.test.mjs create mode 100644 bitvid-working-webtorrent/tests/utils/video-deduper.test.mjs create mode 100644 bitvid-working-webtorrent/tests/utils/video-tags.test.mjs create mode 100644 bitvid-working-webtorrent/tests/validate-config.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-card-source-visibility.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-accessibility.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-comments.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-controllers.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-moderation.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-tags.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-modal-zap.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-note-payload.test.mjs create mode 100644 bitvid-working-webtorrent/tests/video-schema-and-conversion.test.mjs create mode 100644 bitvid-working-webtorrent/tests/view-counter.test.mjs create mode 100644 bitvid-working-webtorrent/tests/visual/baseline-store.ts create mode 100644 bitvid-working-webtorrent/tests/visual/baselines.json create mode 100644 bitvid-working-webtorrent/tests/visual/embed-layout.spec.ts create mode 100644 bitvid-working-webtorrent/tests/visual/kitchen-sink.spec.ts create mode 100644 bitvid-working-webtorrent/tests/visual/moderation.spec.ts create mode 100644 bitvid-working-webtorrent/tests/visual/overlay-layers.spec.ts create mode 100644 bitvid-working-webtorrent/tests/visual/reduced-motion.spec.ts create mode 100644 bitvid-working-webtorrent/tests/watch-history-feed.test.mjs create mode 100644 bitvid-working-webtorrent/tests/watch-history.test.mjs create mode 100644 bitvid-working-webtorrent/tests/watchHistory/watch-history-telemetry.test.mjs create mode 100644 bitvid-working-webtorrent/tests/zap-shared-state.test.mjs create mode 100644 bitvid-working-webtorrent/tests/zap-split.test.mjs create mode 100644 bitvid-working-webtorrent/torrent/app.js create mode 100644 bitvid-working-webtorrent/torrent/beacon.html create mode 100644 bitvid-working-webtorrent/torrent/docs/ui-grid-ng-notify-audit.md create mode 100644 bitvid-working-webtorrent/torrent/favicon.ico create mode 100644 bitvid-working-webtorrent/torrent/js/utils/logger.js create mode 100644 bitvid-working-webtorrent/torrent/src/beacon-vendor.js create mode 100644 bitvid-working-webtorrent/torrent/ui/styleHelpers.js create mode 100644 bitvid-working-webtorrent/torrent/ui/toastService.js create mode 100644 bitvid-working-webtorrent/torrent/ui/torrentTable.js create mode 100644 bitvid-working-webtorrent/vendor/crypto-helpers.LICENSE create mode 100644 bitvid-working-webtorrent/vendor/crypto-helpers.bundle.min.js create mode 100644 bitvid-working-webtorrent/vendor/crypto-helpers.entry.js create mode 100644 bitvid-working-webtorrent/vendor/floating-ui.LICENSE create mode 100644 bitvid-working-webtorrent/vendor/floating-ui.dom.bundle.min.js create mode 100644 bitvid-working-webtorrent/vendor/highlight.min.js create mode 100644 bitvid-working-webtorrent/vendor/marked.min.js create mode 100644 bitvid-working-webtorrent/vendor/nostr-tools.LICENSE create mode 100644 bitvid-working-webtorrent/vendor/nostr-tools.bundle.min.js create mode 100644 bitvid-working-webtorrent/views/channel-profile.html create mode 100644 bitvid-working-webtorrent/views/dev/popover-demo.html create mode 100644 bitvid-working-webtorrent/views/docs.html create mode 100644 bitvid-working-webtorrent/views/explore.html create mode 100644 bitvid-working-webtorrent/views/for-you.html create mode 100644 bitvid-working-webtorrent/views/history.html create mode 100644 bitvid-working-webtorrent/views/kids.html create mode 100644 bitvid-working-webtorrent/views/most-recent-videos.html create mode 100644 bitvid-working-webtorrent/views/search.html create mode 100644 bitvid-working-webtorrent/views/subscriptions.html diff --git a/bitvid-working-webtorrent/.devcontainer/devcontainer.json b/bitvid-working-webtorrent/.devcontainer/devcontainer.json new file mode 100644 index 00000000..007b07f4 --- /dev/null +++ b/bitvid-working-webtorrent/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +{ + "name": "bitvid", + "image": "mcr.microsoft.com/devcontainers/javascript-node:22", + "features": { + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + "postCreateCommand": "npm ci && npm run build && npx playwright install", + "customizations": { + "vscode": { + "extensions": [ + "esbenp.prettier-vscode", + "bradlc.vscode-tailwindcss", + "stylelint.vscode-stylelint" + ] + } + } +} diff --git a/bitvid-working-webtorrent/.dockerignore b/bitvid-working-webtorrent/.dockerignore new file mode 100644 index 00000000..b5cc6ace --- /dev/null +++ b/bitvid-working-webtorrent/.dockerignore @@ -0,0 +1,7 @@ +node_modules +.git +.gitignore +artifacts +Dockerfile +scripts +test-results diff --git a/bitvid-working-webtorrent/.gitattributes b/bitvid-working-webtorrent/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/bitvid-working-webtorrent/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/bitvid-working-webtorrent/.github/workflows/agent-pr-review.yml b/bitvid-working-webtorrent/.github/workflows/agent-pr-review.yml new file mode 100644 index 00000000..b010a79b --- /dev/null +++ b/bitvid-working-webtorrent/.github/workflows/agent-pr-review.yml @@ -0,0 +1,52 @@ +name: Automated Agent PR Review + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: write + pull-requests: write + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + agent-review: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + fetch-depth: 0 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'npm' + + - name: Add upstream remote + run: | + git remote add upstream https://github.com/PR0M3TH3AN/bitvid.git || true + git fetch upstream + + - name: Verify upstream branch and diff + run: | + if git ls-remote --heads upstream "${{ github.base_ref }}" | grep "${{ github.base_ref }}" > /dev/null; then + git fetch upstream "${{ github.base_ref }}" + git diff --name-only upstream/${{ github.base_ref }}...HEAD + else + echo "::warning::Branch upstream/${{ github.base_ref }} not found. Skipping diff." + fi + + - name: Run Agent Review + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_BASE_REF: ${{ github.base_ref }} + GITHUB_BASE_REPO_URL: ${{ github.event.pull_request.base.repo.clone_url }} + run: node scripts/automated-pr-review.mjs diff --git a/bitvid-working-webtorrent/.github/workflows/ci.yml b/bitvid-working-webtorrent/.github/workflows/ci.yml new file mode 100644 index 00000000..61f888f9 --- /dev/null +++ b/bitvid-working-webtorrent/.github/workflows/ci.yml @@ -0,0 +1,247 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 45 + strategy: + matrix: + node-version: [20] + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache npm directory + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node-version }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-npm- + + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-modules- + + - name: Install dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Install ripgrep + run: sudo apt-get update && sudo apt-get install -y ripgrep + + - name: Run lint suite + run: npm run lint + + - name: Build assets + run: npm run build + + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + + - name: Run visual regression tests + id: visual + run: npm run test:visual + continue-on-error: true + + - name: Upload Playwright artifacts + if: steps.visual.outcome == 'failure' + uses: actions/upload-artifact@v4 + with: + name: playwright-visual-diffs + path: | + playwright-report + test-results + if-no-files-found: ignore + + - name: Fail if visual regressions detected + if: steps.visual.outcome == 'failure' + run: exit 1 + + unit-tests: + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + node-version: [20] + shard: [1, 2, 3] + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache npm directory + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node-version }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-npm- + + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-modules- + + - name: Install dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Run unit tests (shard ${{ matrix.shard }}/3) + env: + UNIT_TEST_TIMEOUT_MS: 300000 + run: npm run test:unit:shard${{ matrix.shard }} + + dm-unit-tests: + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + node-version: [20] + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache npm directory + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node-version }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-npm- + + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-modules- + + - name: Install dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Run DM unit tests + run: npm run test:dm:unit + + dm-integration-tests: + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + matrix: + node-version: [20] + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache npm directory + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node-version }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-npm- + + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-modules- + + - name: Install dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Run DM integration tests + run: npm run test:dm:integration + + e2e-headless: + runs-on: ubuntu-latest + timeout-minutes: 45 + strategy: + matrix: + node-version: [20] + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache npm directory + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node-version }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-npm- + + - name: Cache node_modules + id: node-modules-cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node-version }}-modules- + + - name: Install dependencies + if: steps.node-modules-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + + - name: Run headless E2E tests + run: npm run test:e2e diff --git a/bitvid-working-webtorrent/.github/workflows/cleanup-stuck-runs.yml b/bitvid-working-webtorrent/.github/workflows/cleanup-stuck-runs.yml new file mode 100644 index 00000000..3da93cd9 --- /dev/null +++ b/bitvid-working-webtorrent/.github/workflows/cleanup-stuck-runs.yml @@ -0,0 +1,72 @@ +name: Cleanup stuck workflow runs + +on: + schedule: + - cron: '*/30 * * * *' + workflow_dispatch: + +permissions: + actions: write + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - name: Cancel stuck workflow runs + uses: actions/github-script@v7 + env: + STALE_THRESHOLD_HOURS: '2' + with: + script: | + const thresholdHours = Number(process.env.STALE_THRESHOLD_HOURS || 2); + const thresholdMs = thresholdHours * 60 * 60 * 1000; + const now = Date.now(); + + const statuses = ['queued', 'in_progress']; + const owner = context.repo.owner; + const repo = context.repo.repo; + const staleRuns = []; + + for (const status of statuses) { + const runs = await github.paginate(github.rest.actions.listWorkflowRunsForRepo, { + owner, + repo, + status, + per_page: 100, + }); + + for (const run of runs) { + const createdAt = Date.parse(run.created_at); + if (Number.isNaN(createdAt)) { + core.warning(`Skipping run ${run.id} (${run.name}) due to invalid created_at.`); + continue; + } + + const ageMs = now - createdAt; + if (ageMs > thresholdMs) { + staleRuns.push({ + id: run.id, + name: run.name, + status: run.status, + created_at: run.created_at, + html_url: run.html_url, + }); + } + } + } + + if (staleRuns.length === 0) { + core.info(`No runs older than ${thresholdHours} hours found in queued/in_progress.`); + return; + } + + core.info(`Found ${staleRuns.length} stale runs older than ${thresholdHours} hours.`); + + for (const run of staleRuns) { + core.info(`Canceling run ${run.id} (${run.name}) status=${run.status} created_at=${run.created_at} url=${run.html_url}`); + await github.request('POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel', { + owner, + repo, + run_id: run.id, + }); + } diff --git a/bitvid-working-webtorrent/.github/workflows/daily-design-system-audit.yml b/bitvid-working-webtorrent/.github/workflows/daily-design-system-audit.yml new file mode 100644 index 00000000..c16cffa3 --- /dev/null +++ b/bitvid-working-webtorrent/.github/workflows/daily-design-system-audit.yml @@ -0,0 +1,75 @@ +name: Daily Design System Audit + +on: + schedule: + - cron: '0 9 * * *' # Run daily at 09:00 UTC + workflow_dispatch: + +permissions: + contents: write + issues: write + pull-requests: write + +jobs: + audit: + name: Audit Design System + runs-on: ubuntu-latest + steps: + - name: Checkout unstable branch + uses: actions/checkout@v4 + with: + ref: unstable + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Verify gh CLI availability + run: gh --version + + - name: Install dependencies + run: npm ci + + - name: Run Design System Audit (with fix) + id: audit + run: node scripts/daily-design-system-audit.mjs --fix + continue-on-error: true + + - name: Check for changes + id: git-check + run: | + if [ -n "$(git status --porcelain)" ]; then + echo "changes=true" >> $GITHUB_OUTPUT + else + echo "changes=false" >> $GITHUB_OUTPUT + fi + + - name: Create Pull Request + if: steps.git-check.outputs.changes == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b "ds-audit/$(date +%Y-%m-%d)" + git add . + git commit -m "chore: Apply daily design system remediation" + git push origin HEAD + gh pr create \ + --title "Daily Design System Remediation" \ + --body-file REMEDIATION_REPORT.md \ + --base unstable \ + --head "ds-audit/$(date +%Y-%m-%d)" \ + --label "design-system" + + - name: Create Issue on Failure (No Fixes) + if: steps.audit.outcome == 'failure' && steps.git-check.outputs.changes == 'false' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh issue create \ + --title "⚠� Design System Violations Detected" \ + --body-file REMEDIATION_REPORT.md \ + --label "design-system" diff --git a/bitvid-working-webtorrent/.gitignore b/bitvid-working-webtorrent/.gitignore new file mode 100644 index 00000000..f0d7d671 --- /dev/null +++ b/bitvid-working-webtorrent/.gitignore @@ -0,0 +1,12 @@ +saved_config.yaml +repo-context.txt +node_modules/ +src/webtorrent-docs/ +playwright-report/ +test-results/ +tests/visual/__snapshots__/ +artifacts/ +css/tailwind.generated.css +ai/reports/ +*.log +coverage/ diff --git a/bitvid-working-webtorrent/.vscode/settings.json b/bitvid-working-webtorrent/.vscode/settings.json new file mode 100644 index 00000000..d2ac1bee --- /dev/null +++ b/bitvid-working-webtorrent/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.root": "./src" +} diff --git a/bitvid-working-webtorrent/AGENTS.md b/bitvid-working-webtorrent/AGENTS.md new file mode 100644 index 00000000..c55a1d28 --- /dev/null +++ b/bitvid-working-webtorrent/AGENTS.md @@ -0,0 +1,202 @@ +# bitvid — AI Agent Guide + +This guide tells AI agents how to keep bitvid aligned with the current product direction. Follow it whenever you touch code, content, or documentation inside this repository. + +**Important:** Before starting any development or debugging, please review `KNOWN_ISSUES.md`. This file documents pre-existing test failures, environmental quirks, and architectural limitations that you should be aware of to avoid unnecessary investigation. + +For any nostr related work, please review the nip documentation located in /docs/nips before begining work. + +**Comment publishing guardrail:** Session actors are limited to passive telemetry (e.g., view counters). Always require the logged-in Nostr signer when sending video comments through [`js/nostr/commentEvents.js`](js/nostr/commentEvents.js). See the reminder in [`docs/nostr-event-schemas.md`](docs/nostr-event-schemas.md#event-catalogue) for context. + +--- + +## 1. Release Channels: Main vs. Unstable + +* **Main** is the production track. Anything merged here must preserve today’s UX and magnet safety guarantees. Rollbacks should be painless: keep commits atomic, avoid destructive migrations, and leave feature flags in a known-good default (`false` unless product explicitly flips them). +* **Unstable** is our experimentation lane. Gate risky behavior behind feature flags defined in `js/constants.js` and document the toggle/rollback plan in PR descriptions. +* **Emergency response:** If a change regresses URL-first playback or breaks magnet parsing, revert immediately, call this out in the PR, and annotate the AGENTS.md changelog with remediation tips. **Note:** These regressions usually surface in dev logs and tests around playback/magnet helpers—reference them when triaging so future agents don’t repeat the mistake. + +### Browser logging policy + +* Route every browser log through `js/utils/logger.js`. Do **not** call `console.*` directly. +* Use `logger.dev.*` for diagnostics that should disappear in production (flagged by `IS_DEV_MODE`/`isDevMode`). Use `logger.user.*` for operator-facing warnings and errors that must reach production consoles. +* Before promoting a build, flip `IS_DEV_MODE` in `config/instance-config.js` to match the target environment so `window.__BITVID_DEV_MODE__` and the logger channels behave correctly. +* Review and follow [`docs/logging.md`](docs/logging.md) whenever you add new logging or touch inline scripts. + +## 2. Mission: URL‑First Playback with WebTorrent Fallback + +* **Goal:** Always deliver smooth playback while keeping hosting costs low. +* **Primary transport:** A hosted video URL (MP4/WebM/HLS/DASH) that the `