Browse Source

added standard relay set to fetchNostrEvent, as a temporary fix.

master
silberengel 7 months ago
parent
commit
fa0d2376f1
  1. 6
      package-lock.json
  2. 30
      src/lib/utils/websocket_utils.ts
  3. 6
      tests/e2e/my_notes_layout.pw.spec.ts

6
package-lock.json generated

@ -6422,9 +6422,9 @@
} }
}, },
"node_modules/svelte": { "node_modules/svelte": {
"version": "5.37.2", "version": "5.37.3",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.37.2.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.37.3.tgz",
"integrity": "sha512-SAakJiy04/OvXRAUnGxRACGzw6GB9kmxYIjuMO/zTcTL6psqc54Y0O/yR6I3OLqFqn79EPd23qsCGkKozvYYbQ==", "integrity": "sha512-7t/ejshehHd+95z3Z7ebS7wsqHDQxi/8nBTuTRwpMgNegfRBfuitCSKTUDKIBOExqfT2+DhQ2VLG8Xn+cBXoaQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

30
src/lib/utils/websocket_utils.ts

@ -1,6 +1,8 @@
import { WebSocketPool } from "../data_structures/websocket_pool.ts"; import { WebSocketPool } from "../data_structures/websocket_pool.ts";
import { error } from "@sveltejs/kit"; import { error } from "@sveltejs/kit";
import { naddrDecode, neventDecode } from "../utils.ts"; import { naddrDecode, neventDecode } from "../utils.ts";
import { activeInboxRelays, activeOutboxRelays } from "../ndk.ts";
import { get } from "svelte/store";
export interface NostrEvent { export interface NostrEvent {
id: string; id: string;
@ -25,8 +27,9 @@ export interface NostrFilter {
type ResolveCallback<T> = (value: T | PromiseLike<T>) => void; type ResolveCallback<T> = (value: T | PromiseLike<T>) => void;
type RejectCallback = (reason?: any) => void; type RejectCallback = (reason?: any) => void;
type EventHandler = (ev: Event) => void; type EventHandler = (ev: Event) => void;
type MessageEventHandler = (ev: MessageEvent) => void;
type EventHandlerReject = (reject: RejectCallback) => EventHandler; type EventHandlerReject = (reject: RejectCallback) => EventHandler;
type EventHandlerResolve<T> = (resolve: ResolveCallback<T>) => EventHandlerReject; type EventHandlerResolve<T> = (resolve: ResolveCallback<T>) => (reject: RejectCallback) => MessageEventHandler;
function handleMessage( function handleMessage(
ev: MessageEvent, ev: MessageEvent,
@ -67,14 +70,31 @@ function handleError(
} }
export async function fetchNostrEvent(filter: NostrFilter): Promise<NostrEvent> { export async function fetchNostrEvent(filter: NostrFilter): Promise<NostrEvent> {
// TODO: Improve relay selection when relay management is implemented. // AI-NOTE: Updated to use active relay stores instead of hardcoded relay URL
const ws = await WebSocketPool.instance.acquire("wss://thecitadel.nostr1.com"); // This ensures the function uses the user's configured relays and can find events
// across multiple relays rather than being limited to a single hardcoded relay.
// Get available relays from the active relay stores
const inboxRelays = get(activeInboxRelays);
const outboxRelays = get(activeOutboxRelays);
// Combine all available relays, prioritizing inbox relays
const availableRelays = [...inboxRelays, ...outboxRelays];
if (availableRelays.length === 0) {
throw new Error("[WebSocket Utils]: No relays available for fetching events");
}
// Select a relay - prefer inbox relays if available, otherwise use any available relay
const selectedRelay = inboxRelays.length > 0 ? inboxRelays[0] : availableRelays[0];
const ws = await WebSocketPool.instance.acquire(selectedRelay);
const subId = crypto.randomUUID(); const subId = crypto.randomUUID();
// AI-NOTE: Currying is used here to abstract the internal handler logic away from the WebSocket // AI-NOTE: Currying is used here to abstract the internal handler logic away from the WebSocket
// handling logic. The message and error handlers themselves can be refactored without affecting // handling logic. The message and error handlers themselves can be refactored without affecting
// the WebSocket handling logic. // the WebSocket handling logic.
const curriedMessageHandler: (subId: string) => EventHandlerResolve<NostrEvent> = const curriedMessageHandler: (subId: string) => (resolve: ResolveCallback<NostrEvent>) => (reject: RejectCallback) => MessageEventHandler =
(subId) => (subId) =>
(resolve) => (resolve) =>
(reject) => (reject) =>
@ -87,7 +107,7 @@ export async function fetchNostrEvent(filter: NostrFilter): Promise<NostrEvent>
// AI-NOTE: These variables store references to partially-applied handlers so that the `finally` // AI-NOTE: These variables store references to partially-applied handlers so that the `finally`
// block receives the correct references to clean up the listeners. // block receives the correct references to clean up the listeners.
let messageHandler: EventHandler; let messageHandler: MessageEventHandler;
let errorHandler: EventHandler; let errorHandler: EventHandler;
const res = new Promise<NostrEvent>((resolve, reject) => { const res = new Promise<NostrEvent>((resolve, reject) => {

6
tests/e2e/my_notes_layout.pw.spec.ts

@ -1,8 +1,8 @@
import { test, expect } from '@playwright/test'; import { test, expect, type Page } from '@playwright/test';
// Utility to check for horizontal scroll bar // Utility to check for horizontal scroll bar
async function hasHorizontalScroll(page, selector) { async function hasHorizontalScroll(page: Page, selector: string) {
return await page.evaluate((sel) => { return await page.evaluate((sel: string) => {
const el = document.querySelector(sel); const el = document.querySelector(sel);
if (!el) return false; if (!el) return false;
return el.scrollWidth > el.clientWidth; return el.scrollWidth > el.clientWidth;

Loading…
Cancel
Save