mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-08 16:28:49 +00:00
nip05 says `NIP-05 assumes the <local-part> part will be restricted to the characters a-z0-9-_., case insensitive` So a lot of people is starting the names with uppercase. See here: `https://nostr-check.com/.well-known/nostr.json` So I think we should change the regex to accept lowercase or uppercase. Another way to do it would be to do a `.toLowerCase` at the beginning, but then we would need to do this search ignoring the case: ``` if (!res?.names?.[name]) ``` So maybe for now this is enough?
55 lines
1.1 KiB
TypeScript
55 lines
1.1 KiB
TypeScript
import {ProfilePointer} from './nip19'
|
|
|
|
var _fetch: any
|
|
|
|
try {
|
|
_fetch = fetch
|
|
} catch {}
|
|
|
|
export function useFetchImplementation(fetchImplementation: any) {
|
|
_fetch = fetchImplementation
|
|
}
|
|
|
|
export async function searchDomain(
|
|
domain: string,
|
|
query = ''
|
|
): Promise<{[name: string]: string}> {
|
|
try {
|
|
let res = await (
|
|
await _fetch(`https://${domain}/.well-known/nostr.json?name=${query}`)
|
|
).json()
|
|
|
|
return res.names
|
|
} catch (_) {
|
|
return {}
|
|
}
|
|
}
|
|
|
|
export async function queryProfile(
|
|
fullname: string
|
|
): Promise<ProfilePointer | null> {
|
|
let [name, domain] = fullname.split('@')
|
|
|
|
if (!domain) {
|
|
// if there is no @, it is because it is just a domain, so assume the name is "_"
|
|
domain = name
|
|
name = '_'
|
|
}
|
|
|
|
if (!name.match(/^[A-Za-z0-9-_]+$/)) return null
|
|
|
|
let res = await (
|
|
await _fetch(`https://${domain}/.well-known/nostr.json?name=${name}`)
|
|
).json()
|
|
|
|
if (!res?.names?.[name]) return null
|
|
|
|
let pubkey = res.names[name] as string
|
|
let relays = (res.relays?.[pubkey] || []) as string[] // nip35
|
|
|
|
return {
|
|
pubkey,
|
|
relays
|
|
}
|
|
}
|