From 1ce053b26f36ac2a8b3e3e16697ef612640bbf54 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 26 Jan 2026 10:08:37 -0800 Subject: [PATCH] Stringify supported nips --- packages/app/src/index.ts | 2 +- packages/app/src/relays.ts | 6 ++++++ packages/app/src/sync.ts | 2 +- packages/lib/src/Tools.ts | 1 + packages/net/src/message.ts | 7 +++++++ packages/util/src/Relay.ts | 2 +- 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/app/src/index.ts b/packages/app/src/index.ts index d9d8b35..a212689 100644 --- a/packages/app/src/index.ts +++ b/packages/app/src/index.ts @@ -105,4 +105,4 @@ routerContext.getPubkeyRelays = getPubkeyRelays routerContext.getRelayQuality = getRelayQuality routerContext.getDefaultRelays = _relayGetter() routerContext.getIndexerRelays = _relayGetter() -routerContext.getSearchRelays = _relayGetter(r => r?.supported_nips?.includes?.(50)) +routerContext.getSearchRelays = _relayGetter(r => r?.supported_nips?.includes?.("50")) diff --git a/packages/app/src/relays.ts b/packages/app/src/relays.ts index 40c0041..794d74a 100644 --- a/packages/app/src/relays.ts +++ b/packages/app/src/relays.ts @@ -39,6 +39,12 @@ export const fetchRelay = async (url: string): Promise> => { if (json) { const info = {...json, url} + if (!Array.isArray(info.supported_nips)) { + info.supported_nips = [] + } + + info.supported_nips = info.supported_nips.map(String) + relaysByUrl.update($relaysByUrl => { $relaysByUrl.set(url, info) diff --git a/packages/app/src/sync.ts b/packages/app/src/sync.ts index a6b6e2c..555e1b7 100644 --- a/packages/app/src/sync.ts +++ b/packages/app/src/sync.ts @@ -11,7 +11,7 @@ export const hasNegentropy = (url: string) => { const relay = getRelay(url) if (relay?.negentropy) return true - if (relay?.supported_nips?.includes?.(77)) return true + if (relay?.supported_nips?.includes?.("77")) return true if (relay?.software?.includes?.("strfry") && !relay?.version?.match(/^0\./)) return true return false diff --git a/packages/lib/src/Tools.ts b/packages/lib/src/Tools.ts index 875df8c..0658f02 100644 --- a/packages/lib/src/Tools.ts +++ b/packages/lib/src/Tools.ts @@ -1390,6 +1390,7 @@ export const setJson = (k: string, v: any) => localStorage.setItem(k, JSON.strin /** Options for fetch requests */ type FetchOpts = { method?: string + signal?: AbortSignal headers?: Record body?: string | FormData } diff --git a/packages/net/src/message.ts b/packages/net/src/message.ts index 02fa87a..a561c9d 100644 --- a/packages/net/src/message.ts +++ b/packages/net/src/message.ts @@ -3,6 +3,7 @@ import type {SignedEvent, Filter} from "@welshman/util" // relay -> client export enum RelayMessageType { + Notice = "NOTICE", Auth = "AUTH", Closed = "CLOSED", Eose = "EOSE", @@ -14,6 +15,8 @@ export enum RelayMessageType { export type RelayMessage = any[] +export type RelayNoticePayload = [string] + export type RelayAuthPayload = [string] export type RelayClosedPayload = [string, string] @@ -28,6 +31,8 @@ export type RelayNegMsgPayload = [string, string] export type RelayOkPayload = [string, boolean, string] +export type RelayNotice = [RelayMessageType.Notice, ...RelayNoticePayload] + export type RelayAuth = [RelayMessageType.Auth, ...RelayAuthPayload] export type RelayClosed = [RelayMessageType.Closed, ...RelayClosedPayload] @@ -42,6 +47,8 @@ export type RelayNegMsg = [RelayMessageType.NegMsg, ...RelayNegMsgPayload] export type RelayOk = [RelayMessageType.Ok, ...RelayOkPayload] +export const isRelayNotice = (m: RelayMessage): m is RelayNotice => m[0] === RelayMessageType.Notice + export const isRelayAuth = (m: RelayMessage): m is RelayAuth => m[0] === RelayMessageType.Auth export const isRelayClosed = (m: RelayMessage): m is RelayClosed => m[0] === RelayMessageType.Closed diff --git a/packages/util/src/Relay.ts b/packages/util/src/Relay.ts index e6775a5..9ada356 100644 --- a/packages/util/src/Relay.ts +++ b/packages/util/src/Relay.ts @@ -22,7 +22,7 @@ export type RelayProfile = { version?: string negentropy?: number description?: string - supported_nips?: number[] + supported_nips?: string[] privacy_policy?: string terms_of_service?: string limitation?: {