verifyNip05 method
This method will verify the internetIdentifier
with a pubKey
using the NIP05 implementation, and simply will return a Future with a bool that indicates if the verification was successful or not.
example:
final verified = await Nostr.instance.relays.verifyNip05(
internetIdentifier: "localPart@domainPart",
pubKey: "pub key in hex format",
);
Implementation
@override
Future<bool> verifyNip05({
required String internetIdentifier,
required String pubKey,
}) async {
assert(
pubKey.length == 64 || !pubKey.startsWith("npub"),
"pub key is invalid, it must be in hex format and not a npub(nip19) key!",
);
assert(
internetIdentifier.contains("@") &&
internetIdentifier.split("@").length == 2,
"invalid internet identifier",
);
try {
final localPart = internetIdentifier.split("@")[0];
final domainPart = internetIdentifier.split("@")[1];
final res = await http.get(
Uri.parse("https://$domainPart/.well-known/nostr.json?name=$localPart"),
);
final decoded = jsonDecode(res.body) as Map<String, dynamic>;
assert(decoded["names"] != null, "invalid nip05 response, no names key!");
final pubKeyFromResponse = decoded["names"][localPart];
assert(pubKeyFromResponse != null, "invalid nip05 response, no pub key!");
return pubKey == pubKeyFromResponse;
} catch (e) {
NostrClientUtils.log(
"error while verifying nip05 for internet identifier: $internetIdentifier",
e,
);
rethrow;
}
}