diff --git a/src/lib/chat/adapters/nip-53-adapter.ts b/src/lib/chat/adapters/nip-53-adapter.ts index 4f71468..412f910 100644 --- a/src/lib/chat/adapters/nip-53-adapter.ts +++ b/src/lib/chat/adapters/nip-53-adapter.ts @@ -21,6 +21,7 @@ import eventStore from "@/services/event-store"; import pool from "@/services/relay-pool"; import { publishEventToRelays } from "@/services/hub"; import accountManager from "@/services/accounts"; +import { AGGREGATOR_RELAYS } from "@/services/loaders"; import { parseLiveActivity, getLiveStatus, @@ -720,7 +721,7 @@ export class Nip53Adapter extends ChatProtocolAdapter { } // Default fallback relays for live activities - return ["wss://relay.damus.io", "wss://nos.lol", "wss://purplepag.es"]; + return AGGREGATOR_RELAYS; } /** diff --git a/src/lib/relay-transformer.test.ts b/src/lib/relay-transformer.test.ts index 0cae894..d29d233 100644 --- a/src/lib/relay-transformer.test.ts +++ b/src/lib/relay-transformer.test.ts @@ -296,7 +296,7 @@ describe("relayReferences transformer", () => { "wss://relay.damus.io", "wss://nos.lol", "wss://relay.snort.social", - "wss://purplepag.es", + "wss://relay.primal.net", "wss://nostr.wine", ]; diff --git a/src/lib/zap-relay-selection.test.ts b/src/lib/zap-relay-selection.test.ts index ce9bf09..31f61ef 100644 --- a/src/lib/zap-relay-selection.test.ts +++ b/src/lib/zap-relay-selection.test.ts @@ -11,9 +11,10 @@ vi.mock("@/services/relay-list-cache", () => ({ // Mock the loaders for AGGREGATOR_RELAYS vi.mock("@/services/loaders", () => ({ AGGREGATOR_RELAYS: [ - "wss://relay.damus.io", - "wss://nos.lol", - "wss://relay.nostr.band", + "wss://nos.lol/", + "wss://relay.snort.social/", + "wss://relay.primal.net/", + "wss://relay.damus.io/", ], })); @@ -152,7 +153,7 @@ describe("selectZapRelays", () => { expect(result.relays.length).toBeGreaterThan(0); expect(result.sources.fallback.length).toBeGreaterThan(0); - expect(result.relays).toContain("wss://relay.damus.io"); + expect(result.relays).toContain("wss://relay.damus.io/"); }); it("should use fallback when recipient has empty relay list", async () => { diff --git a/src/services/loaders.test.ts b/src/services/loaders.test.ts index 4c5ebb6..ba151b9 100644 --- a/src/services/loaders.test.ts +++ b/src/services/loaders.test.ts @@ -385,9 +385,9 @@ describe("eventLoader", () => { // Should only have aggregator relays (normalized with trailing slash) expect(relays).toContain("wss://nos.lol/"); - expect(relays).toContain("wss://nos.lol/"); - expect(relays).toContain("wss://purplepag.es/"); + expect(relays).toContain("wss://relay.snort.social/"); expect(relays).toContain("wss://relay.primal.net/"); + expect(relays).toContain("wss://relay.damus.io/"); }); it("should limit cached relays to 3", () => { diff --git a/src/services/loaders.ts b/src/services/loaders.ts index 706265e..46a8729 100644 --- a/src/services/loaders.ts +++ b/src/services/loaders.ts @@ -53,8 +53,9 @@ function extractRelayContext(event: NostrEvent): { // IMPORTANT: URLs must be normalized (trailing slash, lowercase) to match RelayStateManager keys export const AGGREGATOR_RELAYS = [ "wss://nos.lol/", - "wss://purplepag.es/", + "wss://relay.snort.social/", "wss://relay.primal.net/", + "wss://relay.damus.io/", ]; // Base event loader (used internally) diff --git a/src/services/relay-selection.test.ts b/src/services/relay-selection.test.ts index 3b694f0..b1e78d1 100644 --- a/src/services/relay-selection.test.ts +++ b/src/services/relay-selection.test.ts @@ -76,7 +76,7 @@ describe("selectRelaysForFilter", () => { const relayListEvent = createRelayListEvent(testSecretKeys[0], [ ["r", "wss://relay.damus.io"], ["r", "wss://nos.lol"], - ["r", "wss://purplepag.es", "read"], + ["r", "wss://relay.snort.social", "read"], ]); // Add to event store @@ -99,7 +99,7 @@ describe("selectRelaysForFilter", () => { result.relays.includes("wss://nos.lol/"); expect(hasWriteRelay).toBe(true); // Should NOT include read-only relay - expect(result.relays).not.toContain("wss://purplepag.es/"); + expect(result.relays).not.toContain("wss://relay.snort.social/"); }); it("should handle multiple authors", async () => { @@ -141,7 +141,7 @@ describe("selectRelaysForFilter", () => { const relayListEvent = createRelayListEvent(testSecretKeys[2], [ ["r", "wss://relay.damus.io", "write"], ["r", "wss://nos.lol", "read"], - ["r", "wss://purplepag.es", "read"], + ["r", "wss://relay.snort.social", "read"], ]); eventStore.add(relayListEvent); @@ -160,7 +160,7 @@ describe("selectRelaysForFilter", () => { // Should include at least one read relay - selectOptimalRelays may pick subset const hasReadRelay = result.relays.includes("wss://nos.lol/") || - result.relays.includes("wss://purplepag.es/"); + result.relays.includes("wss://relay.snort.social/"); expect(hasReadRelay).toBe(true); // Should NOT include write-only relay expect(result.relays).not.toContain("wss://relay.damus.io/");