+
+
+
+
diff --git a/js/embed.js b/js/embed.js
index 89d94309..945f3170 100644
--- a/js/embed.js
+++ b/js/embed.js
@@ -396,6 +396,11 @@ const startEmbed = async () => {
forcedSource: playback || undefined,
trigger: videoEl,
});
+
+ if (app.videoModal && typeof app.videoModal.setShareUrl === "function") {
+ const shareUrl = app.buildShareUrlFromEventId(video.id);
+ app.videoModal.setShareUrl(shareUrl);
+ }
} catch (error) {
devLogger.warn("[embed] Playback failed:", error);
setStatus("Playback failed. Please try again.", "error");
diff --git a/js/ui/components/EmbedPlayerModal.js b/js/ui/components/EmbedPlayerModal.js
index 291d3fc1..ace36178 100644
--- a/js/ui/components/EmbedPlayerModal.js
+++ b/js/ui/components/EmbedPlayerModal.js
@@ -7,10 +7,16 @@ export class EmbedPlayerModal {
this.status = null;
this.eventTarget = new EventTarget();
+ // Overlay elements
+ this.watchButton = null;
+ this.viewCountEl = null;
+ this.likeCountEl = null;
+ this.dislikeCountEl = null;
+
this.toneClasses = {
- default: "text-muted",
- error: "text-danger",
- success: "text-success",
+ default: "text-white/90",
+ error: "text-red-400",
+ success: "text-green-400",
};
}
@@ -19,6 +25,11 @@ export class EmbedPlayerModal {
this.root = this.document.getElementById("embedRoot");
this.video = this.document.getElementById("embedVideo");
this.status = this.document.getElementById("embedStatus");
+
+ this.watchButton = this.document.getElementById("embedWatchButton");
+ this.viewCountEl = this.document.getElementById("embedViewCount");
+ this.likeCountEl = this.document.getElementById("embedLikeCount");
+ this.dislikeCountEl = this.document.getElementById("embedDislikeCount");
}
return Promise.resolve(this.root);
}
@@ -39,7 +50,7 @@ export class EmbedPlayerModal {
}
resetStats() {
- // no-op for embed view
+ // no-op for embed view (torrent stats)
}
setStatus(message, tone = "default") {
@@ -50,15 +61,16 @@ export class EmbedPlayerModal {
const normalizedMessage = typeof message === "string" ? message.trim() : "";
this.status.textContent = normalizedMessage;
- Object.values(this.toneClasses).forEach((className) => {
- if (className) {
- this.status.classList.remove(className);
- }
- });
+ // Reset classes
+ this.status.className = "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-md bg-black/60 px-3 py-1 text-sm backdrop-blur-sm";
const toneClass = this.toneClasses[tone] || this.toneClasses.default;
- if (toneClass) {
- this.status.classList.add(toneClass);
+ this.status.classList.add(toneClass);
+
+ if (!normalizedMessage) {
+ this.status.hidden = true;
+ } else {
+ this.status.hidden = false;
}
}
@@ -67,11 +79,12 @@ export class EmbedPlayerModal {
}
applyLoadingPoster() {
- this.setStatus("Preparing playback…", "default");
+ this.setStatus("Loading…", "default");
}
forceRemovePoster() {
- return false;
+ this.setStatus("", "default");
+ return true;
}
clearPosterCleanup() {}
@@ -103,4 +116,99 @@ export class EmbedPlayerModal {
dispatch(type, detail) {
return this.eventTarget.dispatchEvent(new CustomEvent(type, { detail }));
}
+
+ // --- New Methods for Overlay ---
+
+ setShareUrl(url) {
+ if (this.watchButton && url) {
+ this.watchButton.href = url;
+ }
+ }
+
+ getViewCountElement() {
+ return this.viewCountEl;
+ }
+
+ updateViewCountLabel(text) {
+ if (!this.viewCountEl) {
+ return;
+ }
+ const label = this.viewCountEl.querySelector("[data-view-count-text]");
+ if (label) {
+ // App passes "123 views" or "– views". We strip "views" to keep it compact if desired,
+ // but the prompt asked for "view count" so maybe "1.2k views" is fine.
+ // Given the compact design (icon + text), just number is often cleaner, but let's stick to what app sends or simple parse.
+ // Actually app sends formatted string.
+ // Let's try to extract just the number/text if possible, or just render what is sent.
+ // "1.2k views" -> "1.2k"
+ const parts = (text || "").split(' ');
+ const compactText = parts[0] || "–";
+ label.textContent = compactText;
+ }
+ }
+
+ setViewCountPointer(pointerKey) {
+ if (this.viewCountEl && pointerKey) {
+ this.viewCountEl.dataset.pointerKey = pointerKey;
+ }
+ }
+
+ formatCount(num) {
+ const val = Number.isFinite(num) ? num : 0;
+ if (val === 0) return "0";
+
+ // Simple compact formatter
+ if (typeof Intl !== "undefined" && Intl.NumberFormat) {
+ try {
+ return new Intl.NumberFormat('en-US', {
+ notation: "compact",
+ maximumFractionDigits: 1
+ }).format(val);
+ } catch (e) {
+ // fallback
+ }
+ }
+
+ if (val >= 1000000) return (val / 1000000).toFixed(1) + 'M';
+ if (val >= 1000) return (val / 1000).toFixed(1) + 'k';
+ return String(val);
+ }
+
+ updateReactionSummary({ total, counts, userReaction } = {}) {
+ const likeCount = counts && typeof counts['+'] === 'number' ? counts['+'] : 0;
+ const dislikeCount = counts && typeof counts['-'] === 'number' ? counts['-'] : 0;
+
+ if (this.likeCountEl) {
+ const label = this.likeCountEl.querySelector("[data-count]");
+ if (label) label.textContent = this.formatCount(likeCount);
+
+ // Highlight if user liked? (Read-only for now but good visual feedback if we had auth state)
+ if (userReaction === '+') {
+ this.likeCountEl.classList.add("text-primary");
+ this.likeCountEl.classList.remove("text-white/80");
+ } else {
+ this.likeCountEl.classList.remove("text-primary");
+ this.likeCountEl.classList.add("text-white/80");
+ }
+ }
+
+ if (this.dislikeCountEl) {
+ const label = this.dislikeCountEl.querySelector("[data-count]");
+ if (label) label.textContent = this.formatCount(dislikeCount);
+
+ if (userReaction === '-') {
+ this.dislikeCountEl.classList.add("text-red-400");
+ this.dislikeCountEl.classList.remove("text-white/80");
+ } else {
+ this.dislikeCountEl.classList.remove("text-red-400");
+ this.dislikeCountEl.classList.add("text-white/80");
+ }
+ }
+ }
+
+ setUserReaction(reaction) {
+ // We don't have the full counts here to update UI fully,
+ // but updateReactionSummary will be called by controller with full data.
+ // So we can ignore this or just toggle classes optimistically.
+ }
}
diff --git a/serve.log b/serve.log
new file mode 100644
index 00000000..8c0e8577
--- /dev/null
+++ b/serve.log
@@ -0,0 +1,452 @@
+npm warn exec The following package was not found and will be installed: serve@14.2.5
+ INFO Accepting connections at http://localhost:3000
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /embed.html
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 301 in 387 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /embed
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 15 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /css/tailwind.generated.css?v=2024.11.09
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /assets/svg/bitvid-logo-light-mode.svg
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 11 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostrToolsBootstrap.js?v=2024.11.09
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/embed.js?v=2024.11.09
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/utils/logger.js
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/app.js
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostrClientFacade.js
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostr/index.js
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/utils/videoPointer.js
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostrToolsBootstrap.js
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 10 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 13 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 22 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 20 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 22 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 34 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostr/defaultClient.js
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:03 PM ::1 GET /js/nostrClientRegistry.js
+ HTTP 1/24/2026 10:39:03 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/client.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/nip07Permissions.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/nip71.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/watchHistory.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 12 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/watchHistoryBindings.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/viewEvents.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/reactionEvents.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/commentEvents.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/config.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/pointer.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/hex.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostrViewEventsFacade.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/webtorrent.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/embedDiagnostics.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/accessControl.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/magnetUtils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/playbackUtils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/constants.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/gridHealth.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/urlHealthObserver.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/cardSourceVisibility.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/videoTags.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/hashtagNormalization.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/profileMedia.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/lists.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/userBlocks.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/relayManager.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/index.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/watchHistoryService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/r2Service.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/videoNotePayload.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authProviders/index.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/hashtagPreferencesService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/r2-quick.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/sidebarLoading.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/subscriptions.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/channelProfile.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/watchHistoryDebug.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/overlay/popoverEngine.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/videoMenuRenderers.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/moderationService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 11 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/nip46Client.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostrEventSchemas.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostrPublish.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/signRequestQueue.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/viewCounter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/zapSplit.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/formatters.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 9 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 9 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/reactionCounter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/domUtils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/staticModalAccessibility.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/loginModalController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/tagPreferenceMenuController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/reactionController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/magnetValidators.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/videoDeduper.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/serviceWorkerFallbackMessages.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/profileBatchFetcher.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/videoTimestamps.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/designSystem.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/hashView.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/state/appState.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/state/cache.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/applicationBootstrap.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/engagementController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/similarContentController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/urlHealthController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/videoModalCommentController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/torrentStatusController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/moderationActionController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/moderationDecorator.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/trustBootstrap.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/videoEventUtils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/magnetShared.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/toolkit.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/cachePolicies.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/state/profileCache.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /vendor/crypto-helpers.bundle.min.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/syncMetadataStore.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/dmSignalEvents.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/countDiagnostics.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/maxListenerDiagnostics.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/publishHelpers.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/nip04WorkerClient.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/dmDecryptWorkerClient.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/dmDecryptDiagnostics.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/lruCache.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/storage/dmDb.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/dmNostrService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/sessionActor.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/signerHelpers.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/adapters/nip07Adapter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/adapters/nsecAdapter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/adapters/nip46Adapter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /config/instance-config.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/viewEventBindings.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/adminListStore.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/webtorrent.min.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/safeDecode.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/dom/cardObserver.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/magnets.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/storage.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/engine.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/stages.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/exploreScoring.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/kidsScoring.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/kidsAudienceFilterStage.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/sorters.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/sources.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/watchHistoryFeed.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/applicationContext.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/r2.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/storage/r2-mgmt.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/storage/r2-s3.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/storage/s3-multipart.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/storage/s3-client.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/storageService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authProviders/nip07.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authProviders/nip46.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authProviders/nsec.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authProviders/generate.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/views/VideoListView.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/nostrService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/designSystem/metrics.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/overlay/overlayRoot.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /vendor/floating-ui.dom.bundle.min.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostr/nip46Queue.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/VideoCard.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/moderationUiHelpers.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/moderationCopy.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/zapSharedState.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/zapNotifications.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/lnurl.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/platformAddress.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/nwcClient.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/FeedInfoPopover.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/zapReceiptValidator.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/platformFee.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 7 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/modalAccessibility.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/tagPreferenceMenu.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/qrcode.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/state/profileSettingsStore.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/mediaLoader.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/historyView.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/watchHistoryController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/watchHistoryTelemetry.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/playbackService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/authService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/discussionCountService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/commentThreadService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/exploreDataService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/nwcSettingsService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/relayHealthService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/profileIdentityController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/videoListViewController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/profileModalController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/moreMenuController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 8 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/appChromeController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/ModalManager.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/feedEngine/utils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/hashtagStripHelper.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/designSystem/dynamicStyles.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 9 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 10 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 10 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 10 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 12 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/attachments/attachmentUtils.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/directMessagesStore.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/dmNotificationManager.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/payments/zapMessages.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nostrWatchHistoryFacade.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/nwcSettings.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/tagPillList.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/VideoModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/RevertModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/ShareNostrModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/EmbedVideoModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/EmbedPlayerModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/initUploadModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 9 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 12 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 14 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 14 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/initEditModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/initDeleteModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/EventDetailsModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/zapController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/index.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/s3Service.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 9 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/attachmentService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/utils/linkPreviewSettings.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 1 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/nip71FormManager.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/UploadModal.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/ambientBackground.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/video-modal/commentsController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/video-modal/reactionsController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/video-modal/similarContentController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/video-modal/moderationController.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/video-modal/utils/commentAvatar.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/components/SimilarContentCard.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/services/linkPreviewService.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/AppShell.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/Avatar.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/ContactRow.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/ConversationList.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/MessageThread.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/MessageBubble.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/Composer.js
+ HTTP 1/24/2026 10:39:04 PM ::1 GET /js/ui/dm/NotificationCenter.js
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:04 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/dm/DayDivider.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/dm/ZapReceiptList.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/dm/zapHelpers.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/components/EditModal.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/components/DeleteModal.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/storage/s3-url.js
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 5 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 6 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/utils/torrentHash.js
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/dm/DMPrivacySettings.js
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 4 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 2 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/ui/dm/ZapInterface.js
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 3 ms
+ HTTP 1/24/2026 10:39:05 PM ::1 GET /js/payments/zapRequests.js
+ HTTP 1/24/2026 10:39:05 PM ::1 Returned 200 in 2 ms
diff --git a/verification/embed_verification.png b/verification/embed_verification.png
new file mode 100644
index 0000000000000000000000000000000000000000..bab740d8c8aa87d92d28e7dc06553490dcfba3bc
GIT binary patch
literal 11942
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
sc|Bz6AdpP
Date: Sat, 24 Jan 2026 23:02:33 +0000
Subject: [PATCH 041/123] fix: Embed player UI, stats loading, and share URL
- Remove black background from embed video to allow transparency
- Update "Watch on Bitvid" button to "Watch on" + white logo
- Fix share URL generation to point to main site instead of embed
- Ensure view counts and reactions are subscribed in embed mode
---
embed.html | 6 +++---
js/app.js | 11 +++++++++++
js/embed.js | 14 ++++++++++++++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/embed.html b/embed.html
index 03a5d510..134c3f62 100644
--- a/embed.html
+++ b/embed.html
@@ -79,7 +79,7 @@
>