tests/video-modal-zap.test.mjs: setTimeout, tests/webtorrent-regression.test.mjs: setTimeout(() => { tests/webtorrent-regression.test.mjs: setTimeout(() => { tests/video-card-source-visibility.test.mjs: window.requestAnimationFrame = (cb) => setTimeout(() => cb(Date.now()), 16); tests/video-card-source-visibility.test.mjs: window.requestAnimationFrame = (cb) => setTimeout(() => cb(Date.now()), 16); tests/nostr-send-direct-message.test.mjs: setTimeout(() => process.exit(0), 100); tests/nostr-send-direct-message.test.mjs: setTimeout(() => handler(), 0); tests/view-counter.test.mjs:const flushPromises = () => new Promise((resolve) => setTimeout(resolve, 0)); tests/view-counter.test.mjs: setTimeout(() => handler(), 0); tests/subscriptions-manager.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/nostr/toolkit.test.mjs: setTimeout(() => { tests/nostr/sign-request-queue.test.mjs:const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); tests/nostr/integration-remote-flow.test.mjs: setTimeout(() => handler(), 0); tests/nostr/dm-direct-message-flow.test.mjs: await new Promise((r) => setTimeout(r, intervalMs)); tests/nostr/dm-direct-message-flow.test.mjs: await new Promise((resolve) => setTimeout(resolve, 100)); // Still wait to ensure no duplication appears tests/nostr/dmSignalEvents.test.mjs: if (event === 'ok') setTimeout(cb, 0); tests/nostr/client.test.mjs: await new Promise(r => setTimeout(r, 300)); tests/nostr/client.test.mjs: if (evt === "eose") setTimeout(handler, 0); tests/nostr/client.test.mjs: if (evt === "eose") setTimeout(handler, 0); tests/nostr/nip07Permissions.test.js: setTimeout(() => { tests/nostr/watchHistory.test.js: setTimeout(handler, 0); tests/nostr/comment-events.test.mjs: await new Promise(resolve => setTimeout(resolve, 0)); tests/torrent/toast-service.test.mjs: await new Promise((resolve) => setTimeout(resolve, 250)); tests/hashtag-preferences.test.mjs: setTimeout(() => handler(), 0); tests/hashtag-preferences.test.mjs: setTimeout(() => process.exit(0), 100); tests/nostr-private-key-signer.test.mjs: setTimeout(() => process.exit(0), 100); tests/e2e/webseed-playback.spec.ts: test.setTimeout(90000); // Increase timeout for fallback logic tests/nwc-client.test.mjs: setTimeout(() => { tests/nwc-client.test.mjs: setTimeout(() => { tests/watchHistory/watch-history-telemetry.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/feed-engine.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/profile-cache.test.mjs: // Wait for async write (runIdle/setTimeout) tests/profile-cache.test.mjs: await new Promise((resolve) => setTimeout(resolve, 20)); tests/profile-cache.test.mjs: // Wait for async write (runIdle/setTimeout) tests/profile-cache.test.mjs: await new Promise((resolve) => setTimeout(resolve, 20)); tests/dm-normalization.test.mjs: await new Promise((resolve) => setTimeout(resolve, 50)); tests/dm-normalization.test.mjs: setTimeout(() => process.exit(0), 100); tests/webtorrent-handlers.test.mjs: setTimeout(() => { tests/webtorrent-handlers.test.mjs: await new Promise(r => setTimeout(r, 20)); tests/webtorrent-handlers.test.mjs: await new Promise(r => setTimeout(r, 20)); tests/sign-request-queue.test.mjs: await new Promise((resolve) => setTimeout(resolve, 50)); tests/sign-request-queue.test.mjs: await new Promise((resolve) => setTimeout(resolve, 50)); tests/sign-request-queue.test.mjs: await new Promise((resolve) => setTimeout(resolve, 200)); tests/moderation/video-card.test.mjs: window.requestAnimationFrame = (cb) => setTimeout(() => cb(Date.now()), 16); tests/moderation/video-card.test.mjs: window.requestAnimationFrame = (cb) => setTimeout(() => cb(Date.now()), 16); tests/moderation/video-card.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/moderation/video-card.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/moderation/video-card.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/moderation/video-card.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/moderation/submit-report.test.mjs: setTimeout(() => handler(), 0); tests/modal-accessibility.test.mjs: setTimeout(() => callback(Date.now()), 0); tests/zap-split.test.mjs: setTimeout(() => { tests/profile-modal-controller.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/profile-modal-controller.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/profile-modal-controller.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/auth-service.test.mjs: await new Promise((resolve) => setTimeout(resolve, 10)); tests/auth-service.test.mjs: await new Promise((resolve) => setTimeout(resolve, 10)); tests/test-helpers/wait-for.mjs: await new Promise((resolve) => setTimeout(resolve, interval)); tests/watch-history.test.mjs: setTimeout(() => { tests/watch-history.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/watch-history.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/watch-history.test.mjs: await new Promise((resolve) => setTimeout(resolve, 0)); tests/watch-history.test.mjs: await new Promise(r => setTimeout(r, 50)); tests/user-blocks.test.mjs:await new Promise((resolve) => setTimeout(resolve, 100)); tests/user-blocks.test.mjs:await new Promise((resolve) => setTimeout(resolve, 100)); tests/nostr-service-access-control.test.mjs: setTimeout(() => process.exit(0), 100); tests/nostr-login-permissions.test.mjs: setTimeout(() => reject(new Error("permission denied")), 300); tests/admin-list-store.test.mjs: setTimeout(fn, delay); tests/admin-list-store.test.mjs:await new Promise((resolve) => setTimeout(resolve, slowRelayDelayMs + 20)); tests/visual/overlay-layers.spec.ts: test.setTimeout(120_000); tests/state/cache.test.mjs: await new Promise((resolve) => setTimeout(resolve, 10)); tests/nip07-concurrency.test.mjs: await new Promise(resolve => setTimeout(resolve, delay)); tests/nip07-concurrency.test.mjs: // Note: Node's setTimeout is not precise, so we use loose bounds tests/nip07-concurrency.test.mjs: await new Promise(resolve => setTimeout(resolve, delay)); tests/nostr-nip46-queue.test.mjs: await new Promise(r => setTimeout(r, 10)); tests/nostr-nip46-queue.test.mjs: await new Promise(r => setTimeout(r, 50)); tests/nostr-nip46-queue.test.mjs: await new Promise(r => setTimeout(r, 100)); tests/ui/uploadModal-integration.test.mjs: await new Promise(r => setTimeout(r, 10)); tests/ui/components/hashtagStripHelper.test.mjs: // Mock setTimeout if needed tests/ui/components/hashtagStripHelper.test.mjs: win.setTimeout = (callback, delay) => { tests/ui/components/hashtagStripHelper.test.mjs: // JSDOM provides setTimeout by default, remove it if requested tests/ui/components/hashtagStripHelper.test.mjs: // Note: removing setTimeout might break other things, so use with caution tests/ui/components/hashtagStripHelper.test.mjs: // But for testing fallback path where RAF is missing, we usually want setTimeout available. tests/ui/components/hashtagStripHelper.test.mjs: // If we want to test "no RAF, use setTimeout", we remove RAF. tests/ui/components/hashtagStripHelper.test.mjs:test("HashtagStripHelper falls back to window resize with setTimeout when RAF is missing", (t) => { tests/ui/engagement-controller.test.mjs: global.window = { setTimeout: t.mock.fn() }; tests/ui/hashtag-strip-helper-bounce.test.mjs: // Mock setTimeout tests/ui/hashtag-strip-helper-bounce.test.mjs: window.setTimeout = (cb, delay) => { tests/ui/hashtag-strip-helper-bounce.test.mjs: window.setTimeout = (cb, delay) => { tests/ui/url-health-controller.test.mjs: await new Promise(resolve => setTimeout(resolve, 100)); tests/ui/url-health-controller.test.mjs: setTimeout(handler, 10); tests/ui/url-health-controller.test.mjs: setTimeout(handler, 10); tests/ui/url-health-controller.test.mjs: setTimeout(handler, 0); tests/ui/url-health-controller.test.mjs: await new Promise(resolve => setTimeout(resolve, 50)); tests/compliance/nip07_compliance.test.mjs: await new Promise(resolve => setTimeout(resolve, 50)); tests/unit/notificationController.test.mjs: setTimeout: mock.fn((cb, ms) => setTimeout(cb, ms)), tests/unit/client-count-resilience.test.mjs: await new Promise(r => setTimeout(r, 100)); tests/unit/services/r2Service.storage-config.test.mjs: originalSetTimeout = globalThis.setTimeout; tests/unit/services/r2Service.storage-config.test.mjs: globalThis.setTimeout = (fn) => { tests/unit/services/r2Service.storage-config.test.mjs: globalThis.setTimeout = originalSetTimeout; tests/nostr-signer-race.test.mjs: await new Promise(resolve => setTimeout(resolve, 50)); tests/embed_playback_check.spec.mjs: await new Promise(resolve => setTimeout(resolve, 2000)); tests/comment-thread-service.test.mjs:const tick = (ms = 0) => new Promise((resolve) => setTimeout(resolve, ms)); tests/services/link-preview-service.test.mjs: await new Promise((r) => setTimeout(r, 10)); tests/services/playbackService.test.mjs: mock.timers.enable({ apis: ['setTimeout'] }); tests/services/trustBootstrap.test.mjs: setTimeout(() => { tests/services/trustBootstrap.test.mjs: await new Promise(resolve => setTimeout(resolve, 300)); tests/services/profileMetadataService.test.mjs: await new Promise(r => setTimeout(r, 0)); tests/services/playbackService_order.test.mjs: mock.timers.enable({ apis: ['setTimeout'] }); tests/services/relay-health-service.test.mjs: setTimeout(() => relay.emit("connect"), 10); tests/services/relay-health-service.test.mjs: const originalSetTimeout = globalThis.setTimeout; tests/services/relay-health-service.test.mjs: // Manually mock setTimeout to capture callback tests/services/relay-health-service.test.mjs: globalThis.setTimeout = (cb, delay) => { tests/services/relay-health-service.test.mjs: throw new Error("setTimeout was not called with 5000ms delay"); tests/services/relay-health-service.test.mjs: globalThis.setTimeout = originalSetTimeout; tests/services/playbackService_forcedSource.test.mjs: mock.timers.enable({ apis: ['setTimeout'] }); tests/services/playbackService_forcedSource.test.mjs: await new Promise(resolve => setTimeout(resolve, 200)); tests/services/playbackService_forcedSource.test.mjs: await new Promise(resolve => setTimeout(resolve, 200)); tests/services/playbackService_forcedSource.test.mjs: await new Promise(resolve => setTimeout(resolve, 200));