mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
feat: update embed player design with transparent background and overlay stats
- Removed background colors from `embed.html` for transparency. - Added a hover-triggered overlay with "Watch on BitVid" button and stats (views, likes, dislikes). - Updated `js/ui/components/EmbedPlayerModal.js` to implement stats update methods and handle the overlay elements. - Updated `js/embed.js` to set the share URL on the overlay after video resolution. - Verified visual changes with Playwright.
This commit is contained in:
1 parent
a9bd7ec79e
commit
d621e6f21a
6 files changed
+715
-25
No files matched your search
+94
-12
@@ -69,28 +69,110 @@
|
||||
|
||||
<link href="css/tailwind.generated.css?v=2024.11.09" rel="stylesheet" />
|
||||
</head>
|
||||
<body class="min-h-screen bg-surface text-text" data-ds="new">
|
||||
<body class="h-screen w-screen overflow-hidden bg-transparent text-text" data-ds="new">
|
||||
<main
|
||||
id="embedRoot"
|
||||
class="mx-auto flex min-h-screen w-full max-w-5xl flex-col px-4 py-6"
|
||||
class="flex h-full w-full flex-col items-center justify-center"
|
||||
>
|
||||
<section
|
||||
class="flex flex-col gap-4 rounded-2xl border border-border bg-surface-alt/60 p-4 shadow-sm"
|
||||
class="relative group flex h-full w-full flex-col items-center justify-center overflow-hidden"
|
||||
>
|
||||
<video
|
||||
id="embedVideo"
|
||||
class="h-full w-full object-contain bg-black"
|
||||
controls
|
||||
playsinline
|
||||
preload="metadata"
|
||||
></video>
|
||||
|
||||
<!-- Overlay -->
|
||||
<div
|
||||
class="aspect-video w-full overflow-hidden rounded-xl border border-border/70 bg-surface"
|
||||
id="embedOverlay"
|
||||
class="pointer-events-none absolute inset-0 flex flex-col justify-end bg-gradient-to-t from-black/80 via-transparent to-transparent p-4 opacity-0 transition-opacity duration-200 group-hover:opacity-100"
|
||||
>
|
||||
<video
|
||||
id="embedVideo"
|
||||
class="h-full w-full"
|
||||
controls
|
||||
playsinline
|
||||
preload="metadata"
|
||||
></video>
|
||||
<div class="pointer-events-auto flex w-full items-end justify-between">
|
||||
<a
|
||||
id="embedWatchButton"
|
||||
href="#"
|
||||
target="_blank"
|
||||
class="flex items-center gap-2 rounded-full border border-white/20 bg-white/10 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-white/20 backdrop-blur-md"
|
||||
>
|
||||
<img
|
||||
src="assets/svg/bitvid-logo-light-mode.svg"
|
||||
alt="BitVid"
|
||||
class="h-4 w-auto"
|
||||
/>
|
||||
<span>Watch on BitVid</span>
|
||||
</a>
|
||||
|
||||
<div
|
||||
class="flex items-center gap-3 text-xs font-medium text-white drop-shadow-md"
|
||||
>
|
||||
<span
|
||||
id="embedViewCount"
|
||||
class="flex items-center gap-1.5"
|
||||
title="Views"
|
||||
>
|
||||
<svg
|
||||
class="h-4 w-4 text-white/80"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
||||
></path>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
|
||||
></path>
|
||||
</svg>
|
||||
<span data-view-count-text>--</span>
|
||||
</span>
|
||||
<span
|
||||
id="embedLikeCount"
|
||||
class="flex items-center gap-1.5"
|
||||
title="Likes"
|
||||
>
|
||||
<svg
|
||||
class="h-3.5 w-3.5 text-white/80"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"
|
||||
></path>
|
||||
</svg>
|
||||
<span data-count>--</span>
|
||||
</span>
|
||||
<span
|
||||
id="embedDislikeCount"
|
||||
class="flex items-center gap-1.5"
|
||||
title="Dislikes"
|
||||
>
|
||||
<svg
|
||||
class="h-3.5 w-3.5 text-white/80"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3"
|
||||
></path>
|
||||
</svg>
|
||||
<span data-count>--</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p
|
||||
id="embedStatus"
|
||||
class="text-sm text-muted"
|
||||
class="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 text-white/90 backdrop-blur-sm"
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
>
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,452 @@
|
||||
npm warn exec The following package was not found and will be installed: [email protected]
|
||||
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
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,43 @@
|
||||
from playwright.sync_api import sync_playwright
|
||||
import time
|
||||
|
||||
def verify_embed_overlay():
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=True)
|
||||
context = browser.new_context()
|
||||
|
||||
# Inject disclaimer bypass
|
||||
context.add_init_script("localStorage.setItem('hasSeenDisclaimer', 'true');")
|
||||
|
||||
page = context.new_page()
|
||||
|
||||
# Go to embed page
|
||||
# Note: We don't have a valid pointer, so video won't load, but UI should be there.
|
||||
page.goto("http://localhost:3000/embed.html")
|
||||
|
||||
# Wait for page load
|
||||
time.sleep(2)
|
||||
|
||||
# Force hover on the container to show overlay
|
||||
container = page.locator("#embedRoot section")
|
||||
container.hover()
|
||||
|
||||
# Wait for transition
|
||||
time.sleep(1)
|
||||
|
||||
# Check elements visibility
|
||||
overlay = page.locator("#embedOverlay")
|
||||
watch_btn = page.locator("#embedWatchButton")
|
||||
stats = page.locator("#embedViewCount")
|
||||
|
||||
print(f"Overlay visible: {overlay.is_visible()}")
|
||||
print(f"Watch button visible: {watch_btn.is_visible()}")
|
||||
print(f"Stats visible: {stats.is_visible()}")
|
||||
|
||||
# Screenshot
|
||||
page.screenshot(path="verification/embed_verification.png")
|
||||
|
||||
browser.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
verify_embed_overlay()
|
||||
Reference in new issue
Block a user