SkateSpots/.agents/skills/note-content/files/lib/imeta.ts
shakespeare.diy 06fae294b8 New project created with Shakespeare
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-06-15 19:49:07 +07:00

43 lines
1.3 KiB
TypeScript

/** Parsed imeta entry from NIP-94 tags. */
export interface ImetaEntry {
url: string;
thumbnail?: string;
mime?: string;
/** Summary text (used as webxdc app name for webxdc attachments). */
summary?: string;
/** Webxdc session UUID — present when the attachment is a stateful webxdc app. */
webxdc?: string;
/** Pixel dimensions from NIP-94 `dim` tag, e.g. "1280x720". */
dim?: string;
/** Blurhash placeholder from NIP-94 `blurhash` tag. */
blurhash?: string;
}
/** Parse all imeta tags into a map keyed by URL. Works for any event kind. */
export function parseImetaMap(tags: string[][]): Map<string, ImetaEntry> {
const map = new Map<string, ImetaEntry>();
for (const tag of tags) {
if (tag[0] !== 'imeta') continue;
const entry: Record<string, string> = {};
for (let i = 1; i < tag.length; i++) {
const part = tag[i];
const spaceIdx = part.indexOf(' ');
if (spaceIdx === -1) continue;
const key = part.slice(0, spaceIdx);
const value = part.slice(spaceIdx + 1);
entry[key] = value;
}
if (entry.url) {
map.set(entry.url, {
url: entry.url,
thumbnail: entry.image,
mime: entry.m,
summary: entry.summary,
webxdc: entry.webxdc,
dim: entry.dim,
blurhash: entry.blurhash,
});
}
}
return map;
}