aboutsummaryrefslogtreecommitdiffstats
path: root/src/nostr.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-02 19:03:19 -0700
committerAdam Soltys <[email protected]>2026-09-02 19:03:19 -0700
commita2069d6ad1423b1788428b93b6bbb4531c551572 (patch)
tree5000f9a25b508e3febaea6921ba85c679f35f213 /src/nostr.js
parent15d8c6f3dab19c7f51ad00b2fc377bf6eaa7f819 (diff)
downloadcoinosv3-a2069d6ad1423b1788428b93b6bbb4531c551572.tar.gz
coinosv3-a2069d6ad1423b1788428b93b6bbb4531c551572.zip
nevent and nprofile references come alive: nprofile mentions render as clickable @names beside their npub siblings, and note/nevent references become 'view note' links that fetch the event by id (relay hints first) and open its thread right in the app — the dim truncated stubs survive only for what genuinely can't resolve
Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
Diffstat (limited to 'src/nostr.js')
-rw-r--r--src/nostr.js12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/nostr.js b/src/nostr.js
index 753d4a8..a76ef5c 100644
--- a/src/nostr.js
+++ b/src/nostr.js
@@ -120,6 +120,18 @@ export function parseNostrPubkey(input) {
}
// An npub or 64-hex nostr pubkey → hex, or null if it isn't one.
export function npubOf(pkHex) { try { return npubEncode(pkHex); } catch { return null; } }
+// Any nostr entity reference → something renderable: npub/nprofile land as a
+// pubkey (with relay hints when carried), note/nevent as an event id.
+export function parseNostrRef(input) {
+ try {
+ const d = nip19decode(String(input || '').trim());
+ if (d.type === 'npub') return { type: 'pubkey', pk: d.data };
+ if (d.type === 'nprofile') return { type: 'pubkey', pk: d.data.pubkey, relays: d.data.relays || [] };
+ if (d.type === 'note') return { type: 'event', id: d.data, relays: [] };
+ if (d.type === 'nevent') return { type: 'event', id: d.data.id, relays: d.data.relays || [], author: d.data.author || null };
+ } catch {}
+ return null;
+}
// A raw secret key → nsec, for the one place that deliberately exports it.
export function nsecOf(sk) { try { return nsecEncode(sk); } catch { return null; } }