feat: 🌸
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
||||
isProtectedEvent,
|
||||
isReplaceable
|
||||
} from './event'
|
||||
import { normalizeHttpUrl } from './url'
|
||||
|
||||
// https://github.com/nostr-protocol/nips/blob/master/25.md
|
||||
export function createReactionDraftEvent(event: Event, emoji: TEmoji | string = '+'): TDraftEvent {
|
||||
@@ -346,6 +347,15 @@ export function createBookmarkDraftEvent(tags: string[][], content = ''): TDraft
|
||||
}
|
||||
}
|
||||
|
||||
export function createBlossomServerListDraftEvent(servers: string[]): TDraftEvent {
|
||||
return {
|
||||
kind: ExtendedKind.BLOSSOM_SERVER_LIST,
|
||||
content: '',
|
||||
tags: servers.map((server) => ['server', normalizeHttpUrl(server)]),
|
||||
created_at: dayjs().unix()
|
||||
}
|
||||
}
|
||||
|
||||
function generateImetaTags(imageUrls: string[]) {
|
||||
return imageUrls
|
||||
.map((imageUrl) => {
|
||||
|
||||
@@ -451,7 +451,7 @@ export function extractHashtags(content: string) {
|
||||
export function extractImageInfosFromEventTags(event: Event) {
|
||||
const images: TImageInfo[] = []
|
||||
event.tags.forEach((tag) => {
|
||||
const imageInfo = extractImageInfoFromTag(tag)
|
||||
const imageInfo = extractImageInfoFromTag(tag, event.pubkey)
|
||||
if (imageInfo) {
|
||||
images.push(imageInfo)
|
||||
}
|
||||
@@ -588,6 +588,13 @@ export function extractEmojiInfosFromTags(tags: string[][] = []) {
|
||||
.filter(Boolean) as TEmoji[]
|
||||
}
|
||||
|
||||
export function extractServersFromTags(tags: string[][] = []) {
|
||||
return tags
|
||||
.filter(tagNameEquals('server'))
|
||||
.map(([, url]) => (url ? normalizeHttpUrl(url) : ''))
|
||||
.filter(Boolean)
|
||||
}
|
||||
|
||||
export function createFakeEvent(event: Partial<Event>): Event {
|
||||
return {
|
||||
id: '',
|
||||
|
||||
@@ -49,13 +49,13 @@ export function generateEventId(event: Pick<Event, 'id' | 'pubkey'>) {
|
||||
return nip19.neventEncode({ id: event.id, author: event.pubkey, relays: [relay] })
|
||||
}
|
||||
|
||||
export function extractImageInfoFromTag(tag: string[]): TImageInfo | null {
|
||||
export function extractImageInfoFromTag(tag: string[], pubkey?: string): TImageInfo | null {
|
||||
if (tag[0] !== 'imeta') return null
|
||||
const urlItem = tag.find((item) => item.startsWith('url '))
|
||||
const url = urlItem?.slice(4)
|
||||
if (!url) return null
|
||||
|
||||
const image: TImageInfo = { url }
|
||||
const image: TImageInfo = { url, pubkey }
|
||||
const blurHashItem = tag.find((item) => item.startsWith('blurhash '))
|
||||
const blurHash = blurHashItem?.slice(9)
|
||||
if (blurHash) {
|
||||
|
||||
@@ -48,7 +48,7 @@ export function normalizeHttpUrl(url: string): string {
|
||||
return p.toString()
|
||||
} catch {
|
||||
console.error('Invalid URL:', url)
|
||||
return url
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user