diff --git a/packages/app/src/Element/NostrLink.tsx b/packages/app/src/Element/NostrLink.tsx
index 4d92521..1b14078 100644
--- a/packages/app/src/Element/NostrLink.tsx
+++ b/packages/app/src/Element/NostrLink.tsx
@@ -5,6 +5,7 @@ import Mention from "Element/Mention";
import NostrFileHeader from "Element/NostrFileHeader";
import { parseNostrLink } from "Util";
import NoteQuote from "Element/NoteQuote";
+import ZapstrEmbed from "Element/ZapstrEmbed";
export default function NostrLink({ link, depth }: { link: string; depth?: number }) {
const nav = parseNostrLink(link);
@@ -15,6 +16,10 @@ export default function NostrLink({ link, depth }: { link: string; depth?: numbe
if (nav.kind === EventKind.FileHeader) {
return ;
}
+ if (nav.kind === 31337) {
+ return ;
+ }
+
if ((depth ?? 0) > 0) {
const evLink = nav.encode();
return (
diff --git a/packages/app/src/Element/ZapstrEmbed.tsx b/packages/app/src/Element/ZapstrEmbed.tsx
new file mode 100644
index 0000000..422682b
--- /dev/null
+++ b/packages/app/src/Element/ZapstrEmbed.tsx
@@ -0,0 +1,11 @@
+import useEventFeed from "Feed/EventFeed";
+import Spinner from "Icons/Spinner";
+import { NostrLink } from "Util";
+import Text from "./Text";
+
+export default function ZapstrEmbed({ link }: { link: NostrLink }) {
+ const ev = useEventFeed(link);
+
+ if (!ev.data) return ;
+ return ;
+}
diff --git a/packages/app/src/Feed/EventFeed.ts b/packages/app/src/Feed/EventFeed.ts
index 798a569..359dbee 100644
--- a/packages/app/src/Feed/EventFeed.ts
+++ b/packages/app/src/Feed/EventFeed.ts
@@ -1,13 +1,24 @@
import { useMemo } from "react";
+import { NostrPrefix } from "@snort/nostr";
import useRequestBuilder from "Hooks/useRequestBuilder";
import { RequestBuilder, ReplaceableNoteStore } from "System";
-import { NostrLink } from "Util";
+import { NostrLink, unwrap } from "Util";
export default function useEventFeed(link: NostrLink) {
const sub = useMemo(() => {
const b = new RequestBuilder(`event:${link.id.slice(0, 12)}`);
- b.withFilter().id(link.id, link.relays?.at(0));
+ if (link.type === NostrPrefix.Address) {
+ const f = b.withFilter().tag("d", [link.id]);
+ if (link.author) {
+ f.authors([unwrap(link.author)]);
+ }
+ if (link.kind) {
+ f.kinds([unwrap(link.kind)]);
+ }
+ } else {
+ b.withFilter().id(link.id, link.relays?.at(0));
+ }
return b;
}, [link]);
diff --git a/packages/nostr/src/legacy/Links.ts b/packages/nostr/src/legacy/Links.ts
index 8cc2618..c21763a 100644
--- a/packages/nostr/src/legacy/Links.ts
+++ b/packages/nostr/src/legacy/Links.ts
@@ -61,16 +61,22 @@ export function decodeTLV(str: string) {
entries.push({
type: t,
length: l,
- value: decodeTLVEntry(t, new Uint8Array(v)),
+ value: decodeTLVEntry(t, decoded.prefix, new Uint8Array(v)),
});
x += 2 + l;
}
return entries;
}
-function decodeTLVEntry(type: TLVEntryType, data: Uint8Array) {
+function decodeTLVEntry(type: TLVEntryType, prefix: string, data: Uint8Array) {
switch (type) {
- case TLVEntryType.Special:
+ case TLVEntryType.Special: {
+ if (prefix === NostrPrefix.Address) {
+ return new TextDecoder("ASCII").decode(data);
+ } else {
+ return secp.utils.bytesToHex(data);
+ }
+ }
case TLVEntryType.Author: {
return secp.utils.bytesToHex(data);
}