diff --git a/app/components/app-menu/settings/nostr.gjs b/app/components/app-menu/settings/nostr.gjs index a0b72fc..0db6fe4 100644 --- a/app/components/app-menu/settings/nostr.gjs +++ b/app/components/app-menu/settings/nostr.gjs @@ -10,8 +10,10 @@ import { excludeRequiredRelays, mergeRequiredRelays, normalizeRelayUrl, + uniqNormalizedRelays, } from '../../../utils/nostr'; import { DEFAULT_BLOSSOM_SERVER } from '../../../services/blossom'; +import tooltip from '../../../modifiers/tooltip'; const stripProtocol = (url) => (url ? url.replace(/^wss?:\/\//, '') : ''); @@ -49,6 +51,10 @@ export default class AppMenuSettingsNostr extends Component { return new Set(this.nostrData.requiredReadRelays.filter(Boolean)); } + get trustedRelaySet() { + return new Set(this.nostrData.trustedRelays.filter(Boolean)); + } + get requiredWriteRelaySet() { return new Set(this.nostrData.requiredWriteRelays.filter(Boolean)); } @@ -78,6 +84,7 @@ export default class AppMenuSettingsNostr extends Component { return { url, isRequired: this.requiredReadRelaySet.has(url), + isTrusted: this.trustedRelaySet.has(url), }; }); } @@ -182,6 +189,26 @@ export default class AppMenuSettingsNostr extends Component { this.settings.update('nostrReadRelayExclusions', null); } + @action + toggleRelayTrust(url) { + const normalized = normalizeRelayUrl(url); + if (!normalized) return; + // Required relays are always trusted and cannot be untrusted. + if (this.requiredReadRelaySet.has(normalized)) return; + + const current = uniqNormalizedRelays( + this.settings.nostrTrustedRelays || [] + ); + const idx = current.indexOf(normalized); + let next; + if (idx >= 0) { + next = current.filter((r) => r !== normalized); + } else { + next = [...current, normalized]; + } + this.settings.update('nostrTrustedRelays', next.length > 0 ? next : null); + } + @action addWriteRelay() { const url = normalizeRelayUrl(this.newWriteRelay); @@ -251,7 +278,7 @@ export default class AppMenuSettingsNostr extends Component { }